提交 658ec27f 编写于 作者: D Dmitry Andreev 提交者: Jiri Denemark

conf: add 'model' attribute for panic device with values isa, pseries, hyperv

Libvirt already has two types of panic devices - pvpanic and pSeries firmware.
This patch introduces the 'model' attribute and a new type of panic device.

'isa' model is for ISA pvpanic device.
'pseries' model is a default value for pSeries guests.
'hyperv' model is the new type. It's used for Hyper-V crash.

Schema and docs are updated for the new attribute.
上级 e5c9e032
......@@ -6152,19 +6152,33 @@ qemu-kvm -net nic,model=? /dev/null
<pre>
...
&lt;devices&gt;
&lt;panic&gt;
&lt;panic model='isa'&gt;
&lt;address type='isa' iobase='0x505'/&gt;
&lt;/panic&gt;
&lt;/devices&gt;
...
</pre>
<dl>
<dt><code>model</code></dt>
<dd>
<p>
The optional <code>model</code> attribute specifies what type
of panic device is provided. The panic model used when this attribute
is missing depends on the hypervisor and guest arch.
</p>
<ul>
<li>'isa' &mdash; for ISA pvpanic device</li>
<li>'pseries' &mdash; default and valid only for pSeries guests.</li>
<li>'hyperv' &mdash; for Hyper-V crash CPU feature.
<span class="since">Since 1.3.0, QEMU and KVM only</span></li>
</ul>
</dd>
<dt><code>address</code></dt>
<dd>
<p>
address of panic. The default ioport is 0x505. Most users
don't need to specify an address, and doing so is forbidden
altogether for pSeries guests.
altogether for pseries and hyperv models.
</p>
</dd>
</dl>
......
......@@ -5360,6 +5360,15 @@
</define>
<define name="panic">
<element name="panic">
<optional>
<attribute name="model">
<choice>
<value>isa</value>
<value>pseries</value>
<value>hyperv</value>
</choice>
</attribute>
</optional>
<optional>
<ref name="address"/>
</optional>
......
......@@ -525,6 +525,12 @@ VIR_ENUM_IMPL(virDomainWatchdogAction, VIR_DOMAIN_WATCHDOG_ACTION_LAST,
"none",
"inject-nmi")
VIR_ENUM_IMPL(virDomainPanicModel, VIR_DOMAIN_PANIC_MODEL_LAST,
"default",
"isa",
"pseries",
"hyperv")
VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
"vga",
"cirrus",
......@@ -10197,6 +10203,7 @@ static virDomainPanicDefPtr
virDomainPanicDefParseXML(xmlNodePtr node)
{
virDomainPanicDefPtr panic;
char *model = NULL;
if (VIR_ALLOC(panic) < 0)
return NULL;
......@@ -10204,10 +10211,22 @@ virDomainPanicDefParseXML(xmlNodePtr node)
if (virDomainDeviceInfoParseXML(node, NULL, &panic->info, 0) < 0)
goto error;
model = virXMLPropString(node, "model");
if (model != NULL &&
(panic->model = virDomainPanicModelTypeFromString(model)) < 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unknown panic model '%s'"), model);
goto error;
}
cleanup:
VIR_FREE(model);
return panic;
error:
virDomainPanicDefFree(panic);
return NULL;
panic = NULL;
goto cleanup;
}
/* Parse the XML definition for an input device */
......@@ -17627,6 +17646,14 @@ virDomainPanicDefCheckABIStability(virDomainPanicDefPtr src,
return false;
}
if (src->model != dst->model) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Target panic model '%s' does not match source '%s'"),
virDomainPanicModelTypeToString(dst->model),
virDomainPanicModelTypeToString(src->model));
return false;
}
return virDomainDeviceInfoCheckABIStability(&src->info, &dst->info);
}
......@@ -20613,6 +20640,11 @@ static int virDomainPanicDefFormat(virBufferPtr buf,
int indent = virBufferGetIndent(buf, false);
virBufferAddLit(buf, "<panic");
if (def->model)
virBufferAsprintf(buf, " model='%s'",
virDomainPanicModelTypeToString(def->model));
virBufferAdjustIndent(&childrenBuf, indent + 2);
if (virDomainDeviceInfoFormat(&childrenBuf, &def->info, 0) < 0)
return -1;
......
......@@ -2045,7 +2045,17 @@ struct _virDomainIdMapDef {
};
typedef enum {
VIR_DOMAIN_PANIC_MODEL_DEFAULT,
VIR_DOMAIN_PANIC_MODEL_ISA,
VIR_DOMAIN_PANIC_MODEL_PSERIES,
VIR_DOMAIN_PANIC_MODEL_HYPERV,
VIR_DOMAIN_PANIC_MODEL_LAST
} virDomainPanicModel;
struct _virDomainPanicDef {
int model; /* virDomainPanicModel */
virDomainDeviceInfo info;
};
......@@ -3060,6 +3070,7 @@ VIR_ENUM_DECL(virDomainMemballoonModel)
VIR_ENUM_DECL(virDomainSmbiosMode)
VIR_ENUM_DECL(virDomainWatchdogModel)
VIR_ENUM_DECL(virDomainWatchdogAction)
VIR_ENUM_DECL(virDomainPanicModel)
VIR_ENUM_DECL(virDomainVideo)
VIR_ENUM_DECL(virDomainHostdevMode)
VIR_ENUM_DECL(virDomainHostdevSubsys)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册