KVM: MMU: lazily drop large spte
authorXiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Thu, 17 Apr 2014 09:06:14 +0000 (17:06 +0800)
committerMarcelo Tosatti <mtosatti@redhat.com>
Wed, 23 Apr 2014 20:49:50 +0000 (17:49 -0300)
commitc126d94f2c90ed9daee24a94f1c67aff7e9bf387
treeec5b3af6af89179ff9565c9f0fd32c7914a779ed
parent92a476cbfc476c63ee982dd33d15a8c88b4d51b9
KVM: MMU: lazily drop large spte

Currently, kvm zaps the large spte if write-protected is needed, the later
read can fault on that spte. Actually, we can make the large spte readonly
instead of making them un-present, the page fault caused by read access can
be avoided

The idea is from Avi:
| As I mentioned before, write-protecting a large spte is a good idea,
| since it moves some work from protect-time to fault-time, so it reduces
| jitter.  This removes the need for the return value.

This version has fixed the issue reported in 6b73a9606, the reason of that
issue is that fast_page_fault() directly sets the readonly large spte to
writable but only dirty the first page into the dirty-bitmap that means
other pages are missed. Fixed it by only the normal sptes (on the
PT_PAGE_TABLE_LEVEL level) can be fast fixed

Reviewed-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/x86/kvm/mmu.c
arch/x86/kvm/x86.c