"nvram",
"rng",
"shmem",
- "tpm")
+ "tpm",
+ "panic")
VIR_ENUM_IMPL(virDomainDeviceAddress, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST,
"none",
case VIR_DOMAIN_DEVICE_TPM:
virDomainTPMDefFree(def->data.tpm);
break;
+ case VIR_DOMAIN_DEVICE_PANIC:
+ virDomainPanicDefFree(def->data.panic);
+ break;
case VIR_DOMAIN_DEVICE_LAST:
case VIR_DOMAIN_DEVICE_NONE:
break;
return &device->data.rng->info;
case VIR_DOMAIN_DEVICE_TPM:
return &device->data.tpm->info;
+ case VIR_DOMAIN_DEVICE_PANIC:
+ return &device->data.panic->info;
/* The following devices do not contain virDomainDeviceInfo */
case VIR_DOMAIN_DEVICE_LEASE:
if (cb(def, &device, &def->tpm->info, opaque) < 0)
return -1;
}
+ if (def->panic) {
+ device.type = VIR_DOMAIN_DEVICE_PANIC;
+ device.data.panic = def->panic;
+ if (cb(def, &device, &def->panic->info, opaque) < 0)
+ return -1;
+ }
/* Coverity is not very happy with this - all dead_error_condition */
#if !STATIC_ANALYSIS
case VIR_DOMAIN_DEVICE_NVRAM:
case VIR_DOMAIN_DEVICE_SHMEM:
case VIR_DOMAIN_DEVICE_TPM:
+ case VIR_DOMAIN_DEVICE_PANIC:
case VIR_DOMAIN_DEVICE_LAST:
case VIR_DOMAIN_DEVICE_RNG:
break;
goto cleanup;
}
+static virDomainPanicDefPtr
+virDomainPanicDefParseXML(xmlNodePtr node)
+{
+ virDomainPanicDefPtr panic;
+
+ if (VIR_ALLOC(panic) < 0)
+ return NULL;
+
+ if (virDomainDeviceInfoParseXML(node, NULL, &panic->info, 0) < 0)
+ goto error;
+
+ return panic;
+ error:
+ virDomainPanicDefFree(panic);
+ return NULL;
+}
+
/* Parse the XML definition for an input device */
static virDomainInputDefPtr
virDomainInputDefParseXML(const virDomainDef *dom,
if (!(dev->data.tpm = virDomainTPMDefParseXML(node, ctxt, flags)))
goto error;
break;
+ case VIR_DOMAIN_DEVICE_PANIC:
+ if (!(dev->data.panic = virDomainPanicDefParseXML(node)))
+ goto error;
+ break;
case VIR_DOMAIN_DEVICE_NONE:
case VIR_DOMAIN_DEVICE_LAST:
break;
return idmap;
}
-static virDomainPanicDefPtr
-virDomainPanicDefParseXML(xmlNodePtr node)
-{
- virDomainPanicDefPtr panic;
-
- if (VIR_ALLOC(panic) < 0)
- return NULL;
-
- if (virDomainDeviceInfoParseXML(node, NULL, &panic->info, 0) < 0)
- goto error;
-
- return panic;
- error:
- virDomainPanicDefFree(panic);
- return NULL;
-}
-
/* Parse the XML definition for a vcpupin or emulatorpin.
*
* vcpupin has the form of
return virDomainDeviceInfoCheckABIStability(&src->info, &dst->info);
}
+static bool
+virDomainPanicDefCheckABIStability(virDomainPanicDefPtr src,
+ virDomainPanicDefPtr dst)
+{
+ return virDomainDeviceInfoCheckABIStability(&src->info, &dst->info);
+}
+
/* This compares two configurations and looks for any differences
* which will affect the guest ABI. This is primarily to allow
* validation of custom XML config passed in during migration
goto error;
}
+ if (src->panic && dst->panic) {
+ if (!virDomainPanicDefCheckABIStability(src->panic, dst->panic))
+ goto error;
+ } else if (src->panic || dst->panic) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("Either both target and source domains or none of "
+ "them must have PANIC device present"));
+ goto error;
+ }
+
/* Coverity is not very happy with this - all dead_error_condition */
#if !STATIC_ANALYSIS
/* This switch statement is here to trigger compiler warning when adding
case VIR_DOMAIN_DEVICE_LAST:
case VIR_DOMAIN_DEVICE_RNG:
case VIR_DOMAIN_DEVICE_TPM:
+ case VIR_DOMAIN_DEVICE_PANIC:
case VIR_DOMAIN_DEVICE_SHMEM:
break;
}
}
static int virDomainPanicDefFormat(virBufferPtr buf,
- virDomainPanicDefPtr def)
+ virDomainPanicDefPtr def)
{
virBufferAddLit(buf, "<panic>\n");
virBufferAdjustIndent(buf, 2);
case VIR_DOMAIN_DEVICE_TPM:
rc = virDomainTPMDefFormat(&buf, src->data.tpm, flags);
break;
+ case VIR_DOMAIN_DEVICE_PANIC:
+ rc = virDomainPanicDefFormat(&buf, src->data.panic);
+ break;
case VIR_DOMAIN_DEVICE_NONE:
case VIR_DOMAIN_DEVICE_SMARTCARD:
case VIR_DOMAIN_DEVICE_MEMBALLOON:
case VIR_DOMAIN_DEVICE_RNG:
case VIR_DOMAIN_DEVICE_SHMEM:
case VIR_DOMAIN_DEVICE_TPM:
+ case VIR_DOMAIN_DEVICE_PANIC:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("live attach of device '%s' is not supported"),
case VIR_DOMAIN_DEVICE_REDIRDEV:
case VIR_DOMAIN_DEVICE_NONE:
case VIR_DOMAIN_DEVICE_TPM:
+ case VIR_DOMAIN_DEVICE_PANIC:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("live detach of device '%s' is not supported"),
case VIR_DOMAIN_DEVICE_CHR:
case VIR_DOMAIN_DEVICE_NONE:
case VIR_DOMAIN_DEVICE_TPM:
+ case VIR_DOMAIN_DEVICE_PANIC:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("live update of device '%s' is not supported"),
case VIR_DOMAIN_DEVICE_REDIRDEV:
case VIR_DOMAIN_DEVICE_NONE:
case VIR_DOMAIN_DEVICE_TPM:
+ case VIR_DOMAIN_DEVICE_PANIC:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("persistent attach of device '%s' is not supported"),
case VIR_DOMAIN_DEVICE_REDIRDEV:
case VIR_DOMAIN_DEVICE_NONE:
case VIR_DOMAIN_DEVICE_TPM:
+ case VIR_DOMAIN_DEVICE_PANIC:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("persistent detach of device '%s' is not supported"),
case VIR_DOMAIN_DEVICE_CHR:
case VIR_DOMAIN_DEVICE_NONE:
case VIR_DOMAIN_DEVICE_TPM:
+ case VIR_DOMAIN_DEVICE_PANIC:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("persistent update of device '%s' is not supported"),