# The MUSB IRQ schedules work on every interrupt. # This is unnecessary, and causes excessive CPU load. # # Here we only schedule work if there is something for # the worker to do. Index: git/drivers/usb/musb/musb_core.c =================================================================== --- git.orig/drivers/usb/musb/musb_core.c +++ git/drivers/usb/musb/musb_core.c @@ -925,7 +925,9 @@ b_host: } #endif - schedule_work(&musb->irq_work); + if (musb->xceiv->state != musb->xceiv_old_state) { + schedule_work(&musb->irq_work); + } return handled; }