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

[Xen-devel] [PATCH V2] libxl: use named options for tsc_mode

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH V2] libxl: use named options for tsc_mode
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
Date: Thu, 10 Nov 2011 12:20:40 +0000
Cc: ian.jackson@xxxxxxxxxx
Delivery-date: Thu, 10 Nov 2011 04:21:31 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.6.4
# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1320927597 0
# Node ID dcc3fc454c9995608c42b33c47c858746183806e
# Parent  460b507e15f864dd6712f5040e36538d6e076ae4
libxl: use named options for tsc_mode.

Add an enum at the libxl level with a hopefully descriptive set of names.
Deprecate the use of an integer in xl cfg files.

Signed-off-by: Ian Campbell

diff -r 460b507e15f8 -r dcc3fc454c99 docs/user/xl-domain-config.markdown
--- a/docs/user/xl-domain-config.markdown       Thu Nov 10 10:18:29 2011 +0000
+++ b/docs/user/xl-domain-config.markdown       Thu Nov 10 12:19:57 2011 +0000
@@ -1,4 +1,4 @@
- # xl Domain Configuration
+# xl Domain Configuration
 
 To create a VM (a domain in Xen terminology, sometimes called a guest)
 with xl requires the provision of a domain config file.  Typically
@@ -338,6 +338,30 @@ accept the defaults for these options wh
    extensions (e.g. Windows XP compatibility mode on more modern
    Windows OS).
 
+### Guest Virtual Time Controls
+
+ * `tsc_mode="MODE"`: Specifies how the TSC (Time Stamp Counter)
+   should be provided to the guest (X86 only). Specifying this option as a 
number
+   is deprecated. Options are:
+
+   * `"default"`: guest rdtsc/p executed natively when monotonicity
+     can be guaranteed and emulated otherwise (with frequency scaled
+     if necessary).
+
+   * `"always_emulate"`: guest rdtsc/p always emulated at 1GHz (kernel
+     and user).
+
+   * `"native"`: guest rdtsc always executed natively (no
+     monotonicity/frequency guarantees); guest rdtscp emulated at
+     native frequency if unsupported by h/w, else executed natively.
+
+   * `"native_paravirt"`: same as `native`, except xen manages TSC_AUX
+      register so guest can determine when a restore/migration has
+      occurred and assumes guest obtains/uses pvclock-like mechanism
+      to adjust for monotonicity and frequency changes.
+
+   Please see [docs/misc/tscmode.txt] for more information on this option.
+
 ### Support for Paravirtualisation of HVM Guests
 
 The following options allow Paravirtualised features (such as devices)
@@ -546,9 +570,6 @@ certainly belong in a more appropriate s
    enables certain other features which are incompatible with
    migration (currently certain TSC modes XXX ?).
 
- * `tsc_mode=VALUE`: Specifies how the TSC (Time Stamp Counter) should
-   be provided to the guest.  XXX ???
-
  * `pci_msitranslate=BOOLEAN`: XXX
 
  * `pci_power_mgmt=BOOLEAN`: XXX
