From 898336cb7c26aecd6d9e6b3034e950e82bea1735 Mon Sep 17 00:00:00 2001 From: Richard Lowe Date: Sun, 11 Sep 2011 12:24:08 +0100 Subject: [PATCH 1/3] kvm-xxx.d: Add missing format, align columns --- tools/kvm-xxx.d | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/kvm-xxx.d b/tools/kvm-xxx.d index 4f155b2..af7f66a 100644 --- a/tools/kvm-xxx.d +++ b/tools/kvm-xxx.d @@ -10,5 +10,5 @@ kvm-xxx tick-10sec { printf("%-12s %-40s %-8s %8s\n", "FILE", "FUNCTION", "LINE", "COUNT"); - printa("%20s %8d %@8d\n", @); + printa("%-12s %-40s %-8d %@8d\n", @); } From f1fb7eab833ab2da83cdba0e28a70bf5121da4c7 Mon Sep 17 00:00:00 2001 From: Richard Lowe Date: Sun, 11 Sep 2011 11:11:49 +0000 Subject: [PATCH 2/3] kvm_mmu_get_page: Walk the hash list safely As we've seen zapping pages may free them, leaving us fetching junk in list_next. kvm_mmu_get_page may zap pages indirectly via kvm_sync_page, so we must walk safely. --- kvm_mmu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kvm_mmu.c b/kvm_mmu.c index 35995e5..65271a9 100644 --- a/kvm_mmu.c +++ b/kvm_mmu.c @@ -1176,7 +1176,7 @@ kvm_mmu_get_page(struct kvm_vcpu *vcpu, gfn_t gfn, gva_t gaddr, unsigned level, unsigned index; unsigned quadrant; list_t *bucket; - struct kvm_mmu_page *sp; + struct kvm_mmu_page *sp, *nsp = NULL; struct hlist_node *node, *tmp; role = vcpu->arch.mmu.base_role; @@ -1193,8 +1193,8 @@ kvm_mmu_get_page(struct kvm_vcpu *vcpu, gfn_t gfn, gva_t gaddr, unsigned level, index = kvm_page_table_hashfn(gfn); bucket = &vcpu->kvm->arch.mmu_page_hash[index]; - for (sp = list_head(bucket); sp != NULL; - sp = list_next(bucket, sp)) { + for (sp = list_head(bucket); sp != NULL; sp = nsp) { + nsp = list_next(bucket, sp); if (sp->gfn == gfn) { if (sp->unsync) if (kvm_sync_page(vcpu, sp)) From 0fc5cf76730b1935bc5d0799896b7adbf02f02d9 Mon Sep 17 00:00:00 2001 From: Richard Lowe Date: Sun, 11 Sep 2011 11:12:33 +0000 Subject: [PATCH 3/3] kvm_emulate: Emulate invlpg in emulate_invlpg This was XXX'd, though all the code was there. --- kvm_emulate.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/kvm_emulate.c b/kvm_emulate.c index ebda543..627b478 100644 --- a/kvm_emulate.c +++ b/kvm_emulate.c @@ -1874,11 +1874,7 @@ emulator_io_permited(struct x86_emulate_ctxt *ctxt, int emulate_invlpg(struct kvm_vcpu *vcpu, gva_t address) { -#ifdef XXX kvm_mmu_invlpg(vcpu, address); -#else - XXX_KVM_PROBE; -#endif return (X86EMUL_CONTINUE); }