[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] libxl: support for "rtc_timeoffset" and "localtime"
On Mon, 2012-03-19 at 13:19 +0000, Ian Campbell wrote: > On Mon, 2012-03-19 at 13:02 +0000, Lin Ming wrote: > > Implement "rtc_timeoffset" and "localtime" options compatible as xm. > > > > rtc_timeoffset is the offset between host time and guest time. > > localtime means to specify whether the emulted RTC appears as UTC or is > > offset by the host. > > > > Signed-off-by: Lin Ming <mlin@xxxxxxxxxxxxx> > > --- > > docs/man/xl.cfg.pod.5 | 8 ++++++++ > > tools/libxl/libxl_create.c | 1 + > > tools/libxl/libxl_dom.c | 3 +++ > > tools/libxl/libxl_types.idl | 2 ++ > > tools/libxl/xl_cmdimpl.c | 14 ++++++++++++++ > > 5 files changed, 28 insertions(+), 0 deletions(-) > > > > Changed since v1: > > * Add tm_gmtoff, instead subtract, to rtc_timeoffset (Giam Teck Choon) > > * Add docs for the newly supported options > > * Include "bool localtime" in libxl API > > * Remove the unneeded "rtc_timeoffset" output in printf_info_sexp() > > > > diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 > > index 55f7e75..f93f1d6 100644 > > --- a/docs/man/xl.cfg.pod.5 > > +++ b/docs/man/xl.cfg.pod.5 > > @@ -109,6 +109,14 @@ created online and the remainder will be offline. > > > > Start the guest with MBYTES megabytes of RAM. > > > > +=item B<localtime=BOOLEAN> > > + > > +Set the real time clock to local time or to UTC. UTC by default. > > Might be worth making it clearer which corresponds to true and which to > false? How about: Set the real time clock to local time or to UTC. 0 by default, i.e. set to UTC. > > Also both of these options belong in the "Fully-virtualised (HVM) Guest > Specific Options" section of the document. Move both to the end of that section. See below patch. > > > + > > +=item B<rtc_timeoffset=SECONDS> > > + > > +Set the real time clock offset in seconds. 0 by default. > > + > > =item B<on_poweroff="ACTION"> > > > > Specifies what should be done with the domain if it shuts itself down. > > diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c > > index 8417661..b0e76cb 100644 > > --- a/tools/libxl/libxl_create.c > > +++ b/tools/libxl/libxl_create.c > > @@ -124,6 +124,7 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, > > if (b_info->target_memkb == LIBXL_MEMKB_DEFAULT) > > b_info->target_memkb = b_info->max_memkb; > > > > + libxl_defbool_setdefault(&b_info->localtime, false); > > libxl_defbool_setdefault(&b_info->disable_migrate, false); > > > > switch (b_info->type) { > > diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c > > index 9b33267..0bdd654 100644 > > --- a/tools/libxl/libxl_dom.c > > +++ b/tools/libxl/libxl_dom.c > > @@ -91,6 +91,9 @@ int libxl__build_pre(libxl__gc *gc, uint32_t domid, > > if (libxl_defbool_val(info->disable_migrate)) > > xc_domain_disable_migrate(ctx->xch, domid); > > > > + if (info->rtc_timeoffset) > > + xc_domain_set_time_offset(ctx->xch, domid, info->rtc_timeoffset); > > + > > if (info->type == LIBXL_DOMAIN_TYPE_HVM) { > > unsigned long shadow; > > shadow = (info->shadow_memkb + 1023) / 1024; > > diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl > > index 413a1a6..09089b2 100644 > > --- a/tools/libxl/libxl_types.idl > > +++ b/tools/libxl/libxl_types.idl > > @@ -238,6 +238,8 @@ libxl_domain_build_info = Struct("domain_build_info",[ > > ("target_memkb", MemKB), > > ("video_memkb", MemKB), > > ("shadow_memkb", MemKB), > > + ("rtc_timeoffset", uint32), > > + ("localtime", libxl_defbool), > > ("disable_migrate", libxl_defbool), > > ("cpuid", libxl_cpuid_policy_list), > > > > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > > index 1d59b89..bcbea48 100644 > > --- a/tools/libxl/xl_cmdimpl.c > > +++ b/tools/libxl/xl_cmdimpl.c > > @@ -697,6 +697,20 @@ static void parse_config_data(const char > > *configfile_filename_report, > > } > > } > > > > + if (!xlu_cfg_get_long(config, "rtc_timeoffset", &l, 0)) > > + b_info->rtc_timeoffset = l; > > + > > + xlu_cfg_get_defbool(config, "localtime", &b_info->localtime, 0); > > + if (libxl_defbool_val(b_info->localtime)) { > > + time_t t; > > + struct tm *tm; > > + > > + t = time(NULL); > > + tm = localtime(&t); > > + > > + b_info->rtc_timeoffset += tm->tm_gmtoff; > > + } > > This "if(...) { ... }" and the logic therein should be done inside > libxl, I think in libxl__domain_build_info_setdefault() just after you > set the default value > > BT doesn't the above crash if localtime is not given at all in the > config due to the lack of a specific value (which libxl_defbool_val > requires has been set previously) (I have problem to run xen-unstable, will re-send this patch after I get xen-unstable running and more test). How about below compile-test-only patch? >From 0614ad85fc5956d95d988b88689cc4967b4d8af8 Mon Sep 17 00:00:00 2001 From: Lin Ming <mlin@xxxxxxxxxxxxx> Date: Sun, 18 Mar 2012 13:14:32 +0800 Subject: [PATCH] libxl: support for "rtc_timeoffset" and "localtime" Implement "rtc_timeoffset" and "localtime" options compatible as xm. rtc_timeoffset is the offset between host time and guest time. localtime means to specify whether the emulted RTC appears as UTC or is offset by the host. Signed-off-by: Lin Ming <mlin@xxxxxxxxxxxxx> --- docs/man/xl.cfg.pod.5 | 8 ++++++++ tools/libxl/libxl_create.c | 11 +++++++++++ tools/libxl/libxl_dom.c | 3 +++ tools/libxl/libxl_types.idl | 2 ++ tools/libxl/xl_cmdimpl.c | 5 +++++ 5 files changed, 29 insertions(+), 0 deletions(-) diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 index 55f7e75..8d5a4ee 100644 --- a/docs/man/xl.cfg.pod.5 +++ b/docs/man/xl.cfg.pod.5 @@ -767,6 +767,14 @@ Set mode for Virtual Timers XXX ??? should be an enum of particular values. See C<HVM_PARAM_TIMER_MODE> in F<xen/include/public/hvm/params.h>. +=item B<localtime=BOOLEAN> + +Set the real time clock to local time or to UTC. 0 by default, i.e. set to UTC. + +=item B<rtc_timeoffset=SECONDS> + +Set the real time clock offset in seconds. 0 by default. + =back =head2 Device-Model Options diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index 8417661..d39ecbe 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -124,6 +124,17 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, if (b_info->target_memkb == LIBXL_MEMKB_DEFAULT) b_info->target_memkb = b_info->max_memkb; + libxl_defbool_setdefault(&b_info->localtime, false); + if (libxl_defbool_val(b_info->localtime)) { + time_t t; + struct tm *tm; + + t = time(NULL); + tm = localtime(&t); + + b_info->rtc_timeoffset += tm->tm_gmtoff; + } + libxl_defbool_setdefault(&b_info->disable_migrate, false); switch (b_info->type) { diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c index 9b33267..0bdd654 100644 --- a/tools/libxl/libxl_dom.c +++ b/tools/libxl/libxl_dom.c @@ -91,6 +91,9 @@ int libxl__build_pre(libxl__gc *gc, uint32_t domid, if (libxl_defbool_val(info->disable_migrate)) xc_domain_disable_migrate(ctx->xch, domid); + if (info->rtc_timeoffset) + xc_domain_set_time_offset(ctx->xch, domid, info->rtc_timeoffset); + if (info->type == LIBXL_DOMAIN_TYPE_HVM) { unsigned long shadow; shadow = (info->shadow_memkb + 1023) / 1024; diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index 413a1a6..09089b2 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -238,6 +238,8 @@ libxl_domain_build_info = Struct("domain_build_info",[ ("target_memkb", MemKB), ("video_memkb", MemKB), ("shadow_memkb", MemKB), + ("rtc_timeoffset", uint32), + ("localtime", libxl_defbool), ("disable_migrate", libxl_defbool), ("cpuid", libxl_cpuid_policy_list), diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 1d59b89..0736357 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -697,6 +697,11 @@ static void parse_config_data(const char *configfile_filename_report, } } + if (!xlu_cfg_get_long(config, "rtc_timeoffset", &l, 0)) + b_info->rtc_timeoffset = l; + + xlu_cfg_get_defbool(config, "localtime", &b_info->localtime, 0); + if (!xlu_cfg_get_long (config, "videoram", &l, 0)) b_info->video_memkb = l * 1024; -- 1.7.2.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |