• Anton Vorontsov's avatar
    USB: fsl_qe_udc: Report disconnect before unbinding · 9ac36da3
    Anton Vorontsov authored
    Gadgets disable endpoints in their disconnect callbacks, so
    we must call disconnect before unbinding. This also fixes
    muram memory leak, since we free muram in the qe_ep_disable().
    
    But mainly the patch fixes following badness:
    
    root@b1:~# insmod fsl_qe_udc.ko
    fsl_qe_udc: Freescale QE/CPM USB Device Controller driver, 1.0
    fsl_qe_udc e01006c0.usb: QE USB controller initialized as device
    root@b1:~# insmod g_ether.ko
    g_ether gadget: using random self ethernet address
    g_ether gadget: using random host ethernet address
    usb0: MAC be:2d:3c:fa:be:f0
    usb0: HOST MAC 62:b8:6a:df:38:66
    g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
    g_ether gadget: g_ether ready
    fsl_qe_udc e01006c0.usb: fsl_qe_udc bind to driver g_ether
    g_ether gadget: high speed config #1: CDC Ethernet (ECM)
    root@b1:~# rmmod g_ether.ko
    ------------[ cut here ]------------
    Badness at drivers/usb/gadget/composite.c:871
    [...]
    NIP [d10c1374] composite_unbind+0x24/0x15c [g_ether]
    LR [d10a82f4] usb_gadget_unregister_driver+0x128/0x168 [fsl_qe_udc]
    Call Trace:
    [cfb93e80] [cfb1f3a0] 0xcfb1f3a0 (unreliable)
    [cfb93eb0] [d10a82f4] usb_gadget_unregister_driver+0x128/0x168 [fsl_qe_udc]
    [cfb93ed0] [d10c2a3c] usb_composite_unregister+0x3c/0x4c [g_ether]
    [cfb93ee0] [c006bde0] sys_delete_module+0x130/0x19c
    [cfb93f40] [c00142d8] ret_from_syscall+0x0/0x38
    [...]
    fsl_qe_udc e01006c0.usb: unregistered gadget driver 'g_ether'
    Signed-off-by: default avatarAnton Vorontsov <avorontsov@ru.mvista.com>
    Acked-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    9ac36da3
fsl_qe_udc.c 64.5 KB