1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2024-12-22 17:34:18 +03:00

qemu: Autofill pstore path if missing

Introduced only a couple of commits ago (in
v10.5.0-84-g90e50e67c6) the pstore device acts as a nonvolatile
storage, where guest kernel can store information about crashes.
This device, however, expects a file in the host from which the
crash data is read. So far, we expected users to provide a path,
but we can autogenerate one if missing. Just put it next to
per-domain's NVRAM stores.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
This commit is contained in:
Michal Privoznik 2024-07-29 09:43:35 +02:00
parent 7428738597
commit de355b7873
3 changed files with 32 additions and 6 deletions

View File

@ -8683,8 +8683,7 @@ desired backend (only ``acpi-erst`` is accepted for now). Then it has the
following child elements: following child elements:
``path`` ``path``
Represents a path in the host that backs the pstore device in the guest. It Represents a path in the host that backs the pstore device in the guest.
is mandatory.
``size`` ``size``
Configures the size of the persistent storage available to the guest. It is Configures the size of the persistent storage available to the guest. It is

View File

@ -6261,9 +6261,11 @@
<value>acpi-erst</value> <value>acpi-erst</value>
</attribute> </attribute>
<interleave> <interleave>
<element name="path"> <optional>
<ref name="absFilePath"/> <element name="path">
</element> <ref name="absFilePath"/>
</element>
</optional>
<element name="size"> <element name="size">
<ref name="scaledInteger"/> <ref name="scaledInteger"/>
</element> </element>

View File

@ -6289,6 +6289,28 @@ qemuDomainMemoryDefPostParse(virDomainMemoryDef *mem, virArch arch,
} }
static int
qemuDomainPstoreDefPostParse(virDomainPstoreDef *pstore,
const virDomainDef *def,
virQEMUDriver *driver)
{
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
switch (pstore->backend) {
case VIR_DOMAIN_PSTORE_BACKEND_ACPI_ERST:
if (!pstore->path)
pstore->path = g_strdup_printf("%s/%s_PSTORE.raw",
cfg->nvramDir, def->name);
break;
case VIR_DOMAIN_PSTORE_BACKEND_LAST:
break;
}
return 0;
}
static int static int
qemuDomainDeviceDefPostParse(virDomainDeviceDef *dev, qemuDomainDeviceDefPostParse(virDomainDeviceDef *dev,
const virDomainDef *def, const virDomainDef *def,
@ -6350,6 +6372,10 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDef *dev,
parseFlags); parseFlags);
break; break;
case VIR_DOMAIN_DEVICE_PSTORE:
ret = qemuDomainPstoreDefPostParse(dev->data.pstore, def, driver);
break;
case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_LEASE:
case VIR_DOMAIN_DEVICE_FS: case VIR_DOMAIN_DEVICE_FS:
case VIR_DOMAIN_DEVICE_INPUT: case VIR_DOMAIN_DEVICE_INPUT:
@ -6365,7 +6391,6 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDef *dev,
case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_IOMMU:
case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
ret = 0; ret = 0;
break; break;