Patchwork q35, usb-ehci1, and Mac OS X boot problems

login
register
mail settings
Submitter Gerd Hoffmann
Date Nov. 13, 2012, 4:31 p.m.
Message ID <50A275EE.10004@redhat.com>
Download mbox | patch
Permalink /patch/198736/
State New
Headers show

Comments

Gerd Hoffmann - Nov. 13, 2012, 4:31 p.m.
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 <kraxel@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 <kraxel@redhat.com>
---
 hw/usb/hcd-ehci.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)
Gabriel L. Somlo - Nov. 13, 2012, 5:28 p.m.
On Tue, Nov 13, 2012 at 05:31:42PM +0100, Gerd Hoffmann wrote:
> 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?

Sure does -- with the patch, OS X boots and runs just fine !

Thanks !
--Gabriel

Patch

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 */