88 lines
3.5 KiB
Diff
88 lines
3.5 KiB
Diff
# HG changeset patch
|
|
# User Keir Fraser <keir.fraser@citrix.com>
|
|
# Date 1201619751 0
|
|
# Node ID 04e24b9dcc1649e86d3e94a81489dab9c6ec82bc
|
|
# Parent 98c2665056ea4fe63e02c943536db686fcedc459
|
|
xend: Obey localtime config option for HVM guests as well as PV guests.
|
|
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
|
|
|
|
Index: xen-3.2-testing/tools/python/xen/lowlevel/xc/xc.c
|
|
===================================================================
|
|
--- xen-3.2-testing.orig/tools/python/xen/lowlevel/xc/xc.c
|
|
+++ xen-3.2-testing/tools/python/xen/lowlevel/xc/xc.c
|
|
@@ -1154,23 +1154,13 @@ static PyObject *pyxc_domain_iomem_permi
|
|
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;
|
|
+ int32_t offset;
|
|
|
|
- if (!PyArg_ParseTuple(args, "i", &dom))
|
|
+ if (!PyArg_ParseTuple(args, "ii", &dom, &offset))
|
|
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;
|
|
+ if (xc_domain_set_time_offset(self->xc_handle, dom, offset) != 0)
|
|
+ return pyxc_error_to_exception();
|
|
|
|
Py_INCREF(zero);
|
|
return zero;
|
|
@@ -1619,6 +1609,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",
|
|
Index: xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
|
===================================================================
|
|
--- xen-3.2-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
|
+++ xen-3.2-testing/tools/python/xen/xend/XendDomainInfo.py
|
|
@@ -1708,10 +1708,14 @@ class XendDomainInfo:
|
|
self._configureBootloader()
|
|
|
|
try:
|
|
- self.image = image.create(self, self.info)
|
|
-
|
|
if self.info['platform'].get('localtime', 0):
|
|
- xc.domain_set_time_offset(self.domid)
|
|
+ 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)
|
|
|
|
xc.domain_setcpuweight(self.domid, \
|
|
self.info['vcpus_params']['weight'])
|
|
Index: xen-3.2-testing/tools/python/xen/xend/image.py
|
|
===================================================================
|
|
--- xen-3.2-testing.orig/tools/python/xen/xend/image.py
|
|
+++ xen-3.2-testing/tools/python/xen/xend/image.py
|
|
@@ -342,6 +342,12 @@ class LinuxImageHandler(ImageHandler):
|
|
flags = 0
|
|
vhpt = 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()
|
|
console_evtchn = self.vm.getConsolePort()
|