Skip to content
  • Ming Lei's avatar
    eeb1b2a4
    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
    usb: musb: gadget: fix bulk IN infinit hangs in double buffer case
    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>
Loading