# HG changeset patch # User Keir Fraser # 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 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()