On 11/13/12 16:48, Gabriel L. Somlo wrote: > Gerd, > > On Tue, Nov 13, 2012 at 09:48:10AM +0100, Gerd Hoffmann wrote: >>> below is what I got running the "-usb -device usb-kbd -device usb-mouse" >>> command line with EHCI_DEBUG set to 1. >> >> This isn't what I ment. See docs/tracing.txt for how tracepoint work. >> Wildcards (i.e. 'ehci_*') work on tracepoints. > > Below are the first 100 (of 6516784) ascii lines from the ehci_* trace > file I collected in the cca. 30 seconds it took to get to the point > where it's clear OS X boot is stuck and won't be making any further > progress. > > In case you need it, the full (11M xz-compressed) trace file is at > http://www.contrib.andrew.cmu.edu/~somlo/OSXKVM/ehci_trace.xz
The last lines of the log are more useful, which is more than 6500000 lines like this: usb_ehci_opreg_read 4.767 addr=0x2c str=FRINDEX val=0x0 So macos seems to expect the frame index updating, and probably frame list rollover interrupts too. ehci doesn't do that of there is nothing else to do, to keep the wakeup rate down. Does the attached patch change anything? In case it doesn't: Any change in behavior if you add a usb-storage device? cheers, Gerd
>From 822934d5118c18707a6781e006c35482186f2b12 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann <kra...@redhat.com> Date: Tue, 13 Nov 2012 17:20:05 +0100 Subject: [PATCH] ehci: keep the frame timer running in case the guest asked for frame list rollover interrupts Signed-off-by: Gerd Hoffmann <kra...@redhat.com> --- hw/usb/hcd-ehci.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c index ee6c9ae..20766d8 100644 --- a/hw/usb/hcd-ehci.c +++ b/hw/usb/hcd-ehci.c @@ -2209,6 +2209,10 @@ static void ehci_frame_timer(void *opaque) ehci->async_stepdown = 0; } + if (ehci->usbintr & USBSTS_FLR) { + need_timer++; + } + if (need_timer) { /* If we've raised int, we speed up the timer, so that we quickly * notice any new packets queued up in response */ -- 1.7.1