On 13.12.2010, at 20:03, Scott Wood wrote: > On Mon, 13 Dec 2010 10:45:30 +0200 > Avi Kivity <avi@xxxxxxxxxx> wrote: > >> On 12/13/2010 10:42 AM, Alexander Graf wrote: >>> Yeah, let me rephrase my exact memory on this: >>> >>> If the HV just rewrites instructions in the guest, it behaves different from real hw which is bad. It could potentially break checksumming inside the guest. >>> >>> If, however, the guest sends a hypercall to the HV saying "please patch me" or there's a flag on creation time to enable patching, I have a hard time finding a reason to do it inside the guest context. >>> >>> Back when I implemented this, we did however have discussions on exactly that distinction between patching in host or guest space and for some reason I remember that you and Hollis figured that guest patching is superior. I just really can't remember why and couldn't find traces of this in my inbox either :). >> >> The interface is a lot simpler. The guest decides what to patch and >> where to jump. A "please patch me" flag needs a ton of documentation on >> what patch means and what the constraints on the guest environment are. >> > > The constraints need to be documented, but I think "a ton" is a bit of > an exaggeration -- and having the guest do the patching itself means > that the structure of the shared page must become stable ABI. Having > the hypervisor do the bulk of the work also makes it easier to add > paravirt to new OSes (in the embedded world, often the reason someone > wants to do virtualization is to run some custom OS alongside Linux). > > OTOH, having the guest do it makes it easier to do more complex > rewriting such as mtmsr[1]. And the fact that we've already got an > implementation makes for a compelling tie-breaker. > > -Scott > > [1] Speaking of which, what happens when an interrupt is raised in the > middle of a paravirt critical section? KVM will hold off the > interrupt delivery if it sees the critical flag set, but when will it > deliver the postponed interrupt? Seems like it will wait until the next > time an exit happens for some other reason. mtmsr with IF=1 checks for pending interrupts and enables them with a real mtmsr then which again checks interrupts in vm entry, so it immediately gets injected :). Alex -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html