1
linux/drivers/usb/musb
Ming Lei eeb1b2a4a9 usb: musb: gadget: fix bulk IN infinit hangs in double buffer case
This patch fixes one infinite hang of bulk IN transfer in double buffer
case, the hang can be observed easily by test #6 of usbtest if musb is
configured as g_zero and fifo mode 3 is taken to enable double fifo.

In fact, the patch only removes the check for non-empty fifo before
loading data from new request into fifo since the check is not correct:

	-in double buffer case, fifo may accommodate more than one packet,
	even though it has contained one packet already and is non-empty

	-since last DMA is completed before calling musb_g_tx, it is sure
	that fifo may accommodate at least one packet

Without applying the patch, new requst enqueued from .complte may not
have a chance to be loaded into fifo, then will never be completed and
cause infinite hangs.

With the patch, on my beagle B5, test#6(queued bulk in) can be passed and
test result may go beyond 33Mbyte/s if musb is configured as g_zero and
fifo mode 3 is taken, follows the test command:

	#testusb -D DEV_NAME -c 1024 -t 6 -s 32768 -g 8   [1]

[1],
    -source of testusb : tools/usb/testusb.c under linux kernel;

Signed-off-by: Ming Lei <tom.leiming@gmail.com>
Acked-by: Anand Gadiyar <gadiyar@ti.com>
Cc: David Brownell <dbrownell@users.sourceforge.net>
Cc: Anand Gadiyar <gadiyar@ti.com>
Cc: Mike Frysinger <vapier@gentoo.org>
Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-09-24 11:05:00 -07:00
..
blackfin.c MUSB: Blackfin: remove musb_platform_{suspend|resume}() 2010-05-20 13:21:35 -07:00
blackfin.h USB: musb: workaround Blackfin FIFO anomalies 2009-12-23 11:34:19 -08:00
cppi_dma.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
cppi_dma.h
davinci.c usb: musb: Set transceiver interface type 2010-05-20 13:21:32 -07:00
davinci.h
Kconfig USB: MUSB: Build MUSB driver for OMAP4 2010-05-20 13:21:32 -07:00
Makefile usb: musb: Makefile: remove unexistent config option 2010-05-20 13:21:36 -07:00
musb_core.c USB: musb: fix compilation warning in host only mode 2010-08-10 14:35:38 -07:00
musb_core.h USB: MUSB: make non-OMAP platforms build with CONFIG_PM=y 2010-06-30 08:16:07 -07:00
musb_debug.h usb: musb: add debugfs support 2010-05-20 13:21:32 -07:00
musb_debugfs.c usb: musb_debugfs: don't use the struct file private_data field with seq_files 2010-09-20 16:04:56 -07:00
musb_dma.h
musb_gadget_ep0.c USB: musb: forward debug mode feature to gadget 2010-08-10 14:35:39 -07:00
musb_gadget.c usb: musb: gadget: fix bulk IN infinit hangs in double buffer case 2010-09-24 11:05:00 -07:00
musb_gadget.h USB: musb_gadget_ep0: stop abusing musb_gadget_set_halt() 2009-12-11 11:55:25 -08:00
musb_host.c musb: potential use after free 2010-04-30 09:25:08 -07:00
musb_host.h
musb_io.h
musb_regs.h usb: musb: add ulpi access operations 2010-05-20 13:21:36 -07:00
musb_virthub.c USB: convert usb_hcd bitfields into atomic flags 2010-08-10 14:35:37 -07:00
musbhsdma.c USB: musb: do not override DMA mode in channel program 2010-08-10 14:35:39 -07:00
musbhsdma.h usb: musb: hsdma: use musb_read/writel 2010-05-20 13:21:32 -07:00
omap2430.c USB: musb: Kill board specific pinmux from driver file 2010-08-10 14:35:39 -07:00
omap2430.h USB: musb: get rid of omap_readl/writel 2010-03-02 14:54:38 -08:00
tusb6010_omap.c usb: Fix tusb6010 for DMA API 2010-04-30 09:25:09 -07:00
tusb6010.c USB: musb: tusb6010: fix compile error with n8x0_defconfig 2010-07-26 12:00:59 -07:00
tusb6010.h