qemuDomainSecretInfoPtr secinfo = diskPriv->secinfo;
/* PowerPC pseries based VMs do not support floppy device */
- if ((disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) &&
- ARCH_IS_PPC64(def->os.arch) &&
- STRPREFIX(def->os.machine, "pseries")) {
+ if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY &&
+ qemuDomainMachineIsPSeries(def)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("PowerPC pseries machines do not support floppy device"));
return -1;
if (!def->nvram)
return 0;
- if (ARCH_IS_PPC64(def->os.arch) &&
- STRPREFIX(def->os.machine, "pseries")) {
+ if (qemuDomainMachineIsPSeries(def)) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVRAM)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("nvram device is not supported by "
/* For pSeries guests, the firmware provides the same
* functionality as the pvpanic device. The address
* cannot be configured by the user */
- if (!ARCH_IS_PPC64(def->os.arch) ||
- !STRPREFIX(def->os.machine, "pseries")) {
+ if (!qemuDomainMachineIsPSeries(def)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("only pSeries guests support panic device "
"of model 'pseries'"));
{
virBuffer cmd = VIR_BUFFER_INITIALIZER;
- if (ARCH_IS_PPC64(def->os.arch) && STRPREFIX(def->os.machine, "pseries")) {
+ if (qemuDomainMachineIsPSeries(def)) {
if (serial->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
serial->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO) {
virBufferAsprintf(&cmd, "spapr-vty,chardev=char%s",
/* For pSeries guests, the firmware provides the same
* functionality as the pvpanic device, so automatically
* add the definition if not already present */
- if (STRPREFIX(def->os.machine, "pseries"))
+ if (qemuDomainMachineIsPSeries(def))
addPanicDevice = true;
break;
if (dev->type == VIR_DOMAIN_DEVICE_PANIC &&
dev->data.panic->model == VIR_DOMAIN_PANIC_MODEL_DEFAULT) {
- if (ARCH_IS_PPC64(def->os.arch) &&
- STRPREFIX(def->os.machine, "pseries"))
+ if (qemuDomainMachineIsPSeries(def))
dev->data.panic->model = VIR_DOMAIN_PANIC_MODEL_PSERIES;
else if (ARCH_IS_S390(def->os.arch))
dev->data.panic->model = VIR_DOMAIN_PANIC_MODEL_S390;
}
+bool
+qemuDomainMachineIsPSeries(const virDomainDef *def)
+{
+ if (!ARCH_IS_PPC64(def->os.arch))
+ return false;
+
+ if (STRNEQ(def->os.machine, "pseries") &&
+ !STRPREFIX(def->os.machine, "pseries-"))
+ return false;
+
+ return true;
+}
+
+
static bool
qemuCheckMemoryDimmConflict(const virDomainDef *def,
const virDomainMemoryDef *mem)
bool qemuDomainMachineNeedsFDC(const virDomainDef *def);
bool qemuDomainMachineIsS390CCW(const virDomainDef *def);
bool qemuDomainMachineIsVirt(const virDomainDef *def);
+bool qemuDomainMachineIsPSeries(const virDomainDef *def);
bool qemuDomainMachineHasBuiltinIDE(const virDomainDef *def);
int qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver,
return -1;
}
} else {
- if (ARCH_IS_PPC64(def->os.arch) &&
- STRPREFIX(def->os.machine, "pseries")) {
+ if (qemuDomainMachineIsPSeries(def)) {
*model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI;
} else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) {
*model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC;
for (i = 0; i < def->nserials; i++) {
if (def->serials[i]->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
- ARCH_IS_PPC64(def->os.arch) &&
- STRPREFIX(def->os.machine, "pseries"))
+ qemuDomainMachineIsPSeries(def))
def->serials[i]->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
if (qemuDomainAssignSpaprVIOAddress(def, &def->serials[i]->info,
VIO_ADDR_SERIAL) < 0)
}
if (def->nvram) {
- if (ARCH_IS_PPC64(def->os.arch) &&
- STRPREFIX(def->os.machine, "pseries"))
+ if (qemuDomainMachineIsPSeries(def))
def->nvram->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
if (qemuDomainAssignSpaprVIOAddress(def, &def->nvram->info,
VIO_ADDR_NVRAM) < 0)
if (VIR_ALLOC(def->src) < 0)
goto error;
- if ((ARCH_IS_PPC64(dom->os.arch) &&
- dom->os.machine && STRPREFIX(dom->os.machine, "pseries")))
+ if (qemuDomainMachineIsPSeries(dom))
def->bus = VIR_DOMAIN_DISK_BUS_SCSI;
else
def->bus = VIR_DOMAIN_DISK_BUS_IDE;
} else if (STREQ(keywords[i], "if")) {
if (STREQ(values[i], "ide")) {
def->bus = VIR_DOMAIN_DISK_BUS_IDE;
- if ((ARCH_IS_PPC64(dom->os.arch) &&
- dom->os.machine && STRPREFIX(dom->os.machine, "pseries"))) {
+ if (qemuDomainMachineIsPSeries(dom)) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("pseries systems do not support ide devices '%s'"), val);
goto error;
}
if (STREQ(arg, "-cdrom")) {
disk->device = VIR_DOMAIN_DISK_DEVICE_CDROM;
- if ((ARCH_IS_PPC64(def->os.arch) &&
- def->os.machine && STRPREFIX(def->os.machine, "pseries")))
+ if (qemuDomainMachineIsPSeries(def))
disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
if (VIR_STRDUP(disk->dst, "hdc") < 0)
goto error;
disk->bus = VIR_DOMAIN_DISK_BUS_IDE;
else
disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
- if ((ARCH_IS_PPC64(def->os.arch) &&
- def->os.machine && STRPREFIX(def->os.machine, "pseries")))
+ if (qemuDomainMachineIsPSeries(def))
disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
}
if (VIR_STRDUP(disk->dst, arg + 1) < 0)