On Thu, Jan 30, 2014 at 12:13:59AM +0100, Alexander Graf wrote: > Can you check whether it configures the ioapic differently?
I poked around hw/i386/kvm/ioapic.c, looking for a few good spots to add printf statements. These should be spots where calls from the guest are handled, not where QEMU itself sets up before starting the guest, as I expect the latter is all the same regardless. kvm_ioapic_set_irq() seemed like a good candidate. When starting (without the kvm kernel-side patch), OS X logs the following, before it hangs: kvm_ioapic_set_irq(opaque=0x7f2480a71d10, irq=19, level=1) kvm_ioapic_set_irq(opaque=0x7f2480a71d10, irq=16, level=1) kvm_ioapic_set_irq(opaque=0x7f2480a71d10, irq=17, level=1) kvm_ioapic_set_irq(opaque=0x7f2480a71d10, irq=18, level=1) kvm_ioapic_set_irq(opaque=0x7f2480a71d10, irq=16, level=1) Fedora (which works fine) looks like this: kvm_ioapic_set_irq(opaque=0x7f42ced4cae0, irq=16, level=0) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=17, level=0) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=18, level=0) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=19, level=0) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=19, level=1) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=16, level=1) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=19, level=0) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=16, level=0) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=19, level=1) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=19, level=0) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=16, level=1) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=16, level=0) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=16, level=1) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=16, level=0) kvm_ioapic_set_irq(opaque=0x7f4c5516eae0, irq=16, level=1) ... (and so on, with irq 16, alternating levels between 0 and 1). With the kernel irqlevel patch, Fedora looks identical. OS X (which now works), looks like this: kvm_ioapic_set_irq(opaque=0x7f6d27baad10, irq=19, level=1) kvm_ioapic_set_irq(opaque=0x7f6d27baad10, irq=19, level=0) kvm_ioapic_set_irq(opaque=0x7f6d27baad10, irq=19, level=1) kvm_ioapic_set_irq(opaque=0x7f6d27baad10, irq=16, level=1) kvm_ioapic_set_irq(opaque=0x7f6d27baad10, irq=19, level=0) kvm_ioapic_set_irq(opaque=0x7f6d27baad10, irq=16, level=0) kvm_ioapic_set_irq(opaque=0x7f6d27baad10, irq=19, level=1) kvm_ioapic_set_irq(opaque=0x7f6d27baad10, irq=19, level=0) kvm_ioapic_set_irq(opaque=0x7f6d27baad10, irq=19, level=1) kvm_ioapic_set_irq(opaque=0x7f6d27baad10, irq=19, level=0) kvm_ioapic_set_irq(opaque=0x7f6d27baad10, irq=16, level=1) kvm_ioapic_set_irq(opaque=0x7f6d27baad10, irq=16, level=0) kvm_ioapic_set_irq(opaque=0x7f6d27baad10, irq=16, level=1) ... (again, alternating levels and irq-16 only from here on out). I'm not sure how useful this is, or what info from which other kvm/ioapic method I could log during guest boot... --G