• Ming Lei's avatar
    usb: musb: gadget: fix bulk IN infinit hangs in double buffer case · eeb1b2a4
    Ming Lei authored
    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: default avatarMing Lei <tom.leiming@gmail.com>
    Acked-by: default avatarAnand 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: default avatarFelipe Balbi <balbi@ti.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    eeb1b2a4
musb_gadget.c 53.2 KB