Switching from writeable pagetable to shadow log-dirty at runtime
When we switch from writeable pagetable to shadow log-dirty mode at
runtime, there are some PTEs with write-protected; once we do
ptwr_flush(), we write-protect back the page table. If we simply consult
the guest page tables when building the shadow page tables, then we also
copy the write protection to the shadow pages tables. Since the shadow
code does not have the logic for the writeable page table, the guest
kernel, for exmaple, can see write-protected page table, resulting a
panic. We are experiencing the problem with PAE log-dirty mode (that we
are working on now).
So I think the current state in the writeable page should be flushed and
adjusted (in audit, for example, make the write-protected pages back to
writeable) before we switch to shadow mode. Given the fact that we can
switch writeable pagetable to shadow log-dirty at runtime for the plain
32-bit, I'm wondering where we are doing that kind of thing.