# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 933d0d70378f9a71fbb3db5361d9064786c6977a
# Parent 0820df08a996d332d2edab73fb0524346772ee0f
Fix SVM PAE support.
Signed-off-by: Tom Woller <thomas.woller@xxxxxxx>
diff -r 0820df08a996 -r 933d0d70378f xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c Tue Feb 28 09:13:26 2006
+++ b/xen/arch/x86/hvm/svm/svm.c Tue Feb 28 09:14:10 2006
@@ -982,17 +982,23 @@
!vlapic_global_enabled((VLAPIC(v))) )
clear_bit(X86_FEATURE_APIC, &edx);
-#ifdef __x86_64__
+#if CONFIG_PAGING_LEVELS < 3
+ clear_bit(X86_FEATURE_PAE, &edx);
+ clear_bit(X86_FEATURE_PSE, &edx);
+ clear_bit(X86_FEATURE_PSE36, &edx);
+#else
if ( v->domain->arch.ops->guest_paging_levels == PAGING_L2 )
-#endif
{
+ if ( !v->domain->arch.hvm_domain.pae_enabled )
+ clear_bit(X86_FEATURE_PAE, &edx);
clear_bit(X86_FEATURE_PSE, &edx);
- clear_bit(X86_FEATURE_PAE, &edx);
clear_bit(X86_FEATURE_PSE36, &edx);
}
+#endif
/* Clear out reserved bits. */
ecx &= ~SVM_VCPU_CPUID_L1_RESERVED; /* mask off reserved bits */
+ clear_bit(X86_FEATURE_MWAIT & 31, &ecx);
}
#ifdef __i386__
else if ( input == 0x80000001 )
@@ -1462,7 +1468,7 @@
#endif
/* Now arch.guest_table points to machine physical. */
- v->arch.guest_table = mk_pagetable(mfn << PAGE_SHIFT);
+ v->arch.guest_table = mk_pagetable((u64)mfn << PAGE_SHIFT);
update_pagetables(v);
HVM_DBG_LOG(DBG_LEVEL_VMMU, "New arch.guest_table = %lx",
@@ -1601,7 +1607,7 @@
}
old_base_mfn = pagetable_get_pfn(v->arch.guest_table);
- v->arch.guest_table = mk_pagetable(mfn << PAGE_SHIFT);
+ v->arch.guest_table = mk_pagetable((u64)mfn << PAGE_SHIFT);
if (old_base_mfn)
put_page(mfn_to_page(old_base_mfn));
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|