Re: [PATCH 1/2] USB: musb-gadget: fix bulk IN infinite hangs in double buffer case

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

 



2010/8/27 Gadiyar, Anand <gadiyar@xxxxxx>:
> tom.leiming@xxxxxxxxx wrote:
>> From: Ming Lei <tom.leiming@xxxxxxxxx>
>>
>> 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@xxxxxxxxx>
>> Cc: Anand Gadiyar <gadiyar@xxxxxx>
>> Cc: Mike Frysinger <vapier@xxxxxxxxxx>
>> Cc: Sergei Shtylyov <sshtylyov@xxxxxxxxxxxxx>
>>
>
> For OMAPs,
> Acked-by: Anand Gadiyar <gadiyar@xxxxxx>
>
> I sent out this patch a while ago [1]. I've tested it on
> OMAP3 and OMAP4 silicon.

Oh, I did not see your patch before,  you have seen the issue
for long time,  why not merge into mainline?

>
> It does look like a logic bug to me, but I'd like the Blackfin
> and Davinci guys to take a look at the code as well.
>
> - Anand
>
> [1] <http://marc.info/?l=linux-usb&m=127055442703499&w=2>
>
>> ---
>>  drivers/usb/musb/musb_gadget.c |   12 ------------
>>  1 files changed, 0 insertions(+), 12 deletions(-)
>>
>> diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
>> index 550b397..e0bd1c1 100644
>> --- a/drivers/usb/musb/musb_gadget.c
>> +++ b/drivers/usb/musb/musb_gadget.c
>> @@ -506,18 +506,6 @@ void musb_g_tx(struct musb *musb, u8 epnum)
>>                       /* ... or if not, then complete it. */
>>                       musb_g_giveback(musb_ep, request, 0);
>>
>> -                     /*
>> -                      * Kickstart next transfer if appropriate;
>> -                      * the packet that just completed might not
>> -                      * be transmitted for hours or days.
>> -                      * REVISIT for double buffering...
>> -                      * FIXME revisit for stalls too...
>> -                      */
>> -                     musb_ep_select(mbase, epnum);
>> -                     csr = musb_readw(epio, MUSB_TXCSR);
>> -                     if (csr & MUSB_TXCSR_FIFONOTEMPTY)
>> -                             return;
>> -
>>                       request = musb_ep->desc ? next_request(musb_ep) : NULL;
>>                       if (!request) {
>>                               DBG(4, "%s idle now\n",
>> --
>> 1.6.2.5
>>
>>



-- 
Lei Ming
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux