All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 06/12] Nested Virtualization: trap
@ 2010-12-20 16:06 Christoph Egger
  0 siblings, 0 replies; 4+ messages in thread
From: Christoph Egger @ 2010-12-20 16:06 UTC (permalink / raw)
  To: xen-devel

[-- Attachment #1: Type: text/plain, Size: 264 bytes --]


-- 
---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

[-- Attachment #2: xen_nh06_trap.diff --]
[-- Type: text/x-diff, Size: 2246 bytes --]

# HG changeset patch
# User cegger
# Date 1292839436 -3600
When injecting an exception into L2 guest,
inject a #VMEXIT if L1 guest intercepts the exception

Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>

diff -r 6e4fc6e272a7 -r 2ec7ded683f7 xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -1087,6 +1087,47 @@ void hvm_triple_fault(void)
     domain_shutdown(v->domain, SHUTDOWN_reboot);
 }
 
+void hvm_inject_exception(unsigned int trapnr, int errcode, unsigned long cr2)
+{
+    struct vcpu *v = current;
+
+    if ( !nestedhvm_enabled(v->domain) ) {
+        hvm_funcs.inject_exception(trapnr, errcode, cr2);
+        return;
+    }
+
+    if ( nestedhvm_vmswitch_in_progress(v) ) {
+        hvm_funcs.inject_exception(trapnr, errcode, cr2);
+        return;
+    }
+
+    if ( !nestedhvm_vcpu_in_guestmode(v) ) {
+        hvm_funcs.inject_exception(trapnr, errcode, cr2);
+        return;
+    }
+
+    if ( nhvm_vmcx_guest_intercepts_trap(v, trapnr) )
+    {
+        enum nestedhvm_vmexits nsret;
+
+        nsret = nhvm_vcpu_vmexit_trap(v, trapnr, errcode, cr2);
+
+        switch (nsret) {
+        case NESTEDHVM_VMEXIT_DONE:
+        case NESTEDHVM_VMEXIT_ERROR: /* L1 guest will crash L2 guest */
+            return;
+        case NESTEDHVM_VMEXIT_HOST:
+        case NESTEDHVM_VMEXIT_CONTINUE:
+        case NESTEDHVM_VMEXIT_FATALERROR:
+        default:
+            gdprintk(XENLOG_ERR, "unexpected nestedhvm error %i\n", nsret);
+            return;
+        }
+    }
+
+    hvm_funcs.inject_exception(trapnr, errcode, cr2);
+}
+
 bool_t hvm_hap_nested_page_fault(unsigned long gfn)
 {
     p2m_type_t p2mt;
diff -r 6e4fc6e272a7 -r 2ec7ded683f7 xen/include/asm-x86/hvm/hvm.h
--- a/xen/include/asm-x86/hvm/hvm.h
+++ b/xen/include/asm-x86/hvm/hvm.h
@@ -278,11 +278,7 @@ void hvm_migrate_timers(struct vcpu *v);
 void hvm_do_resume(struct vcpu *v);
 void hvm_migrate_pirqs(struct vcpu *v);
 
-static inline void
-hvm_inject_exception(unsigned int trapnr, int errcode, unsigned long cr2)
-{
-    hvm_funcs.inject_exception(trapnr, errcode, cr2);
-}
+void hvm_inject_exception(unsigned int trapnr, int errcode, unsigned long cr2);
 
 static inline int hvm_event_pending(struct vcpu *v)
 {

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: [PATCH 06/12] Nested Virtualization: trap
  2011-03-09 14:24 Christoph Egger
  2011-03-29  6:45 ` Dong, Eddie
@ 2011-03-29  6:49 ` Dong, Eddie
  1 sibling, 0 replies; 4+ messages in thread
From: Dong, Eddie @ 2011-03-29  6:49 UTC (permalink / raw)
  To: Christoph Egger, xen-devel; +Cc: Dong, Eddie

Acked by eddie.dong@intel.com

-----Original Message-----
From: xen-devel-bounces@lists.xensource.com [mailto:xen-devel-bounces@lists.xensource.com] On Behalf Of Christoph Egger
Sent: Wednesday, March 09, 2011 10:24 PM
To: xen-devel@lists.xensource.com
Subject: [Xen-devel] [PATCH 06/12] Nested Virtualization: trap


--
---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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: [PATCH 06/12] Nested Virtualization: trap
  2011-03-09 14:24 Christoph Egger
@ 2011-03-29  6:45 ` Dong, Eddie
  2011-03-29  6:49 ` Dong, Eddie
  1 sibling, 0 replies; 4+ messages in thread
From: Dong, Eddie @ 2011-03-29  6:45 UTC (permalink / raw)
  To: Christoph Egger, xen-devel; +Cc: Dong, Eddie

Acked by eddie.dong@intel.com

-----Original Message-----
From: xen-devel-bounces@lists.xensource.com [mailto:xen-devel-bounces@lists.xensource.com] On Behalf Of Christoph Egger
Sent: Wednesday, March 09, 2011 10:24 PM
To: xen-devel@lists.xensource.com
Subject: [Xen-devel] [PATCH 06/12] Nested Virtualization: trap


--
---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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 06/12] Nested Virtualization: trap
@ 2011-03-09 14:24 Christoph Egger
  2011-03-29  6:45 ` Dong, Eddie
  2011-03-29  6:49 ` Dong, Eddie
  0 siblings, 2 replies; 4+ messages in thread
From: Christoph Egger @ 2011-03-09 14:24 UTC (permalink / raw)
  To: xen-devel

[-- Attachment #1: Type: text/plain, Size: 264 bytes --]


-- 
---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

[-- Attachment #2: xen_nh06_trap.diff --]
[-- Type: text/x-diff, Size: 2326 bytes --]

# HG changeset patch
# User cegger
# Date 1298892112 -3600
When injecting an exception into L2 guest,
inject a #VMEXIT if L1 guest intercepts the exception

Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>

diff -r 71c7d02392aa -r 9707e7a215bd xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -1101,6 +1101,47 @@ void hvm_triple_fault(void)
     domain_shutdown(v->domain, SHUTDOWN_reboot);
 }
 
+void hvm_inject_exception(unsigned int trapnr, int errcode, unsigned long cr2)
+{
+    struct vcpu *v = current;
+
+    if ( !nestedhvm_enabled(v->domain) ) {
+        hvm_funcs.inject_exception(trapnr, errcode, cr2);
+        return;
+    }
+
+    if ( nestedhvm_vmswitch_in_progress(v) ) {
+        hvm_funcs.inject_exception(trapnr, errcode, cr2);
+        return;
+    }
+
+    if ( !nestedhvm_vcpu_in_guestmode(v) ) {
+        hvm_funcs.inject_exception(trapnr, errcode, cr2);
+        return;
+    }
+
+    if ( nhvm_vmcx_guest_intercepts_trap(v, trapnr) )
+    {
+        enum nestedhvm_vmexits nsret;
+
+        nsret = nhvm_vcpu_vmexit_trap(v, trapnr, errcode, cr2);
+
+        switch (nsret) {
+        case NESTEDHVM_VMEXIT_DONE:
+        case NESTEDHVM_VMEXIT_ERROR: /* L1 guest will crash L2 guest */
+            return;
+        case NESTEDHVM_VMEXIT_HOST:
+        case NESTEDHVM_VMEXIT_CONTINUE:
+        case NESTEDHVM_VMEXIT_FATALERROR:
+        default:
+            gdprintk(XENLOG_ERR, "unexpected nestedhvm error %i\n", nsret);
+            return;
+        }
+    }
+
+    hvm_funcs.inject_exception(trapnr, errcode, cr2);
+}
+
 bool_t hvm_hap_nested_page_fault(unsigned long gpa,
                                  bool_t gla_valid,
                                  unsigned long gla,
diff -r 71c7d02392aa -r 9707e7a215bd xen/include/asm-x86/hvm/hvm.h
--- a/xen/include/asm-x86/hvm/hvm.h
+++ b/xen/include/asm-x86/hvm/hvm.h
@@ -278,11 +278,7 @@ void hvm_migrate_timers(struct vcpu *v);
 void hvm_do_resume(struct vcpu *v);
 void hvm_migrate_pirqs(struct vcpu *v);
 
-static inline void
-hvm_inject_exception(unsigned int trapnr, int errcode, unsigned long cr2)
-{
-    hvm_funcs.inject_exception(trapnr, errcode, cr2);
-}
+void hvm_inject_exception(unsigned int trapnr, int errcode, unsigned long cr2);
 
 static inline int hvm_event_pending(struct vcpu *v)
 {

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-03-29  6:49 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-20 16:06 [PATCH 06/12] Nested Virtualization: trap Christoph Egger
2011-03-09 14:24 Christoph Egger
2011-03-29  6:45 ` Dong, Eddie
2011-03-29  6:49 ` Dong, Eddie

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.