Marcelo Tosatti wrote:
Ryan,
On Fri, May 29, 2009 at 11:43:26AM -0500, Ryan Harper wrote:
Testing latest qemu-kvm.git and kvm-kmod.git, ept enabled and backing
guests with large pages trips a BUG in the mmu code. If I disable ept,
but still use large pages, migration succeeds. Reproduce with:
hugetlbfs setup:
% mkdir -p /hugetlbfs && mount -t hugetlbfs hugetlbfs /hugetlbfs
% echo 10000 > /proc/sys/vm/nr_hugepages
qemu commands:
guest a:
sudo x86_64-softmmu/qemu-system-x86_64 -L pc-bios -m 2048 -mempath /hugetlbfs -net nic -net tap -vnc :12 -monitor stdio -hda /scratch/images/rharper/rhel4u8-32-ide.raw
guest b:
sudo x86_64-softmmu/qemu-system-x86_64 -L pc-bios -m 2048 -mempath /hugetlbfs -net nic -net tap -vnc :13 -monitor stdio -hda /scratch/images/rharper/rhel4u8-32-ide.raw -incoming tcp:0:4444
Once the guest a is up, issued migrate command:
(qemu) migrate -d tcp:localhost:444
rmap_remove: ffff880a08e00098 c0336e65c0336e5b 0->BUG
^^^^^^^^^^^^^^^^
This value looks very strange (bits 5:3 contain invalid value, for one).
Don't have access to HW at the very moment, so it would be great if you
had time to do a change equivalent to this and reproduce:
That spte is totally bogus.
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 809cce0..ceb70b0 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -1759,7 +1764,7 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *shadow_pte,
child = page_header(pte & PT64_BASE_ADDR_MASK);
mmu_page_remove_parent_pte(child, shadow_pte);
} else if (pfn != spte_to_pfn(*shadow_pte)) {
- pgprintk("hfn old %lx new %lx\n",
+ printk(KERN_ERR "hfn old %lx new %lx\n",
spte_to_pfn(*shadow_pte), pfn);
rmap_remove(vcpu->kvm, shadow_pte);
} else
Avi, any hints?
Not really. One thing, migration should transition the shadow
pagetables from large pages to small ones, maybe that bit is broken.
Maybe we're looking at a largepage spte and interpreting it as a normal
L2 spte, and interpreting a guest page as the L1 spt.
--
error compiling committee.c: too many arguments to function
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html