}
-static int
+static void
qemuBuildDomainLoaderCommandLine(virCommandPtr cmd,
- virDomainDefPtr def,
- virQEMUCapsPtr qemuCaps)
+ virDomainDefPtr def)
{
- int ret = -1;
virDomainLoaderDefPtr loader = def->os.loader;
virBuffer buf = VIR_BUFFER_INITIALIZER;
int unit = 0;
if (!loader)
- return 0;
+ return;
switch ((virDomainLoader) loader->type) {
case VIR_DOMAIN_LOADER_TYPE_ROM:
break;
case VIR_DOMAIN_LOADER_TYPE_PFLASH:
- if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NO_ACPI) &&
- def->features[VIR_DOMAIN_FEATURE_ACPI] != VIR_TRISTATE_SWITCH_ON) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("ACPI must be enabled in order to use UEFI"));
- goto cleanup;
- }
if (loader->secure == VIR_TRISTATE_BOOL_YES) {
virCommandAddArgList(cmd,
break;
}
- ret = 0;
- cleanup:
virBufferFreeAndReset(&buf);
- return ret;
}
if (qemuBuildCpuCommandLine(cmd, driver, def, qemuCaps) < 0)
goto error;
- if (qemuBuildDomainLoaderCommandLine(cmd, def, qemuCaps) < 0)
- goto error;
+ qemuBuildDomainLoaderCommandLine(cmd, def);
if (!migrateURI && !snapshot && qemuDomainAlignMemorySizes(def) < 0)
goto error;
goto cleanup;
}
+ /* On x86, UEFI requires ACPI */
+ if (def->os.loader &&
+ def->os.loader->type == VIR_DOMAIN_LOADER_TYPE_PFLASH &&
+ ARCH_IS_X86(def->os.arch) &&
+ def->features[VIR_DOMAIN_FEATURE_ACPI] != VIR_TRISTATE_SWITCH_ON) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("UEFI requires ACPI on this architecture"));
+ goto cleanup;
+ }
+
+ /* On aarch64, ACPI requires UEFI */
+ if (def->features[VIR_DOMAIN_FEATURE_ACPI] == VIR_TRISTATE_SWITCH_ON &&
+ def->os.arch == VIR_ARCH_AARCH64 &&
+ (!def->os.loader ||
+ def->os.loader->type != VIR_DOMAIN_LOADER_TYPE_PFLASH)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("ACPI requires UEFI on this architecture"));
+ goto cleanup;
+ }
+
if (def->os.loader &&
def->os.loader->secure == VIR_TRISTATE_BOOL_YES) {
/* These are the QEMU implementation limitations. But we
-nodefconfig \
-nodefaults \
-monitor unix:/tmp/lib/domain--1-aarch64test/monitor.sock,server,nowait \
+-no-acpi \
-boot c \
-kernel /aarch64.kernel \
-initrd /aarch64.initrd \
<boot dev='hd'/>
</os>
<features>
- <acpi/>
<apic/>
<pae/>
<gic version='2'/>
-nodefconfig \
-nodefaults \
-monitor unix:/tmp/lib/domain--1-aarch64test/monitor.sock,server,nowait \
+-no-acpi \
-boot c \
-drive file=/aarch64.raw,format=raw,if=none,id=drive-virtio-disk0 \
-device virtio-blk-device,drive=drive-virtio-disk0,id=virtio-disk0
<type arch="aarch64" machine="virt">hvm</type>
</os>
<features>
- <acpi/>
<apic/>
<pae/>
</features>
-nodefconfig \
-nodefaults \
-monitor unix:/tmp/lib/domain--1-aarch64-vgpu/monitor.sock,server,nowait \
+-no-acpi \
-device ioh3420,port=0x8,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,\
addr=0x1 \
-device ioh3420,port=0x9,chassis=2,id=pci.2,bus=pcie.0,multifunction=on,\
<os>
<type arch='aarch64' machine='virt'>hvm</type>
</os>
- <features>
- <acpi/>
- </features>
<cpu mode='custom' match='exact'>
<model fallback='allow'>cortex-a57</model>
</cpu>
-nodefconfig \
-nodefaults \
-monitor unix:/tmp/lib/domain--1-aarch64test/monitor.sock,server,nowait \
+-no-acpi \
-boot c \
-kernel /aarch64.kernel \
-initrd /aarch64.initrd \
<cmdline>earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait</cmdline>
</os>
<features>
- <acpi/>
<apic/>
<pae/>
</features>
-nodefaults \
-monitor unix:/tmp/lib/domain--1-aarch64-virt-default/monitor.sock,server,\
nowait \
+-no-acpi \
-boot c \
-kernel /aarch64.kernel \
-initrd /aarch64.initrd \
<memory>1048576</memory>
<currentMemory>1048576</currentMemory>
<vcpu>1</vcpu>
- <features>
- <acpi/>
- </features>
<cpu match='exact'>
<model>cortex-a53</model>
</cpu>
-nodefconfig \
-nodefaults \
-monitor unix:/tmp/lib/domain--1-aarch64test/monitor.sock,server,nowait \
+-no-acpi \
-boot c \
-kernel /aarch64.kernel \
-initrd /aarch64.initrd \
<cmdline>earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait</cmdline>
</os>
<features>
- <acpi/>
<apic/>
<pae/>
</features>
-nodefconfig \
-nodefaults \
-monitor unix:/tmp/lib/domain--1-aarch64test/monitor.sock,server,nowait \
+-no-acpi \
-boot c \
-kernel /aarch64.kernel \
-initrd /aarch64.initrd \
<cmdline>earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait</cmdline>
</os>
<features>
- <acpi/>
<apic/>
<pae/>
</features>
-nodefconfig \
-nodefaults \
-monitor unix:/tmp/lib/domain--1-aarch64test/monitor.sock,server,nowait \
+-no-acpi \
-boot c \
-kernel /aarch64.kernel \
-initrd /aarch64.initrd \
<boot dev='hd'/>
</os>
<features>
- <acpi/>
<apic/>
<pae/>
</features>
-nodefconfig \
-nodefaults \
-monitor unix:/tmp/lib/domain--1-aarch64test/monitor.sock,server,nowait \
+-no-acpi \
-boot c \
-kernel /aarch64.kernel \
-initrd /aarch64.initrd \
<cmdline>earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait</cmdline>
</os>
<features>
- <acpi/>
<apic/>
<pae/>
</features>
<boot dev='hd'/>
</os>
<features>
- <acpi/>
<apic/>
<pae/>
<gic version='2'/>
<type arch='aarch64' machine='virt'>hvm</type>
</os>
<features>
- <acpi/>
<gic version='2'/>
</features>
<cpu mode='custom' match='exact' check='none'>
<boot dev='hd'/>
</os>
<features>
- <acpi/>
<apic/>
<pae/>
<gic version='2'/>
<boot dev='hd'/>
</os>
<features>
- <acpi/>
<apic/>
<pae/>
<gic version='2'/>