提交 177ecaa5 编写于 作者: A Andrea Bolognani

qemu: Introduce qemuDomainMachineIsPSeries()

This new function checks for both the architecture and the
machine type, so we can use it instead of writing the same
checks over and over again.
上级 210acdb1
...@@ -1946,9 +1946,8 @@ qemuBuildDiskDriveCommandLine(virCommandPtr cmd, ...@@ -1946,9 +1946,8 @@ qemuBuildDiskDriveCommandLine(virCommandPtr cmd,
qemuDomainSecretInfoPtr secinfo = diskPriv->secinfo; qemuDomainSecretInfoPtr secinfo = diskPriv->secinfo;
/* PowerPC pseries based VMs do not support floppy device */ /* PowerPC pseries based VMs do not support floppy device */
if ((disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) && if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY &&
ARCH_IS_PPC64(def->os.arch) && qemuDomainMachineIsPSeries(def)) {
STRPREFIX(def->os.machine, "pseries")) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("PowerPC pseries machines do not support floppy device")); _("PowerPC pseries machines do not support floppy device"));
return -1; return -1;
...@@ -3701,8 +3700,7 @@ qemuBuildNVRAMCommandLine(virCommandPtr cmd, ...@@ -3701,8 +3700,7 @@ qemuBuildNVRAMCommandLine(virCommandPtr cmd,
if (!def->nvram) if (!def->nvram)
return 0; return 0;
if (ARCH_IS_PPC64(def->os.arch) && if (qemuDomainMachineIsPSeries(def)) {
STRPREFIX(def->os.machine, "pseries")) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVRAM)) { if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVRAM)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("nvram device is not supported by " _("nvram device is not supported by "
...@@ -8976,8 +8974,7 @@ qemuBuildPanicCommandLine(virCommandPtr cmd, ...@@ -8976,8 +8974,7 @@ qemuBuildPanicCommandLine(virCommandPtr cmd,
/* For pSeries guests, the firmware provides the same /* For pSeries guests, the firmware provides the same
* functionality as the pvpanic device. The address * functionality as the pvpanic device. The address
* cannot be configured by the user */ * cannot be configured by the user */
if (!ARCH_IS_PPC64(def->os.arch) || if (!qemuDomainMachineIsPSeries(def)) {
!STRPREFIX(def->os.machine, "pseries")) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("only pSeries guests support panic device " _("only pSeries guests support panic device "
"of model 'pseries'")); "of model 'pseries'"));
...@@ -9398,7 +9395,7 @@ qemuBuildSerialChrDeviceStr(char **deviceStr, ...@@ -9398,7 +9395,7 @@ qemuBuildSerialChrDeviceStr(char **deviceStr,
{ {
virBuffer cmd = VIR_BUFFER_INITIALIZER; 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 && if (serial->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
serial->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO) { serial->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO) {
virBufferAsprintf(&cmd, "spapr-vty,chardev=char%s", virBufferAsprintf(&cmd, "spapr-vty,chardev=char%s",
......
...@@ -1879,7 +1879,7 @@ qemuDomainDefAddDefaultDevices(virDomainDefPtr def, ...@@ -1879,7 +1879,7 @@ qemuDomainDefAddDefaultDevices(virDomainDefPtr def,
/* For pSeries guests, the firmware provides the same /* For pSeries guests, the firmware provides the same
* functionality as the pvpanic device, so automatically * functionality as the pvpanic device, so automatically
* add the definition if not already present */ * add the definition if not already present */
if (STRPREFIX(def->os.machine, "pseries")) if (qemuDomainMachineIsPSeries(def))
addPanicDevice = true; addPanicDevice = true;
break; break;
...@@ -2367,8 +2367,7 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, ...@@ -2367,8 +2367,7 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
if (dev->type == VIR_DOMAIN_DEVICE_PANIC && if (dev->type == VIR_DOMAIN_DEVICE_PANIC &&
dev->data.panic->model == VIR_DOMAIN_PANIC_MODEL_DEFAULT) { dev->data.panic->model == VIR_DOMAIN_PANIC_MODEL_DEFAULT) {
if (ARCH_IS_PPC64(def->os.arch) && if (qemuDomainMachineIsPSeries(def))
STRPREFIX(def->os.machine, "pseries"))
dev->data.panic->model = VIR_DOMAIN_PANIC_MODEL_PSERIES; dev->data.panic->model = VIR_DOMAIN_PANIC_MODEL_PSERIES;
else if (ARCH_IS_S390(def->os.arch)) else if (ARCH_IS_S390(def->os.arch))
dev->data.panic->model = VIR_DOMAIN_PANIC_MODEL_S390; dev->data.panic->model = VIR_DOMAIN_PANIC_MODEL_S390;
...@@ -4931,6 +4930,20 @@ qemuDomainMachineIsVirt(const virDomainDef *def) ...@@ -4931,6 +4930,20 @@ qemuDomainMachineIsVirt(const virDomainDef *def)
} }
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 static bool
qemuCheckMemoryDimmConflict(const virDomainDef *def, qemuCheckMemoryDimmConflict(const virDomainDef *def,
const virDomainMemoryDef *mem) const virDomainMemoryDef *mem)
......
...@@ -621,6 +621,7 @@ bool qemuDomainMachineIsI440FX(const virDomainDef *def); ...@@ -621,6 +621,7 @@ bool qemuDomainMachineIsI440FX(const virDomainDef *def);
bool qemuDomainMachineNeedsFDC(const virDomainDef *def); bool qemuDomainMachineNeedsFDC(const virDomainDef *def);
bool qemuDomainMachineIsS390CCW(const virDomainDef *def); bool qemuDomainMachineIsS390CCW(const virDomainDef *def);
bool qemuDomainMachineIsVirt(const virDomainDef *def); bool qemuDomainMachineIsVirt(const virDomainDef *def);
bool qemuDomainMachineIsPSeries(const virDomainDef *def);
bool qemuDomainMachineHasBuiltinIDE(const virDomainDef *def); bool qemuDomainMachineHasBuiltinIDE(const virDomainDef *def);
int qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver, int qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver,
......
...@@ -88,8 +88,7 @@ qemuDomainSetSCSIControllerModel(const virDomainDef *def, ...@@ -88,8 +88,7 @@ qemuDomainSetSCSIControllerModel(const virDomainDef *def,
return -1; return -1;
} }
} else { } else {
if (ARCH_IS_PPC64(def->os.arch) && if (qemuDomainMachineIsPSeries(def)) {
STRPREFIX(def->os.machine, "pseries")) {
*model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI; *model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI;
} else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) { } else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) {
*model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC; *model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC;
...@@ -253,8 +252,7 @@ qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def, ...@@ -253,8 +252,7 @@ qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def,
for (i = 0; i < def->nserials; i++) { for (i = 0; i < def->nserials; i++) {
if (def->serials[i]->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL && if (def->serials[i]->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
ARCH_IS_PPC64(def->os.arch) && qemuDomainMachineIsPSeries(def))
STRPREFIX(def->os.machine, "pseries"))
def->serials[i]->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO; def->serials[i]->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
if (qemuDomainAssignSpaprVIOAddress(def, &def->serials[i]->info, if (qemuDomainAssignSpaprVIOAddress(def, &def->serials[i]->info,
VIO_ADDR_SERIAL) < 0) VIO_ADDR_SERIAL) < 0)
...@@ -262,8 +260,7 @@ qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def, ...@@ -262,8 +260,7 @@ qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def,
} }
if (def->nvram) { if (def->nvram) {
if (ARCH_IS_PPC64(def->os.arch) && if (qemuDomainMachineIsPSeries(def))
STRPREFIX(def->os.machine, "pseries"))
def->nvram->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO; def->nvram->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
if (qemuDomainAssignSpaprVIOAddress(def, &def->nvram->info, if (qemuDomainAssignSpaprVIOAddress(def, &def->nvram->info,
VIO_ADDR_NVRAM) < 0) VIO_ADDR_NVRAM) < 0)
......
...@@ -654,8 +654,7 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt, ...@@ -654,8 +654,7 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
if (VIR_ALLOC(def->src) < 0) if (VIR_ALLOC(def->src) < 0)
goto error; goto error;
if ((ARCH_IS_PPC64(dom->os.arch) && if (qemuDomainMachineIsPSeries(dom))
dom->os.machine && STRPREFIX(dom->os.machine, "pseries")))
def->bus = VIR_DOMAIN_DISK_BUS_SCSI; def->bus = VIR_DOMAIN_DISK_BUS_SCSI;
else else
def->bus = VIR_DOMAIN_DISK_BUS_IDE; def->bus = VIR_DOMAIN_DISK_BUS_IDE;
...@@ -747,8 +746,7 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt, ...@@ -747,8 +746,7 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
} else if (STREQ(keywords[i], "if")) { } else if (STREQ(keywords[i], "if")) {
if (STREQ(values[i], "ide")) { if (STREQ(values[i], "ide")) {
def->bus = VIR_DOMAIN_DISK_BUS_IDE; def->bus = VIR_DOMAIN_DISK_BUS_IDE;
if ((ARCH_IS_PPC64(dom->os.arch) && if (qemuDomainMachineIsPSeries(dom)) {
dom->os.machine && STRPREFIX(dom->os.machine, "pseries"))) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("pseries systems do not support ide devices '%s'"), val); _("pseries systems do not support ide devices '%s'"), val);
goto error; goto error;
...@@ -1939,8 +1937,7 @@ qemuParseCommandLine(virCapsPtr caps, ...@@ -1939,8 +1937,7 @@ qemuParseCommandLine(virCapsPtr caps,
} }
if (STREQ(arg, "-cdrom")) { if (STREQ(arg, "-cdrom")) {
disk->device = VIR_DOMAIN_DISK_DEVICE_CDROM; disk->device = VIR_DOMAIN_DISK_DEVICE_CDROM;
if ((ARCH_IS_PPC64(def->os.arch) && if (qemuDomainMachineIsPSeries(def))
def->os.machine && STRPREFIX(def->os.machine, "pseries")))
disk->bus = VIR_DOMAIN_DISK_BUS_SCSI; disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
if (VIR_STRDUP(disk->dst, "hdc") < 0) if (VIR_STRDUP(disk->dst, "hdc") < 0)
goto error; goto error;
...@@ -1955,8 +1952,7 @@ qemuParseCommandLine(virCapsPtr caps, ...@@ -1955,8 +1952,7 @@ qemuParseCommandLine(virCapsPtr caps,
disk->bus = VIR_DOMAIN_DISK_BUS_IDE; disk->bus = VIR_DOMAIN_DISK_BUS_IDE;
else else
disk->bus = VIR_DOMAIN_DISK_BUS_SCSI; disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
if ((ARCH_IS_PPC64(def->os.arch) && if (qemuDomainMachineIsPSeries(def))
def->os.machine && STRPREFIX(def->os.machine, "pseries")))
disk->bus = VIR_DOMAIN_DISK_BUS_SCSI; disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
} }
if (VIR_STRDUP(disk->dst, arg + 1) < 0) if (VIR_STRDUP(disk->dst, arg + 1) < 0)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册