diff options
author | Xiao Guangrong <xiaoguangrong@cn.fujitsu.com> | 2010-09-27 06:09:29 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2010-10-24 04:53:14 -0400 |
commit | 6903074c367cfb13166c2974d6a886fdc7a00d21 (patch) | |
tree | d1631260765150c42486dd425047604e2e8d130c /arch/x86/kvm/mmu.c | |
parent | 38904e128778c38809daf44a1dabc7f25fa8d83e (diff) |
KVM: MMU: audit: check whether have unsync sps after root sync
After root synced, all unsync sps are synced, this patch add a check to make
sure it's no unsync sps in VCPU's page table
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/x86/kvm/mmu.c')
-rw-r--r-- | arch/x86/kvm/mmu.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index afde64ba118d..ba7e7646fb78 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -53,14 +53,18 @@ enum { | |||
53 | AUDIT_PRE_PAGE_FAULT, | 53 | AUDIT_PRE_PAGE_FAULT, |
54 | AUDIT_POST_PAGE_FAULT, | 54 | AUDIT_POST_PAGE_FAULT, |
55 | AUDIT_PRE_PTE_WRITE, | 55 | AUDIT_PRE_PTE_WRITE, |
56 | AUDIT_POST_PTE_WRITE | 56 | AUDIT_POST_PTE_WRITE, |
57 | AUDIT_PRE_SYNC, | ||
58 | AUDIT_POST_SYNC | ||
57 | }; | 59 | }; |
58 | 60 | ||
59 | char *audit_point_name[] = { | 61 | char *audit_point_name[] = { |
60 | "pre page fault", | 62 | "pre page fault", |
61 | "post page fault", | 63 | "post page fault", |
62 | "pre pte write", | 64 | "pre pte write", |
63 | "post pte write" | 65 | "post pte write", |
66 | "pre sync", | ||
67 | "post sync" | ||
64 | }; | 68 | }; |
65 | 69 | ||
66 | #undef MMU_DEBUG | 70 | #undef MMU_DEBUG |
@@ -2516,6 +2520,8 @@ static void mmu_sync_roots(struct kvm_vcpu *vcpu) | |||
2516 | 2520 | ||
2517 | if (!VALID_PAGE(vcpu->arch.mmu.root_hpa)) | 2521 | if (!VALID_PAGE(vcpu->arch.mmu.root_hpa)) |
2518 | return; | 2522 | return; |
2523 | |||
2524 | trace_kvm_mmu_audit(vcpu, AUDIT_PRE_SYNC); | ||
2519 | if (vcpu->arch.mmu.root_level == PT64_ROOT_LEVEL) { | 2525 | if (vcpu->arch.mmu.root_level == PT64_ROOT_LEVEL) { |
2520 | hpa_t root = vcpu->arch.mmu.root_hpa; | 2526 | hpa_t root = vcpu->arch.mmu.root_hpa; |
2521 | sp = page_header(root); | 2527 | sp = page_header(root); |
@@ -2531,6 +2537,7 @@ static void mmu_sync_roots(struct kvm_vcpu *vcpu) | |||
2531 | mmu_sync_children(vcpu, sp); | 2537 | mmu_sync_children(vcpu, sp); |
2532 | } | 2538 | } |
2533 | } | 2539 | } |
2540 | trace_kvm_mmu_audit(vcpu, AUDIT_POST_SYNC); | ||
2534 | } | 2541 | } |
2535 | 2542 | ||
2536 | void kvm_mmu_sync_roots(struct kvm_vcpu *vcpu) | 2543 | void kvm_mmu_sync_roots(struct kvm_vcpu *vcpu) |