[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 2/2] tools/misc: add xen-wallclock command



From: David Vrabel <david.vrabel@xxxxxxxxxx>

Add the xen-wallclock command for synchronizing the Xen wallclock to
system time.  The command is similar to the hwclock command for
synchronizing the hardware RTC and takes a similar --systowc command
line option.

Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
---
 .gitignore                 |    1 +
 .hgignore                  |    1 +
 tools/misc/Makefile        |    8 +++-
 tools/misc/xen-wallclock.c |   87 ++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 95 insertions(+), 2 deletions(-)
 create mode 100644 tools/misc/xen-wallclock.c

diff --git a/.gitignore b/.gitignore
index f6edc43..a62abd2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -196,6 +196,7 @@ tools/misc/xc_shadow
 tools/misc/xen_cpuperf
 tools/misc/xen-detect
 tools/misc/xen-tmem-list-parse
+tools/misc/xen-wallclock
 tools/misc/xenperf
 tools/misc/xenpm
 tools/misc/xen-hvmctx
diff --git a/.hgignore b/.hgignore
index 344792a..3b6f747 100644
--- a/.hgignore
+++ b/.hgignore
@@ -198,6 +198,7 @@
 ^tools/misc/xen-hptool$
 ^tools/misc/xen-hvmcrash$
 ^tools/misc/xen-tmem-list-parse$
+^tools/misc/xen-wallclock$
 ^tools/misc/xenperf$
 ^tools/misc/xenpm$
 ^tools/misc/xen-hvmctx$
diff --git a/tools/misc/Makefile b/tools/misc/Makefile
index 22e60fd..456d1ad 100644
--- a/tools/misc/Makefile
+++ b/tools/misc/Makefile
@@ -9,7 +9,8 @@ CFLAGS += $(CFLAGS_libxenstore)
 
 HDRS     = $(wildcard *.h)
 
-TARGETS-y := xenperf xenpm xen-tmem-list-parse gtraceview gtracestat 
xenlockprof xenwatchdogd
+TARGETS-y := xenperf xenpm xen-tmem-list-parse gtraceview gtracestat 
xenlockprof xenwatchdogd \
+       xen-wallclock
 TARGETS-$(CONFIG_X86) += xen-detect xen-hvmctx xen-hvmcrash xen-lowmemd
 TARGETS-$(CONFIG_MIGRATE) += xen-hptool
 TARGETS := $(TARGETS-y)
@@ -22,7 +23,7 @@ INSTALL_BIN-y := xencons
 INSTALL_BIN-$(CONFIG_X86) += xen-detect
 INSTALL_BIN := $(INSTALL_BIN-y)
 
-INSTALL_SBIN-y := xm xen-bugtool xen-python-path xend xenperf xsview xenpm 
xen-tmem-list-parse gtraceview gtracestat xenlockprof xenwatchdogd xen-ringwatch
+INSTALL_SBIN-y := xm xen-bugtool xen-python-path xend xenperf xsview xenpm 
xen-tmem-list-parse gtraceview gtracestat xenlockprof xenwatchdogd 
xen-ringwatch xen-wallclock
 INSTALL_SBIN-$(CONFIG_X86) += xen-hvmctx xen-hvmcrash xen-lowmemd
 INSTALL_SBIN-$(CONFIG_MIGRATE) += xen-hptool
 INSTALL_SBIN := $(INSTALL_SBIN-y)
@@ -85,4 +86,7 @@ xen-lowmemd: xen-lowmemd.o
 gtraceview: gtraceview.o
        $(CC) $(LDFLAGS) -o $@ $< $(CURSES_LIBS) $(APPEND_LDFLAGS)
 
+xen-wallclock: xen-wallclock.o
+       $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) $(APPEND_LDFLAGS)
+
 -include $(DEPS)
diff --git a/tools/misc/xen-wallclock.c b/tools/misc/xen-wallclock.c
new file mode 100644
index 0000000..e4af166
--- /dev/null
+++ b/tools/misc/xen-wallclock.c
@@ -0,0 +1,87 @@
+/*
+ * xen-wallclock.c: manage the Xen wallclock.
+ * Copyright (C) 2012, Citrix Systems (UK) Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <getopt.h>
+
+#include <xenctrl.h>
+
+static const char *exe_name;
+
+static void usage(FILE *f)
+{
+    fprintf(f, "Usage: %s --systowc\n", exe_name);
+}
+
+static void help(void)
+{
+    usage(stdout);
+    printf("Synchronize the Xen wallclock with system time.\n"
+           "\n"
+           "  -w, --systowc synchronize wallclock with system time\n"
+           "      --help    display this help and exit\n");
+    exit(0);
+}
+
+int main(int argc, char *argv[])
+{
+    const static char sopts[] = "w";
+    const static struct option lopts[] = {
+        { "help", 0, NULL, 0 },
+        { "systowc", 0, NULL, 'w' },
+        { 0, 0, NULL, 0 },
+    };
+    int opt, opt_idx;
+
+    int systowc = 0;
+    xc_interface *xch;
+
+    exe_name = argv[0];
+
+    while ( (opt = getopt_long(argc, argv, sopts, lopts, &opt_idx)) != -1 )
+    {
+        switch ( opt )
+        {
+        case 'w':
+            systowc = 1;
+            break;
+        case 0:
+            switch (opt_idx)
+            {
+            case 0:
+                help();
+            }
+            break;
+        default:
+            usage(stderr);
+            exit(1);
+        }
+    }
+
+    /* Valid combination of options? i.e., --systowc */
+    if (!systowc)
+    {
+        usage(stderr);
+        exit(1);
+    }
+
+    xch = xc_interface_open(NULL, NULL, 0);
+    if (xch == NULL)
+    {
+        exit(1);
+    }
+    xc_wallclock_sync(xch);
+    xc_interface_close(xch);
+
+    return 0;
+}
-- 
1.7.2.5


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.