Re: WARNING: CPU: 0 PID: 0 at ../drivers/usb/dwc2/gadget.c:300 dwc2_hsotg_init_fifo+0x34/0x1b4

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Maynard,

On 11/7/2018 2:07 AM, Maynard CABIENTE wrote:
> Hi John,
> 
> Sorry re-sending as it was detected as spam before (due to HTML subpart).
> 
> I’m not certain if you are the correct person that maintains the drivers/usb/dwc2 for Linux kernel 4.14. I noticed that 4.20 is a different person.
> 
> We are using an Altera Cyclone V SoC FPGA on our board with linux kernel 4.14.44 and enabling the USB gadget for HID (keyboard and mouse) and mass storage (2 interfaces). The USB will always be configured for USB gadget (and never host). At times, we are encountering the kernel warning as seen below. It can happen a few times and it may cause our board to reboot. This mostly happens when a USB reset occurs and the (HID and mass storage) gadget is in a connected state.
> 
> Here is my understanding of the issue.
> 
> When in connected state and a USB reset has occurred, the irq handler dwc2_hstog_irq() will report the disconnection to the individual gadget functions (e.g. hid and mass storage). Each hid gadget function (keyboard and mouse) will call hidg_disable() and will in turn disable the USB endpoints and clear the respective bits in the FIFO map. Each mass storage function will also call fsg_disable() and will in turn disable the USB endpoints and clear the bits in the FIFO map. The function dwc2_hsotg_core_init_disconnected() will be called afterwards and it assumes that all the USB endpoints have been disabled already and FIFO map is zeroed out.
> 
> What I notice here is that there is a race condition that can happen where the mass storage gadget function can be delayed in disabling the USB endpoints prior to the call to dwc2_hsotg_core_init_disconnected(), which results to the kernel warning message:
> 
> [  135.400063] WARNING: CPU: 0 PID: 0 at ../drivers/usb/dwc2/gadget.c:300 dwc2_hsotg_init_fifo+0x34/0x1b4
> [  135.409327] Modules linked in: usb_f_mass_storage usb_f_hid libcomposite
> [  135.416020] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.14.44-kx4+ #8
> [  135.422433] Hardware name: Altera SOCFPGA
> [  135.426450] [<c011107c>] (unwind_backtrace) from [<c010d20c>] (show_stack+0x20/0x24)
> [  135.434170] [<c010d20c>] (show_stack) from [<c06e7ae8>] (dump_stack+0xa4/0xd8)
> [  135.441375] [<c06e7ae8>] (dump_stack) from [<c0120910>] (__warn+0xe0/0x110)
> [  135.448318] [<c0120910>] (__warn) from [<c0120a10>] (warn_slowpath_null+0x30/0x38)
> [  135.455866] [<c0120a10>] (warn_slowpath_null) from [<c047a938>] (dwc2_hsotg_init_fifo+0x34/0x1b4)
> [  135.464714] [<c047a938>] (dwc2_hsotg_init_fifo) from [<c047eafc>] (dwc2_hsotg_core_init_disconnected+0xb8/0x4ac)
> [  135.474856] [<c047eafc>] (dwc2_hsotg_core_init_disconnected) from [<c047eff0>] (dwc2_hsotg_irq.part.4+0x100/0x9a4)
> [  135.485168] [<c047eff0>] (dwc2_hsotg_irq.part.4) from [<c047f8c4>] (dwc2_hsotg_irq+0x30/0x3c)
> [  135.493671] [<c047f8c4>] (dwc2_hsotg_irq) from [<c016f8ec>] (__handle_irq_event_percpu+0xb0/0x2bc)
> [  135.502602] [<c016f8ec>] (__handle_irq_event_percpu) from [<c016fb24>] (handle_irq_event_percpu+0x2c/0x68)
> [  135.512223] [<c016fb24>] (handle_irq_event_percpu) from [<c016fbcc>] (handle_irq_event+0x6c/0x90)
> [  135.521066] [<c016fbcc>] (handle_irq_event) from [<c0173e40>] (handle_fasteoi_irq+0xb4/0x158)
> [  135.529562] [<c0173e40>] (handle_fasteoi_irq) from [<c016ea6c>] (generic_handle_irq+0x28/0x38)
> [  135.538145] [<c016ea6c>] (generic_handle_irq) from [<c016f128>] (__handle_domain_irq+0x9c/0xc4)
> [  135.546815] [<c016f128>] (__handle_domain_irq) from [<c01014fc>] (gic_handle_irq+0x5c/0x88)
> [  135.555140] [<c01014fc>] (gic_handle_irq) from [<c0703570>] (__irq_svc+0x70/0x98)
> [  135.562591] Exception stack(0xc0c01f00 to 0xc0c01f48)
> 
> I am hoping that you will be able to help me determine a possible solution to this kernel warning. I tried to put a delay to the call to dwc2_hsotg_core_init_disconnected() in dwc2_hstog_irq() by using a workqueue but there are other issues that popped up. I appreciate any help I can get to resolve this issue.

This warn message popup due to on disconnect not all EP's are disabled 
and FIFO released in fifo_map. To solve this issue I submitted patches:
[PATCH v2] usb: dwc2: Disable all EP's on disconnect
and fix to above patch:
[PATCH] usb: dwc2: Fix ep disable spinlock flow.

Please apply these patches and test. Let me know if this fix your issue.

Thanks,
Minas


> 
> Regards,
> Maynard
> 
> 
> ________________________________
> 
> Ce message, ainsi que tous les fichiers joints à ce message, peuvent contenir des informations sensibles et/ ou confidentielles ne devant pas être divulguées. Si vous n'êtes pas le destinataire de ce message (ou que vous recevez ce message par erreur), nous vous remercions de le notifier immédiatement à son expéditeur, et de détruire ce message. Toute copie, divulgation, modification, utilisation ou diffusion, non autorisée, directe ou indirecte, de tout ou partie de ce message, est strictement interdite.
> 
> 
> This e-mail, and any document attached hereby, may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorized, direct or indirect, copying, disclosure, distribution or other use of the material or parts thereof is strictly forbidden.
> 





[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux