On Wed, Jan 28, 2009 at 07:09:19PM -0800, john.levon(a)sun.com wrote:
# HG changeset patch
# User john.levon(a)sun.com
# Date 1233198416 28800
# Node ID 76d670ab6ea5476be96441ea88af94644c985201
# Parent f0247b9f4da199c01412d5bd0f9d7d888cbb84de
Solaris PV is localtime. Allow this setting through the conversions.
Signed-off-by: John Levon <john.levon(a)sun.com>
diff --git a/src/xend_internal.c b/src/xend_internal.c
--- a/src/xend_internal.c
+++ b/src/xend_internal.c
@@ -2272,10 +2272,12 @@ xenDaemonParseSxpr(virConnectPtr conn,
def->features |= (1 << VIR_DOMAIN_FEATURE_APIC);
if (sexpr_int(root, "domain/image/hvm/pae"))
def->features |= (1 << VIR_DOMAIN_FEATURE_PAE);
-
- if (sexpr_int(root, "domain/image/hvm/localtime"))
+ }
+
+ if (sexpr_int(root, "domain/localtime") ||
+ sexpr_int(root, "domain/image/hvm/localtime") ||
+ sexpr_int(root, "domain/image/linux/localtime"))
def->localtime = 1;
- }
if (sexpr_node_copy(root, hvm ?
"domain/image/hvm/device_model" :
@@ -5338,6 +5340,14 @@ xenDaemonFormatSxpr(virConnectPtr conn,
}
virBufferVSprintf(&buf, "(on_crash '%s')", tmp);
+ /*
+ * xend puts localtime in image/{hvm,linux}/, but is clearly
+ * bootloader independent. As a simple workaround, we define it
+ * here - xend happily picks it up from here.
+ */
+ if (def->localtime)
+ virBufferAddLit(&buf, "(localtime 1)");
+
Hmm, current XenD may not mind having 'localtime' here, but I'm
worried older XenD may not be so forgiving. Will have to check
older source.
if (!def->os.bootloader) {
if (STREQ(def->os.type, "hvm"))
hvm = 1;
@@ -5453,9 +5463,6 @@ xenDaemonFormatSxpr(virConnectPtr conn,
virBufferAddLit(&buf, "(serial none)");
}
- if (def->localtime)
- virBufferAddLit(&buf, "(localtime 1)");
-
if (def->sounds) {
virBufferAddLit(&buf, "(soundhw '");
if (xenDaemonFormatSxprSound(conn, def, &buf) < 0)
diff --git a/src/xm_internal.c b/src/xm_internal.c
--- a/src/xm_internal.c
+++ b/src/xm_internal.c
@@ -818,10 +818,11 @@ xenXMDomainConfigParse(virConnectPtr con
goto cleanup;
else if (val)
def->features |= (1 << VIR_DOMAIN_FEATURE_APIC);
-
- if (xenXMConfigGetBool(conn, conf, "localtime",
&def->localtime, 0) < 0)
- goto cleanup;
- }
+ }
+
+ if (xenXMConfigGetBool(conn, conf, "localtime", &def->localtime, 0)
< 0)
+ goto cleanup;
+
if (xenXMConfigCopyStringOpt(conn, conf, "device_model",
&def->emulator) < 0)
goto cleanup;
@@ -1972,6 +1973,9 @@ virConfPtr xenXMDomainConfigFormat(virCo
if (xenXMConfigSetInt(conf, "vcpus", def->vcpus) < 0)
goto no_memory;
+ if (def->localtime && xenXMConfigSetInt(conf, "localtime", 1)
< 0)
+ goto no_memory;
Existing code unconditionally sets localtime=0 and localtime=1,
but this only sets localtime=1, relying on XM defaults for localtime=0.
I prefer not to rely on defaults when writing the config back out to disk
because those have a habit of being broken over time. Unconditionally
setting it avoids the need to change all those test case config files.
+
if (def->cpumask &&
!(cpus = virDomainCpuSetFormat(conn, def->cpumask, def->cpumasklen)) <
0)
goto cleanup;
@@ -2034,9 +2038,6 @@ virConfPtr xenXMDomainConfigFormat(virCo
(1 << VIR_DOMAIN_FEATURE_APIC)) ? 1 : 0) < 0)
goto no_memory;
-
- if (xenXMConfigSetInt(conf, "localtime", def->localtime ? 1 : 0)
< 0)
- goto no_memory;
if (priv->xendConfigVersion == 1) {
for (i = 0 ; i < def->ndisks ; i++) {
Regards,
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|