public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* high cpu load on omap3 using musb
@ 2014-01-29 16:44 Adam Wozniak
  2014-07-21 15:28 ` Laurent Pinchart
  0 siblings, 1 reply; 4+ messages in thread
From: Adam Wozniak @ 2014-01-29 16:44 UTC (permalink / raw)
  To: linux-kernel, linux-arm, linux-usb, Agius, Frank

[-- Attachment #1: Type: text/plain, Size: 1232 bytes --]

With a USB 2.0 webcam attached to the OTG port on an OMAP3 (applies to 
overo gumstix, beagleboard, probably others) we see a high CPU load in a 
kworker thread.

Between 2.6.33 and 2.6.34 musb_core.c changed.

IRQ handlers changed with the result that a worker in musb_core.c got 
scheduled far more frequently than needed.

I've included a patch below against 3.7, but i think it'll apply against 
mainline.
[I apologize for any whitespace mangling.  I've also attached the patch.]

I'd like more eyeballs to tell me if this is right.  I'd also like to 
know who I need to talk to to get this pushed into mainline.

--Adam

# 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;
  }


[-- Attachment #2: musb_smartwork.patch --]
[-- Type: text/x-patch, Size: 560 bytes --]

# 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;
 }

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-07-21 18:52 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-29 16:44 high cpu load on omap3 using musb Adam Wozniak
2014-07-21 15:28 ` Laurent Pinchart
2014-07-21 15:40   ` Felipe Balbi
2014-07-21 18:52     ` Laurent Pinchart

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox