aboutsummaryrefslogtreecommitdiffstats
path: root/tools/flask/libflask
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-10-19 10:56:58 +0100
committerKeir Fraser <keir.fraser@citrix.com>2009-10-19 10:56:58 +0100
commit89329d832aed85f2324efa018b6f9124a813da80 (patch)
treeb2fc96f263f1bcec4a087a7b630777e4ee7d8fc8 /tools/flask/libflask
parent90abd2437ad7cd010b2ad63e6b4b1a6571c67ab6 (diff)
downloadxen-89329d832aed85f2324efa018b6f9124a813da80.tar.gz
xen-89329d832aed85f2324efa018b6f9124a813da80.tar.bz2
xen-89329d832aed85f2324efa018b6f9124a813da80.zip
x86 shadow: Update cr3 in PAE mode when guest walk succeed but shadow walk fails
When running in PAE mode, Windows 7 (apparently) will occasionally switch cr3 with one of the L3 entries invalid, make it valid, and then expect the hardware to load the new value. (This behavior is explicitly not promised in the hardware manuals.) This leads to a situation where on a shadow fault, the guest walk succeeds but the shadow walk fails. The code assumes this can only happen when the domain is dying, and makes an ASSERT() to that effect. So currently, in debug mode, this will cause the host to crash; in non-debug mode, this will cause a page-fault loop. This patch solves the problem by calling update_cr3() in that path when the guest is in PAE mode, and only ASSERT()ing when the guest is not in PAE mode. The guest will get one spurious page fault, but subsequent accesses will succeed. Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
Diffstat (limited to 'tools/flask/libflask')
0 files changed, 0 insertions, 0 deletions