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

[Xen-changelog] [xen-3.1-testing] xend: Obey localtime config option for HVM guests as well as PV guests.



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1201620520 0
# Node ID 6721811f87dda90515ab77ccc0cbf99892d2fea3
# Parent  726e41786aa32bbb8964b5bd72217062d54c9269
xend: Obey localtime config option for HVM guests as well as PV guests.
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
xen-unstable changeset:   16932:04e24b9dcc1649e86d3e94a81489dab9c6ec82bc
xen-unstable date:        Tue Jan 29 15:15:51 2008 +0000
---
 tools/python/xen/lowlevel/xc/xc.c       |   25 ++++++++-----------------
 tools/python/xen/xend/XendDomainInfo.py |   10 +++++++---
 tools/python/xen/xend/image.py          |    6 ++++++
 3 files changed, 21 insertions(+), 20 deletions(-)

diff -r 726e41786aa3 -r 6721811f87dd tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c Tue Jan 29 15:28:10 2008 +0000
+++ b/tools/python/xen/lowlevel/xc/xc.c Tue Jan 29 15:28:40 2008 +0000
@@ -1047,23 +1047,13 @@ static PyObject *pyxc_domain_set_time_of
 static PyObject *pyxc_domain_set_time_offset(XcObject *self, PyObject *args)
 {
     uint32_t dom;
-    int32_t time_offset_seconds;
-    time_t calendar_time;
-    struct tm local_time;
-    struct tm utc_time;
-
-    if (!PyArg_ParseTuple(args, "i", &dom))
-        return NULL;
-
-    calendar_time = time(NULL);
-    localtime_r(&calendar_time, &local_time);
-    gmtime_r(&calendar_time, &utc_time);
-    /* set up to get calendar time based on utc_time, with local dst setting */
-    utc_time.tm_isdst = local_time.tm_isdst;
-    time_offset_seconds = (int32_t)difftime(calendar_time, mktime(&utc_time));
-
-    if (xc_domain_set_time_offset(self->xc_handle, dom, time_offset_seconds) 
!= 0)
-        return NULL;
+    int32_t offset;
+
+    if (!PyArg_ParseTuple(args, "ii", &dom, &offset))
+        return NULL;
+
+    if (xc_domain_set_time_offset(self->xc_handle, dom, offset) != 0)
+        return pyxc_error_to_exception();
 
     Py_INCREF(zero);
     return zero;
@@ -1499,6 +1489,7 @@ static PyMethodDef pyxc_methods[] = {
       METH_VARARGS, "\n"
       "Set a domain's time offset to Dom0's localtime\n"
       " dom        [int]: Domain whose time offset is being set.\n"
+      " offset     [int]: Time offset from UTC in seconds.\n"
       "Returns: [int] 0 on success; -1 on error.\n" },
 
     { "domain_send_trigger",
diff -r 726e41786aa3 -r 6721811f87dd tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Tue Jan 29 15:28:10 2008 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py   Tue Jan 29 15:28:40 2008 +0000
@@ -1574,10 +1574,14 @@ class XendDomainInfo:
         self._configureBootloader()
 
         try:
+            if self.info['platform'].get('localtime', 0):
+                t = time.time()
+                loc = time.localtime(t)
+                utc = time.gmtime(t)
+                timeoffset = int(time.mktime(loc) - time.mktime(utc))
+                self.info['platform']['rtc_timeoffset'] = timeoffset
+
             self.image = image.create(self, self.info)
-
-            if self.info['platform'].get('localtime', 0):
-                xc.domain_set_time_offset(self.domid)
 
             xc.domain_setcpuweight(self.domid, self.info['cpu_weight'])
 
diff -r 726e41786aa3 -r 6721811f87dd tools/python/xen/xend/image.py
--- a/tools/python/xen/xend/image.py    Tue Jan 29 15:28:10 2008 +0000
+++ b/tools/python/xen/xend/image.py    Tue Jan 29 15:28:40 2008 +0000
@@ -267,6 +267,12 @@ class HVMImageHandler(ImageHandler):
         self.apic = int(vmConfig['platform'].get('apic', 0))
         self.acpi = int(vmConfig['platform'].get('acpi', 0))
         
+
+    def configure(self, vmConfig):
+        ImageHandler.configure(self, vmConfig)
+        rtc_timeoffset = vmConfig['platform'].get('rtc_timeoffset')
+        if rtc_timeoffset is not None:
+            xc.domain_set_time_offset(self.vm.getDomid(), rtc_timeoffset)
 
     def buildDomain(self):
         store_evtchn = self.vm.getStorePort()

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


 


Rackspace

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