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:
``path``
Represents a path in the host that backs the pstore device in the guest. It
is mandatory.
Represents a path in the host that backs the pstore device in the guest.
``size``
Configures the size of the persistent storage available to the guest. It is

View File

@ -6261,9 +6261,11 @@
<value>acpi-erst</value>
</attribute>
<interleave>
<element name="path">
<ref name="absFilePath"/>
</element>
<optional>
<element name="path">
<ref name="absFilePath"/>
</element>
</optional>
<element name="size">
<ref name="scaledInteger"/>
</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
qemuDomainDeviceDefPostParse(virDomainDeviceDef *dev,
const virDomainDef *def,
@ -6350,6 +6372,10 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDef *dev,
parseFlags);
break;
case VIR_DOMAIN_DEVICE_PSTORE:
ret = qemuDomainPstoreDefPostParse(dev->data.pstore, def, driver);
break;
case VIR_DOMAIN_DEVICE_LEASE:
case VIR_DOMAIN_DEVICE_FS:
case VIR_DOMAIN_DEVICE_INPUT:
@ -6365,7 +6391,6 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDef *dev,
case VIR_DOMAIN_DEVICE_IOMMU:
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
ret = 0;
break;