Re: [PATCH] usb: add Freescale QE/CPM USB peripheral controller driver
From: Anton Vorontsov <hidden>
Date: 2008-09-01 16:35:33
Also in:
lkml
On Thu, Aug 28, 2008 at 05:43:33PM +0800, Li Yang wrote:
Some of Freescale SoC chips have a QE or CPM co-processor which supports full speed USB. The driver adds device mode support of both QE and CPM USB controller to Linux USB gadget. The driver is tested with MPC8360 and MPC8272, and should work with other models having QE/CPM given minor tweaks. Signed-off-by: Xie Xiaobo <redacted> Signed-off-by: Li Yang <redacted> ---
Just found a recursive locking bug: [...]
+static int reset_queues(struct qe_udc *udc)
+{Note: this function is called from the IRQ, the IRQ handler grabs udc->lock spinlock..
+ u8 pipe; + + for (pipe = 0; pipe < USB_MAX_ENDPOINTS; pipe++) + udc_reset_ep_queue(udc, pipe); + + /* report disconnect; the driver is already quiesced */ + udc->driver->disconnect(&udc->gadget);
In the disconnect(), g_ether driver will immediately call qe_ep_disable() function which will try to grab &udc->lock spinlock once again.. Not sure how to fix this properly... :-/ p.s. the same bug exists in omap_udc.c, pxa27x_udc.c and probably other drivers as well... The only reason why it does not exploit in most cases is that the spin_lock_irqsave for !SMP case turns into simple local_irq_save(). -- Anton Vorontsov email: cbouatmailru@gmail.com irc://irc.freenode.net/bd2