diff -r 460b507e15f8 -r dcc3fc454c99 tools/libxl/libxl_dom.c
--- a/tools/libxl/libxl_dom.c   Thu Nov 10 10:18:29 2011 +0000
+++ b/tools/libxl/libxl_dom.c   Thu Nov 10 12:19:57 2011 +0000
@@ -73,12 +73,29 @@ int libxl__build_pre(libxl__gc *gc, uint
               libxl_domain_build_info *info, libxl__domain_build_state *state)
 {
     libxl_ctx *ctx = libxl__gc_owner(gc);
+    int tsc_mode;
     xc_domain_max_vcpus(ctx->xch, domid, info->max_vcpus);
     xc_domain_setmaxmem(ctx->xch, domid, info->target_memkb + 
LIBXL_MAXMEM_CONSTANT);
     if (info->type == LIBXL_DOMAIN_TYPE_PV)
         xc_domain_set_memmap_limit(ctx->xch, domid,
                 (info->max_memkb + info->u.pv.slack_memkb));
-    xc_domain_set_tsc_info(ctx->xch, domid, info->tsc_mode, 0, 0, 0);
+    switch (info->tsc_mode) {
+    case LIBXL_TSC_MODE_DEFAULT:
+        tsc_mode = 0;
+        break;
+    case LIBXL_TSC_MODE_ALWAYS_EMULATE:
+        tsc_mode = 1;
+        break;
+    case LIBXL_TSC_MODE_NATIVE:
+        tsc_mode = 2;
+        break;
+    case LIBXL_TSC_MODE_NATIVE_PARAVIRT:
+        tsc_mode = 3;
+        break;
+    default:
+        abort();
+    }
+    xc_domain_set_tsc_info(ctx->xch, domid, tsc_mode, 0, 0, 0);
     if ( info->disable_migrate )
         xc_domain_disable_migrate(ctx->xch, domid);
 
diff -r 460b507e15f8 -r dcc3fc454c99 tools/libxl/libxl_types.idl
--- a/tools/libxl/libxl_types.idl       Thu Nov 10 10:18:29 2011 +0000
+++ b/tools/libxl/libxl_types.idl       Thu Nov 10 12:19:57 2011 +0000
@@ -85,6 +85,13 @@ libxl_button = Enumeration("button", [
     (2, "SLEEP"),
     ])
 
+libxl_tsc_mode = Enumeration("tsc_mode", [
+    (0, "default"),
+    (1, "always_emulate"),
+    (2, "native"),
+    (3, "native_paravirt"),
+    ])
+
 #
 # Complex libxl types
 #
@@ -154,7 +161,7 @@ libxl_domain_create_info = Struct("domai
 libxl_domain_build_info = Struct("domain_build_info",[
     ("max_vcpus",       integer),
     ("cur_vcpus",       integer),
-    ("tsc_mode",        integer),
+    ("tsc_mode",        libxl_tsc_mode),
     ("max_memkb",       uint32),
     ("target_memkb",    uint32),
     ("video_memkb",     uint32),
diff -r 460b507e15f8 -r dcc3fc454c99 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Thu Nov 10 10:18:29 2011 +0000
+++ b/tools/libxl/xl_cmdimpl.c  Thu Nov 10 12:19:57 2011 +0000
@@ -328,7 +328,7 @@ static void printf_info(int domid,
 
     printf("\t(build_info)\n");
     printf("\t(max_vcpus %d)\n", b_info->max_vcpus);
-    printf("\t(tsc_mode %d)\n", b_info->tsc_mode);
+    printf("\t(tsc_mode %s)\n", libxl_tsc_mode_to_string(b_info->tsc_mode));
     printf("\t(max_memkb %d)\n", b_info->max_memkb);
     printf("\t(target_memkb %d)\n", b_info->target_memkb);
     printf("\t(nomigrate %d)\n", b_info->disable_migrate);
@@ -662,8 +662,23 @@ static void parse_config_data(const char
     if (!xlu_cfg_get_long (config, "nomigrate", &l, 0))
         b_info->disable_migrate = l;
 
-    if (!xlu_cfg_get_long(config, "tsc_mode", &l, 0))
+    if (!xlu_cfg_get_long(config, "tsc_mode", &l, 1)) {
+        fprintf(stderr, "WARNING: specifying \"tsc_mode\" as an integer is 
deprecated. "
+                "Please use the named parameter variant.\n");
+        if (l < LIBXL_TSC_MODE_DEFAULT ||
+            l > LIBXL_TSC_MODE_NATIVE_PARAVIRT) {
+            fprintf(stderr, "ERROR: invalid value %ld for \"tsc_mode\"\n", l);
+            exit (1);
+        }
         b_info->tsc_mode = l;
+    } else if (!xlu_cfg_get_string(config, "tsc_mode", &buf, 0)) {
+        fprintf(stderr, "got a tsc mode string: \"%s\"\n", buf);
+        if (libxl_tsc_mode_from_string(buf, &b_info->tsc_mode)) {
+            fprintf(stderr, "ERROR: invalid value \"%s\" for \"tsc_mode\"\n",
+                    buf);
+            exit (1);
+        }
+    }
 
     if (!xlu_cfg_get_long (config, "videoram", &l, 0))
         b_info->video_memkb = l * 1024;

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH V2] libxl: use named options for tsc_mode, Ian Campbell <=