]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
spapr: make pseries-2.11 the default machine type
authorGreg Kurz <groug@kaod.org>
Wed, 20 Jun 2018 12:54:15 +0000 (14:54 +0200)
committerMichael Roth <mdroth@linux.vnet.ibm.com>
Thu, 21 Jun 2018 01:44:16 +0000 (20:44 -0500)
The spapr capability framework was introduced in QEMU 2.12. It allows
to have an explicit control on how host features are exposed to the
guest. This is especially needed to handle migration between hetero-
geneous hosts (eg, POWER8 to POWER9). It is also used to expose fixes/
workarounds against speculative execution vulnerabilities to guests.
The framework was hence backported to QEMU 2.11.1, especially these
commits:

0fac4aa93074 spapr: Add pseries-2.12 machine type
9070f408f491 spapr: Treat Hardware Transactional Memory (HTM) as an
 optional capability

0fac4aa93074 has the confusing effect of making pseries-2.12 the default
machine type for QEMU 2.11.1, instead of the expected pseries-2.11. This
patch changes the default machine back to pseries-2.11.

Unfortunately, 9070f408f491 enforces the HTM capability for pseries-2.11
to be enabled by default, ie, when not passing cap-htm on the command
line. This breaks several 'make check' testcases that run qemu-system-ppc64
with TCG.

The only sane way to fix this is to adapt the impacted testcases so that
they all pass cap-htm=off in this case. This patch does that as well.

Signed-off-by: Greg Kurz <groug@kaod.org>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
hw/ppc/spapr.c
tests/boot-serial-test.c
tests/migration-test.c
tests/prom-env-test.c
tests/pxe-test.c

index 1a2dd1f597d9f3b55c8429c61917012af386b52d..6499a867520f8df6189095dec49c7de5684e4bc5 100644 (file)
@@ -3820,7 +3820,7 @@ static void spapr_machine_2_12_class_options(MachineClass *mc)
     /* Defaults for the latest behaviour inherited from the base class */
 }
 
-DEFINE_SPAPR_MACHINE(2_12, "2.12", true);
+DEFINE_SPAPR_MACHINE(2_12, "2.12", false);
 
 /*
  * pseries-2.11
@@ -3842,7 +3842,7 @@ static void spapr_machine_2_11_class_options(MachineClass *mc)
     SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_11);
 }
 
-DEFINE_SPAPR_MACHINE(2_11, "2.11", false);
+DEFINE_SPAPR_MACHINE(2_11, "2.11", true);
 
 /*
  * pseries-2.10
index c935d69824bda59f2f0888e70cba5a8da5d63a2c..98c5462377f8a4d0aca7681d8ea3b7fddfe19242 100644 (file)
@@ -73,18 +73,22 @@ static void test_machine(const void *data)
     const testdef_t *test = data;
     char tmpname[] = "/tmp/qtest-boot-serial-XXXXXX";
     int fd;
+    const char *machine_props;
 
     fd = mkstemp(tmpname);
     g_assert(fd != -1);
 
+    machine_props = strcmp(test->machine, "pseries") == 0 ? ",cap-htm=off" : "";
+
     /*
      * Make sure that this test uses tcg if available: It is used as a
      * fast-enough smoketest for that.
      */
-    global_qtest = qtest_startf("-M %s,accel=tcg:kvm "
+    global_qtest = qtest_startf("-M %s%s,accel=tcg:kvm "
                                 "-chardev file,id=serial0,path=%s "
                                 "-no-shutdown -serial chardev:serial0 %s",
-                                test->machine, tmpname, test->extra);
+                                test->machine, machine_props, tmpname,
+                                test->extra);
     unlink(tmpname);
 
     check_guest_output(test, fd);
index be598d3257ba1e2aea02a0aa14745f44d6f1687a..906d29b3824140c610c11f16f533d4cd67ab94b4 100644 (file)
@@ -460,12 +460,12 @@ static void test_migrate_start(QTestState **from, QTestState **to,
         /* On ppc64, the test only works with kvm-hv, but not with kvm-pr */
         accel = access("/sys/module/kvm_hv", F_OK) ? "tcg" : "kvm:tcg";
         init_bootfile_ppc(bootpath);
-        cmd_src = g_strdup_printf("-machine accel=%s -m 256M"
+        cmd_src = g_strdup_printf("-machine accel=%s,cap-htm=off -m 256M"
                                   " -name pcsource,debug-threads=on"
                                   " -serial file:%s/src_serial"
                                   " -drive file=%s,if=pflash,format=raw",
                                   accel, tmpfs, bootpath);
-        cmd_dst = g_strdup_printf("-machine accel=%s -m 256M"
+        cmd_dst = g_strdup_printf("-machine accel=%s,cap-htm=off -m 256M"
                                   " -name pcdest,debug-threads=on"
                                   " -serial file:%s/dest_serial"
                                   " -incoming %s",
index 8c867e631ab66967d7124d94f83fbdab4b9b73b1..f6946090d183d00ec9ca3a97d7e732389ef3a204 100644 (file)
@@ -45,14 +45,16 @@ static void check_guest_memory(void)
 static void test_machine(const void *machine)
 {
     const char *extra_args;
+    const char *extra_props;
 
     /* The pseries firmware boots much faster without the default devices */
     extra_args = strcmp(machine, "pseries") == 0 ? "-nodefaults" : "";
+    extra_props = strcmp(machine, "pseries") == 0 ? ",cap-htm=off" : "";
 
-    global_qtest = qtest_startf("-M %s,accel=tcg %s "
+    global_qtest = qtest_startf("-M %s%s,accel=tcg %s "
                                 "-prom-env 'use-nvramrc?=true' "
                                 "-prom-env 'nvramrc=%x %x l!' ",
-                                (const char *)machine, extra_args,
+                                (const char *)machine, extra_props, extra_args,
                                 MAGIC, ADDRESS);
     check_guest_memory();
     qtest_quit(global_qtest);
index 937f29e631937fef6d857d12453bfbc6b0356baa..f3a65bd80cb179e23adc44732118d920999982f8 100644 (file)
@@ -25,11 +25,15 @@ static char disk[] = "tests/pxe-test-disk-XXXXXX";
 static void test_pxe_one(const char *params, bool ipv6)
 {
     char *args;
+    const char *machine_props;
 
-    args = g_strdup_printf("-machine accel=kvm:tcg -nodefaults -boot order=n "
+    machine_props =
+        strcmp(qtest_get_arch(), "ppc64") == 0 ? ",cap-htm=off" : "";
+
+    args = g_strdup_printf("-machine accel=kvm:tcg%s -nodefaults -boot order=n "
                            "-netdev user,id=" NETNAME ",tftp=./,bootfile=%s,"
-                           "ipv4=%s,ipv6=%s %s", disk, ipv6 ? "off" : "on",
-                           ipv6 ? "on" : "off", params);
+                           "ipv4=%s,ipv6=%s %s", machine_props, disk,
+                           ipv6 ? "off" : "on", ipv6 ? "on" : "off", params);
 
     qtest_start(args);
     boot_sector_test();