Gregory Haskins wrote: > Hi Avi, Sorry for the delay. I have been traveling this week. See > inline... > >>>> [do we actually need a virtual destructor?] >>>> >>>> >>> I believe it is the right thing to do, yes. The implementation of the >>> >> irqdevice destructor may be as simple as a kfree(), or could be arbitrarily >> complex (don't forget that we will have multiple models..we already have >> three: userint, kernint, and lapic. There may also be i8259 and >> i8259_cascaded in the future). >> >>> >>> >> Yes, but does it need to be a function pointer? IOW, is the point it is >> called generic code or already irqdevice- specific? >> > > The code can-be/is irqdevice specific, thus the virtual. In some cases, it > will be as simple as a kfree(). In others, (kernint, for instance), it might > need to drop references to the apic/ext devices and do other cleanup (which > reminds me that I should look at this to make sure its done right today) ;) > >
I mean, "called from generic code". e.g. in C++ a destructor need not be virtual unless you're destroying the object via a pointer to the base class. >> I meant, __kvm_vcpu_irq_pending is just reading stuff. >> > > Ah, I see. I am not 100% sure about this, but I think you can make the same > argument here as you can with that "double check locks are broken" article > that you sent out. If I got anything out of that article (it was very > interesting, BTW), its that the locks do more than protect critical sections: > They are an implicit memory barrier also. I am under the impression that we > want that behavior here. I can be convinced otherwise.... > > There's a whole bunch of memory barriers available (smp__rmb() seems to be indicated here, which is a noop on x86 IIRC) > >> I guess it works because no OS is insane enough to page out >> the IDT or GDT, so the only faults we can get are handled by kvm, not >> the guest. >> > > This is my thinking as well. The conditions that cause an injection failure > are probably relatively light-weight w.r.t. the guests execution context. > Like for instance, maybe an NMI comes in during the VMENTRY and causes an > immediate VMEXIT (e.g. the guest never made any forward progress, and > therefore nothing else (e.g. TPR) has changed) > > That, or a shadow pagefault. >> So it seems the correct description is not 'un- ack the interrupt', as we >> have effectively acked it, but actually queue it pending host- only kvm >> processing. >> > > This is exactly what I have done (if I understood what you were saying). > When the injection fails we push the vector to the irq.deferred entry which > takes a higher priority in the queue than the backing irqdevice (since it > believes the vector is already dispatched). > > Okay. Windows can demand page drivers, but probably not the IDT :) We shall have to live with the knowledge that emulation is incorrect wrt taking exceptions while delivering external interrupts to the guest. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel