On 08/25/2014 03:17 PM, Zhang Haoyu wrote: >>> Hi, all >>> >> >>> >> I use a qemu-1.4.1/qemu-2.0.0 to run win7 guest, and encounter e1000 NIC >>> >> interrupt storm, >>> >> because "if (!ent->fields.mask && (ioapic->irr & (1 << i)))" is always >>> >> true in __kvm_ioapic_update_eoi(). >>> >> >>> >> Any ideas? >> > >> >We meet this several times: search the autoneg patches for an example of >> >workaround for this in qemu, and patch kvm: ioapic: conditionally delay >> >irq delivery during eoi broadcast for an workaround in kvm (rejected). >> > > Thanks, Jason, > I searched "e1000 autoneg" in gmane.comp.emulators.qemu, and found below > patches, > http://thread.gmane.org/gmane.comp.emulators.qemu/143001/focus=143007 > http://thread.gmane.org/gmane.comp.emulators.qemu/284105/focus=284765 > http://thread.gmane.org/gmane.comp.emulators.qemu/186159/focus=187351 > which one tries to fix this problem, or all of them? > >> >That was probably caused by something wrong in e1000 emulation which >> >causes interrupt to be injected into windows guest before its interrupt >> >handler is registered. And Windows guest does not have a mechanism to >> >detect and disable irq in such condition. >> > > Sorry, I don't understand, > I think one interrupt should not been enabled before its handler is > successfully registered, > is it possible that e1000 emulation inject the interrupt before the interrupt > is succesfully enabled?
There's no way for qemu to know whether or not the irq handler was registered in guest. So if qemu behaves differently with a physical card, it may lead the interrupt to be injected into guest too early. You can search redhat bugzilla for lots of related bugs, some even with in-depth analysis. Thanks > > Thanks, > Zhang Haoyu >