On Wed, Jan 31, 2018 at 12:21 PM, David Woodhouse <dwmw2@xxxxxxxxxxxxx> wrote: > Reading and writing this MSR is expensive. And if it's yielded to the > guest in the MSR bitmap, that means we have to save its value on vmexit > and set it back to zero. Agreed. But my point is that if it's not yielded to the guest in the MSR bitmap, then we don't have to save its value on VM-exit and set it back to zero. The vmcs02 MSR bitmap is reconstructed on every L1->L2 transition. Sometimes, it will yield the MSR and sometimes it won't. > Some of the gymnastics here are explicitly done to avoid having to do > that save-and-zero step unless the guest has *actually* touched the > MSR. Not just if we are *willing* to let it do so. > > That's the whole point in the yield-after-first-write dance. Sorry; bad choice of words on my part. All that L0 knows of L1's "willingness" to pass the MSR through to L2 comes from the vmcs12 MSR permission bitmap. If L1 also adopts a "clear the WRMSR intercept on first write" strategy, then as far as L0 can tell, L1 is "unwilling" to pass the MSR through until L2 has written it.