xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] libxl: support for "rtc_timeoffset" and "localtime"
@ 2012-03-19 13:02 Lin Ming
  2012-03-19 13:19 ` Ian Campbell
  0 siblings, 1 reply; 5+ messages in thread
From: Lin Ming @ 2012-03-19 13:02 UTC (permalink / raw)
  To: xen-devel; +Cc: Teck Choon Giam, Ian Campbell

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@ss.pku.edu.cn>
---
 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.
+
+=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;
+    }
+
     if (!xlu_cfg_get_long (config, "videoram", &l, 0))
         b_info->video_memkb = l * 1024;
 
-- 
1.7.2.5

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] libxl: support for "rtc_timeoffset" and "localtime"
  2012-03-19 13:02 [PATCH v2] libxl: support for "rtc_timeoffset" and "localtime" Lin Ming
@ 2012-03-19 13:19 ` Ian Campbell
  2012-03-19 15:31   ` Lin Ming
  0 siblings, 1 reply; 5+ messages in thread
From: Ian Campbell @ 2012-03-19 13:19 UTC (permalink / raw)
  To: Lin Ming; +Cc: Teck Choon Giam, xen-devel@lists.xen.org

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@ss.pku.edu.cn>
> ---
>  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?

Also both of these options belong in the "Fully-virtualised (HVM) Guest
Specific Options" section of the document.

> +
> +=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)

Ian.


> +
>      if (!xlu_cfg_get_long (config, "videoram", &l, 0))
>          b_info->video_memkb = l * 1024;
>  

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] libxl: support for "rtc_timeoffset" and "localtime"
  2012-03-19 13:19 ` Ian Campbell
@ 2012-03-19 15:31   ` Lin Ming
  2012-03-19 15:40     ` Ian Campbell
  0 siblings, 1 reply; 5+ messages in thread
From: Lin Ming @ 2012-03-19 15:31 UTC (permalink / raw)
  To: Ian Campbell; +Cc: Teck Choon Giam, xen-devel@lists.xen.org

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@ss.pku.edu.cn>
> > ---
> >  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@ss.pku.edu.cn>
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@ss.pku.edu.cn>
---
 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

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] libxl: support for "rtc_timeoffset" and "localtime"
  2012-03-19 15:31   ` Lin Ming
@ 2012-03-19 15:40     ` Ian Campbell
  2012-03-19 15:49       ` Lin Ming
  0 siblings, 1 reply; 5+ messages in thread
From: Ian Campbell @ 2012-03-19 15:40 UTC (permalink / raw)
  To: Lin Ming; +Cc: Teck Choon Giam, xen-devel@lists.xen.org

On Mon, 2012-03-19 at 15:31 +0000, Lin Ming wrote:
> From 0614ad85fc5956d95d988b88689cc4967b4d8af8 Mon Sep 17 00:00:00 2001
> From: Lin Ming <mlin@ss.pku.edu.cn>
> 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@ss.pku.edu.cn>

Looks good to me, thanks!

Acked-by: Ian Campbell <ian.campbell@citrix.com>

Although when you repost please can you fix the following:
> [...]
> @@ -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>.

The is the end of a sub section entitled "Unclassified HVM Specific
Options". I think these new options belong in the "Guest Virtual Time
Controls" subsection or perhaps "Miscellaneous Emulated Hardware".

Ian.

>  
> +=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;
>  

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] libxl: support for "rtc_timeoffset" and "localtime"
  2012-03-19 15:40     ` Ian Campbell
@ 2012-03-19 15:49       ` Lin Ming
  0 siblings, 0 replies; 5+ messages in thread
From: Lin Ming @ 2012-03-19 15:49 UTC (permalink / raw)
  To: Ian Campbell; +Cc: Teck Choon Giam, xen-devel@lists.xen.org

On Mon, Mar 19, 2012 at 11:40 PM, Ian Campbell <Ian.Campbell@citrix.com> wrote:
> On Mon, 2012-03-19 at 15:31 +0000, Lin Ming wrote:
>> From 0614ad85fc5956d95d988b88689cc4967b4d8af8 Mon Sep 17 00:00:00 2001
>> From: Lin Ming <mlin@ss.pku.edu.cn>
>> 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@ss.pku.edu.cn>
>
> Looks good to me, thanks!
>
> Acked-by: Ian Campbell <ian.campbell@citrix.com>
>
> Although when you repost please can you fix the following:
>> [...]
>> @@ -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>.
>
> The is the end of a sub section entitled "Unclassified HVM Specific
> Options". I think these new options belong in the "Guest Virtual Time
> Controls" subsection or perhaps "Miscellaneous Emulated Hardware".

OK, "Guest Virtual Time Controls" looks better to me.

Will move there.

>
> Ian.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-03-19 15:49 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-19 13:02 [PATCH v2] libxl: support for "rtc_timeoffset" and "localtime" Lin Ming
2012-03-19 13:19 ` Ian Campbell
2012-03-19 15:31   ` Lin Ming
2012-03-19 15:40     ` Ian Campbell
2012-03-19 15:49       ` Lin Ming

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).