WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] Per-domain switch to disable oos shadow p

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Per-domain switch to disable oos shadow page tables
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 19 Oct 2009 04:00:24 -0700
Delivery-date: Mon, 19 Oct 2009 04:01:02 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1255946146 -3600
# Node ID f719d9da55a3a927b366c48ed8557a5cdbaf40c2
# Parent  7e02a2cd1618240f64b83a89669f0fcfdc6cac2f
Per-domain switch to disable oos shadow page tables

Signed-off-by: Juergen Gross <juergen.gross@xxxxxxxxxxxxxx>
---
 tools/python/xen/xend/XendConfig.py     |    1 +
 tools/python/xen/xend/XendDomainInfo.py |    6 +++++-
 tools/python/xen/xm/create.py           |    9 ++++++++-
 tools/python/xen/xm/xenapi_create.py    |    1 +
 xen/arch/x86/domain.c                   |    2 +-
 xen/arch/x86/mm/paging.c                |    4 ++--
 xen/arch/x86/mm/shadow/common.c         |    5 +++--
 xen/common/domctl.c                     |    4 +++-
 xen/include/asm-x86/domain.h            |    1 +
 xen/include/asm-x86/paging.h            |    2 +-
 xen/include/asm-x86/shadow.h            |    2 +-
 xen/include/public/domctl.h             |    3 +++
 xen/include/xen/sched.h                 |    3 +++
 13 files changed, 33 insertions(+), 10 deletions(-)

diff -r 7e02a2cd1618 -r f719d9da55a3 tools/python/xen/xend/XendConfig.py
--- a/tools/python/xen/xend/XendConfig.py       Mon Oct 19 10:54:35 2009 +0100
+++ b/tools/python/xen/xend/XendConfig.py       Mon Oct 19 10:55:46 2009 +0100
@@ -178,6 +178,7 @@ XENAPI_PLATFORM_CFG_TYPES = {
     'xen_platform_pci': int,
     "gfx_passthru": int,
     'description': str,
+    'oos' : int,
 }
 
 # Xen API console 'other_config' keys.
diff -r 7e02a2cd1618 -r f719d9da55a3 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Mon Oct 19 10:54:35 2009 +0100
+++ b/tools/python/xen/xend/XendDomainInfo.py   Mon Oct 19 10:55:46 2009 +0100
@@ -2419,7 +2419,11 @@ class XendDomainInfo:
         s3_integrity = 0
         if self.info.has_key('s3_integrity'):
             s3_integrity = self.info['s3_integrity']
-        flags = (int(hvm) << 0) | (int(hap) << 1) | (int(s3_integrity) << 2)
+
+        oos = self.info['platform'].get('oos', 1)
+        oos_off = 1 - oos
+
+        flags = (int(hvm) << 0) | (int(hap) << 1) | (int(s3_integrity) << 2) | 
(int(oos_off) << 3)
 
         try:
             self.domid = xc.domain_create(
diff -r 7e02a2cd1618 -r f719d9da55a3 tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py     Mon Oct 19 10:54:35 2009 +0100
+++ b/tools/python/xen/xm/create.py     Mon Oct 19 10:55:46 2009 +0100
@@ -609,6 +609,11 @@ gopts.var('s3_integrity', val='TBOOT_MEM
           fn=set_int, default=1,
           use="""Should domain memory integrity be verified during S3?
           (0=protection is disabled; 1=protection is enabled.""")
+
+gopts.var('oos', val='OOS',
+          fn=set_int, default=1,
+          use="""Should out-of-sync shadow page tabled be enabled?
+          (0=OOS is disabled; 1=OOS is enabled.""")
 
 gopts.var('cpuid', val="IN[,SIN]:eax=EAX,ebx=EBX,ecx=ECX,edx=EDX",
           fn=append_value, default=[],
@@ -990,7 +995,7 @@ def configure_hvm(config_image, vals):
              'vnc', 'vncdisplay', 'vncunused', 'vncconsole', 'vnclisten',
              'sdl', 'display', 'xauthority', 'rtc_timeoffset', 'monitor',
              'acpi', 'apic', 'usb', 'usbdevice', 'keymap', 'pci', 'hpet',
-             'guest_os_type', 'hap', 'opengl', 'cpuid', 'cpuid_check',
+             'guest_os_type', 'hap', 'oos', 'opengl', 'cpuid', 'cpuid_check',
              'viridian', 'xen_extended_power_mgmt', 'pci_msitranslate',
              'vpt_align', 'pci_power_mgmt', 'xen_platform_pci',
              'gfx_passthru', 'description' ]
@@ -1038,6 +1043,8 @@ def make_config(vals):
         config.append(['backend', ['tpmif']])
     if vals.localtime:
         config.append(['localtime', vals.localtime])
+    if vals.oos:
+        config.append(['oos', vals.oos])
 
     config_image = configure_image(vals)
     if vals.bootloader:
diff -r 7e02a2cd1618 -r f719d9da55a3 tools/python/xen/xm/xenapi_create.py
--- a/tools/python/xen/xm/xenapi_create.py      Mon Oct 19 10:54:35 2009 +0100
+++ b/tools/python/xen/xm/xenapi_create.py      Mon Oct 19 10:55:46 2009 +0100
@@ -1073,6 +1073,7 @@ class sxp2xml:
             'vhpt',
             'guest_os_type',
             'hap',
+            'oos',
             'pci_msitranslate',
             'pci_power_mgmt',
             'xen_platform_pci',
diff -r 7e02a2cd1618 -r f719d9da55a3 xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     Mon Oct 19 10:54:35 2009 +0100
+++ b/xen/arch/x86/domain.c     Mon Oct 19 10:55:46 2009 +0100
@@ -452,7 +452,7 @@ int arch_domain_create(struct domain *d,
 
 #endif /* __x86_64__ */
 
-    if ( (rc = paging_domain_init(d)) != 0 )
+    if ( (rc = paging_domain_init(d, domcr_flags)) != 0 )
         goto fail;
     paging_initialised = 1;
 
diff -r 7e02a2cd1618 -r f719d9da55a3 xen/arch/x86/mm/paging.c
--- a/xen/arch/x86/mm/paging.c  Mon Oct 19 10:54:35 2009 +0100
+++ b/xen/arch/x86/mm/paging.c  Mon Oct 19 10:55:46 2009 +0100
@@ -636,7 +636,7 @@ static void paging_log_dirty_teardown(st
 /*           CODE FOR PAGING SUPPORT            */
 /************************************************/
 /* Domain paging struct initialization. */
-int paging_domain_init(struct domain *d)
+int paging_domain_init(struct domain *d, unsigned int domcr_flags)
 {
     int rc;
 
@@ -646,7 +646,7 @@ int paging_domain_init(struct domain *d)
     /* The order of the *_init calls below is important, as the later
      * ones may rewrite some common fields.  Shadow pagetables are the
      * default... */
-    shadow_domain_init(d);
+    shadow_domain_init(d, domcr_flags);
 
     /* ... but we will use hardware assistance if it's available. */
     if ( hap_enabled(d) )
diff -r 7e02a2cd1618 -r f719d9da55a3 xen/arch/x86/mm/shadow/common.c
--- a/xen/arch/x86/mm/shadow/common.c   Mon Oct 19 10:54:35 2009 +0100
+++ b/xen/arch/x86/mm/shadow/common.c   Mon Oct 19 10:55:46 2009 +0100
@@ -43,7 +43,7 @@ DEFINE_PER_CPU(uint32_t,trace_shadow_pat
 
 /* Set up the shadow-specific parts of a domain struct at start of day.
  * Called for every domain from arch_domain_create() */
-void shadow_domain_init(struct domain *d)
+void shadow_domain_init(struct domain *d, unsigned int domcr_flags)
 {
     int i;
     shadow_lock_init(d);
@@ -58,6 +58,7 @@ void shadow_domain_init(struct domain *d
 
 #if (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC)
     d->arch.paging.shadow.oos_active = 0;
+    d->arch.paging.shadow.oos_off = (domcr_flags & DOMCRF_oos_off) ?  1 : 0;
 #endif
 }
 
@@ -3023,7 +3024,7 @@ static void sh_update_paging_modes(struc
 #if (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC)
     /* We need to check that all the vcpus have paging enabled to
      * unsync PTs. */
-    if ( is_hvm_domain(d) )
+    if ( is_hvm_domain(d) && !d->arch.paging.shadow.oos_off )
     {
         int pe = 1;
         struct vcpu *vptr;
diff -r 7e02a2cd1618 -r f719d9da55a3 xen/common/domctl.c
--- a/xen/common/domctl.c       Mon Oct 19 10:54:35 2009 +0100
+++ b/xen/common/domctl.c       Mon Oct 19 10:55:46 2009 +0100
@@ -393,7 +393,7 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
         if ( supervisor_mode_kernel ||
              (op->u.createdomain.flags &
              ~(XEN_DOMCTL_CDF_hvm_guest | XEN_DOMCTL_CDF_hap |
-               XEN_DOMCTL_CDF_s3_integrity)) )
+               XEN_DOMCTL_CDF_s3_integrity | XEN_DOMCTL_CDF_oos_off)) )
             break;
 
         dom = op->domain;
@@ -427,6 +427,8 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
             domcr_flags |= DOMCRF_hap;
         if ( op->u.createdomain.flags & XEN_DOMCTL_CDF_s3_integrity )
             domcr_flags |= DOMCRF_s3_integrity;
+        if ( op->u.createdomain.flags & XEN_DOMCTL_CDF_oos_off )
+            domcr_flags |= DOMCRF_oos_off;
 
         ret = -ENOMEM;
         d = domain_create(dom, domcr_flags, op->u.createdomain.ssidref);
diff -r 7e02a2cd1618 -r f719d9da55a3 xen/include/asm-x86/domain.h
--- a/xen/include/asm-x86/domain.h      Mon Oct 19 10:54:35 2009 +0100
+++ b/xen/include/asm-x86/domain.h      Mon Oct 19 10:55:46 2009 +0100
@@ -104,6 +104,7 @@ struct shadow_domain {
 
     /* OOS */
     int oos_active;
+    int oos_off;
 };
 
 struct shadow_vcpu {
diff -r 7e02a2cd1618 -r f719d9da55a3 xen/include/asm-x86/paging.h
--- a/xen/include/asm-x86/paging.h      Mon Oct 19 10:54:35 2009 +0100
+++ b/xen/include/asm-x86/paging.h      Mon Oct 19 10:55:46 2009 +0100
@@ -200,7 +200,7 @@ void paging_vcpu_init(struct vcpu *v);
 
 /* Set up the paging-assistance-specific parts of a domain struct at
  * start of day.  Called for every domain from arch_domain_create() */
-int paging_domain_init(struct domain *d);
+int paging_domain_init(struct domain *d, unsigned int domcr_flags);
 
 /* Handler for paging-control ops: operations from user-space to enable
  * and disable ephemeral shadow modes (test mode and log-dirty mode) and
diff -r 7e02a2cd1618 -r f719d9da55a3 xen/include/asm-x86/shadow.h
--- a/xen/include/asm-x86/shadow.h      Mon Oct 19 10:54:35 2009 +0100
+++ b/xen/include/asm-x86/shadow.h      Mon Oct 19 10:55:46 2009 +0100
@@ -53,7 +53,7 @@
 
 /* Set up the shadow-specific parts of a domain struct at start of day.
  * Called from paging_domain_init(). */
-void shadow_domain_init(struct domain *d);
+void shadow_domain_init(struct domain *d, unsigned int domcr_flags);
 
 /* Setup the shadow-specific parts of a vcpu struct. It is called by
  * paging_vcpu_init() in paging.c */
diff -r 7e02a2cd1618 -r f719d9da55a3 xen/include/public/domctl.h
--- a/xen/include/public/domctl.h       Mon Oct 19 10:54:35 2009 +0100
+++ b/xen/include/public/domctl.h       Mon Oct 19 10:55:46 2009 +0100
@@ -60,6 +60,9 @@ struct xen_domctl_createdomain {
 #define _XEN_DOMCTL_CDF_s3_integrity  2
 #define XEN_DOMCTL_CDF_s3_integrity   (1U<<_XEN_DOMCTL_CDF_s3_integrity)
     uint32_t flags;
+ /* Disable out-of-sync shadow page tables? */
+#define _XEN_DOMCTL_CDF_oos_off       3
+#define XEN_DOMCTL_CDF_oos_off        (1U<<_XEN_DOMCTL_CDF_oos_off)
 };
 typedef struct xen_domctl_createdomain xen_domctl_createdomain_t;
 DEFINE_XEN_GUEST_HANDLE(xen_domctl_createdomain_t);
diff -r 7e02a2cd1618 -r f719d9da55a3 xen/include/xen/sched.h
--- a/xen/include/xen/sched.h   Mon Oct 19 10:54:35 2009 +0100
+++ b/xen/include/xen/sched.h   Mon Oct 19 10:55:46 2009 +0100
@@ -364,6 +364,9 @@ struct domain *domain_create(
  /* DOMCRF_dummy: Create a dummy domain (not scheduled; not on domain list) */
 #define _DOMCRF_dummy         3
 #define DOMCRF_dummy          (1U<<_DOMCRF_dummy)
+ /* DOMCRF_oos_off: dont use out-of-sync optimization for shadow page tables */
+#define _DOMCRF_oos_off         4
+#define DOMCRF_oos_off          (1U<<_DOMCRF_oos_off)
 
 /*
  * rcu_lock_domain_by_id() is more efficient than get_domain_by_id().

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Per-domain switch to disable oos shadow page tables, Xen patchbot-unstable <=