• Paul Mundt's avatar
    usb: r8a66597-hcd: Fix up spinlock recursion in root hub polling. · 2c940db2
    Paul Mundt authored
    The current root hub polling code exhibits a spinlock recursion on the
    private controller lock. r8a66597_root_hub_control() is called from
    r8a66597_timer() which grabs the lock and disables IRQs. The following
    chain emerges:
    
      r8a66597_timer() <-- lock taken
        r8a66597_root_hub_control()
          r8a66597_check_syssts()
            usb_hcd_poll_rh_status() <-- acquires the same lock
    	/* insert death here */
    
    The entire chain requires IRQs to be disabled, so we just unlock and
    relock around the call to usb_hcd_poll_rh_status() while leaving the
    IRQ state unchanged.
    Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
    Acked-by: default avatarYoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
    2c940db2
r8a66597-hcd.c 63.1 KB