Re: Infinite IRQ injection loop in QEMU

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Oct 22, 2014 at 08:01:31PM +0200, Paolo Bonzini wrote:
> 
> 
> On 10/22/2014 05:33 PM, John Snow wrote:
> > 
> > I've been working on improving the AHCI device emulation for QEMU but
> > have recently run into an issue where Windows 8 guests -- upon trying to
> > resume from hibernation -- manage to trigger an infinite IRQ injection
> > loop where it seems that the IRQ never quite properly gets cleared.
> > 
> > I am still working on troubleshooting it further, but I wanted to see if
> > anyone had advice or experience with this type of issue.
> > 
> > In a nutshell:
> > - Windows 8 boots up inside of QEMU/KVM
> > - Windows 8 is suspended to disk either via "shut down" or explicit
> > hibernate. QEMU exits.
> > - Windows 8 is resumed
> > - Windows 8 resets the AHCI device and begins re-initializing it
> > - Once the active AHCI port is reset, it issues an interrupt to indicate
> > it has a pending message (set of register values) ready for the host to
> > synchronize state with the HBA. This interrupt appears to be legacy PCI
> > and not MSI.
> > - This triggers an infinite injection loop.
> 
> This usually means that the interrupt was not properly cleared in the
> AHCI controller.  Since legacy PCI interrupts are shared, it probably
> means that the guest was not expecting the AHCI interrupt and is just
> not asking the driver to handle it.  Perhaps the BIOS is leaving the
> driver with INTX enabled, or something like that?

John: you could investigate that by looking at writes the PCI Command
register in Configuration Space for the ICH9 AHCI device.

Stefan

Attachment: pgpvhuWRkdUsQ.pgp
Description: PGP signature


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux