Nested Virtualization: CRn & paged real mode
PATCH 6/14 Nested Virtualization: CRn & paged real mode
Signature · 6 lines
---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85609 Dornach b. Muenchen Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632
# HG changeset patch
# User cegger
# Date 1280925502 -7200
Allow paged real mode during vmrun emulation. Emulate cr0 and cr4 when guest does not intercept them.
xen/arch/x86/hvm/hvm.c +4 -2
@@ -54,6 +54,7 @@#include <asm/hvm/support.h> #include <asm/hvm/cacheattr.h> #include <asm/hvm/trace.h> +#include <asm/hvm/nestedhvm.h> #include <asm/mtrr.h> #include <asm/apic.h> #include <public/sched.h>
@@ -1105,7 +1106,8 @@ int hvm_set_cr0(unsigned long value)/* ET is reserved and should be always be 1. */ value |=X86_CR0_ET ; -if ( (value & (X86_CR0_PE |X86_CR0_PG )) ==X86_CR0_PG ) +if ( !nestedhvm_vmentry_emulate (v) && + (value & (X86_CR0_PE |X86_CR0_PG )) ==X86_CR0_PG ) goto gpf;if ( (value &X86_CR0_PG ) && !(old_value &X86_CR0_PG ) )
@@ -1159,7 +1161,7 @@ int hvm_set_cr0(unsigned long value) } } -if (has_arch_mmios (v->domain) ) +if ( !nestedhvm_vmentry_emulate (v) &&has_arch_mmios (v->domain) ) {if ( (value &X86_CR0_CD ) && !(value &X86_CR0_NW ) ) {
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel
Quoted 2 lines
Allow paged real mode during vmrun emulation. Emulate cr0 and cr4 when guest does not intercept them.
I understand the paged-real-mode case, but why do you also allow CR0.CD and CR0.NW for nested VMs?
Cheers,
Tim.
Quoted 22 lines
diff -r
917f9eb07fc3-rb1a356e5658dxen/arch/x86/hvm/hvm.cxen/arch/x86/hvm/hvm.c +3
-1@@ -54,6 +54,7 @@#include <asm/hvm/support.h> #include <asm/hvm/cacheattr.h> #include <asm/hvm/trace.h> +#include <asm/hvm/nestedhvm.h> #include <asm/mtrr.h> #include <asm/apic.h> #include <public/sched.h> @@ -1105,7 +1106,8 @@ int hvm_set_cr0(unsigned long value)/* ET is reserved and should be always be 1. */ value |=X86_CR0_ET ; -if ( (value & (X86_CR0_PE |X86_CR0_PG )) ==X86_CR0_PG ) +if ( !nestedhvm_vmentry_emulate (v) && + (value & (X86_CR0_PE |X86_CR0_PG )) ==X86_CR0_PG ) goto gpf;if ( (value &X86_CR0_PG ) && !(old_value &X86_CR0_PG ) )
xen/arch/x86/hvm/hvm.c int hvm_set_cr0(unsigned long value) · line 1167
Quoted 8 lines
xen/arch/x86/hvm/hvm.c +1
-1@@ -1159,7 +1161,7 @@ int hvm_set_cr0(unsigned long value) } } -if (has_arch_mmios (v->domain) ) +if ( !nestedhvm_vmentry_emulate (v) &&has_arch_mmios (v->domain) ) {if ( (value &X86_CR0_CD ) && !(value &X86_CR0_NW ) ) {
Content-Description: ATT00001..txt
Quoted 4 lines
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel
Signature · 3 lines
Tim Deegan <[email protected]> Principal Software Engineer, XenServer Engineering Citrix Systems UK Ltd. (Company #02937203, SL9 0BG)
Quoted 5 lines · On Monday 09 August 2010 14:40:12 Tim Deegan wrote:
Quoted 2 lines
Allow paged real mode during vmrun emulation. Emulate cr0 and cr4 when guest does not intercept them.
I understand the paged-real-mode case, but why do you also allow CR0.CD and CR0.NW for nested VMs?
Oh, I haven't considered about those bits. You are right, they should not be allowed for l2 guests. Thanks for bringing this up. Fixed in my local tree.
Christoph
Quoted 42 lines
Cheers,
Tim.
Quoted 22 lines
diff -r
917f9eb07fc3-rb1a356e5658dxen/arch/x86/hvm/hvm.cxen/arch/x86/hvm/hvm.c +3
-1@@ -54,6 +54,7 @@#include <asm/hvm/support.h> #include <asm/hvm/cacheattr.h> #include <asm/hvm/trace.h> +#include <asm/hvm/nestedhvm.h> #include <asm/mtrr.h> #include <asm/apic.h> #include <public/sched.h> @@ -1105,7 +1106,8 @@ int hvm_set_cr0(unsigned long value)/* ET is reserved and should be always be 1. */ value |=X86_CR0_ET ; -if ( (value & (X86_CR0_PE |X86_CR0_PG )) ==X86_CR0_PG ) +if ( !nestedhvm_vmentry_emulate (v) && + (value & (X86_CR0_PE |X86_CR0_PG )) ==X86_CR0_PG ) goto gpf;if ( (value &X86_CR0_PG ) && !(old_value &X86_CR0_PG ) )xen/arch/x86/hvm/hvm.c int hvm_set_cr0(unsigned long value) · line 1167
Quoted 8 lines
xen/arch/x86/hvm/hvm.c +1
-1@@ -1159,7 +1161,7 @@ int hvm_set_cr0(unsigned long value) } } -if (has_arch_mmios (v->domain) ) +if ( !nestedhvm_vmentry_emulate (v) &&has_arch_mmios (v->domain) ) {if ( (value &X86_CR0_CD ) && !(value &X86_CR0_NW ) ) {Content-Description: ATT00001..txt
Quoted 4 lines
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel
Signature · 6 lines
---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85609 Dornach b. Muenchen Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632