Re: [PATCH V2] usb: gadget: udc-xilinx: replace memcpy with memcpy_toio
From: Linus Walleij
Date: Fri Aug 26 2022 - 07:04:47 EST
On Wed, Aug 24, 2022 at 9:14 AM Piyush Mehta <piyush.mehta@xxxxxxx> wrote:
> For ARM processor, unaligned access to device memory is not allowed.
> Method memcpy does not take care of alignment.
>
> USB detection failure with the unaligned address of memory access, with
> below kernel crash. To fix the unaligned address the kernel panic issue,
> replace memcpy with memcpy_toio method.
>
> Kernel crash:
> Unable to handle kernel paging request at virtual address ffff80000c05008a
> Mem abort info:
> ESR = 0x96000061
> EC = 0x25: DABT (current EL), IL = 32 bits
> SET = 0, FnV = 0
> EA = 0, S1PTW = 0
> FSC = 0x21: alignment fault
> Data abort info:
> ISV = 0, ISS = 0x00000061
> CM = 0, WnR = 1
> swapper pgtable: 4k pages, 48-bit VAs, pgdp=000000000143b000
> [ffff80000c05008a] pgd=100000087ffff003, p4d=100000087ffff003,
> pud=100000087fffe003, pmd=1000000800bcc003, pte=00680000a0010713
> Internal error: Oops: 96000061 [#1] SMP
> Modules linked in:
> CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.15.19-xilinx-v2022.1 #1
> Hardware name: ZynqMP ZCU102 Rev1.0 (DT)
> pstate: 200000c5 (nzCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> pc : __memcpy+0x30/0x260
> lr : __xudc_ep0_queue+0xf0/0x110
> sp : ffff800008003d00
> x29: ffff800008003d00 x28: ffff800009474e80 x27: 00000000000000a0
> x26: 0000000000000100 x25: 0000000000000012 x24: ffff000800bc8080
> x23: 0000000000000001 x22: 0000000000000012 x21: ffff000800bc8080
> x20: 0000000000000012 x19: ffff000800bc8080 x18: 0000000000000000
> x17: ffff800876482000 x16: ffff800008004000 x15: 0000000000004000
> x14: 00001f09785d0400 x13: 0103020101005567 x12: 0781400000000200
> x11: 00000000c5672a10 x10: 00000000000008d0 x9 : ffff800009463cf0
> x8 : ffff8000094757b0 x7 : 0201010055670781 x6 : 4000000002000112
> x5 : ffff80000c05009a x4 : ffff000800a15012 x3 : ffff00080362ad80
> x2 : 0000000000000012 x1 : ffff000800a15000 x0 : ffff80000c050088
> Call trace:
> __memcpy+0x30/0x260
> xudc_ep0_queue+0x3c/0x60
> usb_ep_queue+0x38/0x44
> composite_ep0_queue.constprop.0+0x2c/0xc0
> composite_setup+0x8d0/0x185c
> configfs_composite_setup+0x74/0xb0
> xudc_irq+0x570/0xa40
> __handle_irq_event_percpu+0x58/0x170
> handle_irq_event+0x60/0x120
> handle_fasteoi_irq+0xc0/0x220
> handle_domain_irq+0x60/0x90
> gic_handle_irq+0x74/0xa0
> call_on_irq_stack+0x2c/0x60
> do_interrupt_handler+0x54/0x60
> el1_interrupt+0x30/0x50
> el1h_64_irq_handler+0x18/0x24
> el1h_64_irq+0x78/0x7c
> arch_cpu_idle+0x18/0x2c
> do_idle+0xdc/0x15c
> cpu_startup_entry+0x28/0x60
> rest_init+0xc8/0xe0
> arch_call_rest_init+0x10/0x1c
> start_kernel+0x694/0x6d4
> __primary_switched+0xa4/0xac
>
> Cc: stable@xxxxxxxxxxxxxxx
> Fixes: 1f7c51660034 ("usb: gadget: Add xilinx usb2 device support")
> Signed-off-by: Piyush Mehta <piyush.mehta@xxxxxxx>
> ---
> Changes in V2:
> - Address Greg KH review comments:
> - Added information in the form of a Fixes: commit Id (commit message).
> - Cc stable kernel.
>
> Link:https://lore.kernel.org/all/YwW8zE8ieLCsSxPN@xxxxxxxxx/
That link should be up under the commit message, but it's not very important.
The solution looks reasonable.
Reviewed-by: Linus Walleij <linus.walleij@xxxxxxxxxx>
Yours,
Linus Walleij