summaryrefslogtreecommitdiffstats
path: root/hw
diff options
context:
space:
mode:
authorDaniel Henrique Barboza2021-12-17 17:57:13 +0100
committerCédric Le Goater2021-12-17 17:57:13 +0100
commitebe6c3fab8614a26130f7c72dd35ecede11a0f71 (patch)
tree2771954c79a65a07b1f71fc81996855c45f8cef7 /hw
parentdocs: Minor updates on the powernv documentation. (diff)
downloadqemu-ebe6c3fab8614a26130f7c72dd35ecede11a0f71.tar.gz
qemu-ebe6c3fab8614a26130f7c72dd35ecede11a0f71.tar.xz
qemu-ebe6c3fab8614a26130f7c72dd35ecede11a0f71.zip
ppc/pnv.c: add a friendly warning when accel=kvm is used
If one tries to use -machine powernv9,accel=kvm in a Power9 host, a cryptic error will be shown: qemu-system-ppc64: Register sync failed... If you're using kvm-hv.ko, only "-cpu host" is possible qemu-system-ppc64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument Appending '-cpu host' will throw another error: qemu-system-ppc64: invalid chip model 'host' for powernv9 machine The root cause is that in IBM PowerPC we have different specs for the bare-metal and the guests. The bare-metal follows OPAL, the guests follow PAPR. The kernel KVM modules presented in the ppc kernels implements PAPR. This means that we can't use KVM accel when using the powernv machine, which is the emulation of the bare-metal host. All that said, let's give a more informative error in this case. Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Message-Id: <20211130133153.444601-2-danielhb413@gmail.com> Signed-off-by: Cédric Le Goater <clg@kaod.org>
Diffstat (limited to 'hw')
-rw-r--r--hw/ppc/pnv.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index 71e45515f1..e5b87e8730 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -742,6 +742,11 @@ static void pnv_init(MachineState *machine)
DriveInfo *pnor = drive_get(IF_MTD, 0, 0);
DeviceState *dev;
+ if (kvm_enabled()) {
+ error_report("The powernv machine does not work with KVM acceleration");
+ exit(EXIT_FAILURE);
+ }
+
/* allocate RAM */
if (machine->ram_size < mc->default_ram_size) {
char *sz = size_to_str(mc->default_ram_size);