qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 for-2.11.2] spapr: make pseries-2.11 the defa


From: David Gibson
Subject: Re: [Qemu-devel] [PATCH v2 for-2.11.2] spapr: make pseries-2.11 the default machine type
Date: Thu, 21 Jun 2018 11:18:09 +1000
User-agent: Mutt/1.10.0 (2018-05-17)

On Wed, Jun 20, 2018 at 02:54:15PM +0200, Greg Kurz wrote:
> 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 <address@hidden>
> ---
> v2: - have the testcases to pass cap-htm=off instead of violating the
>       capabilities logic.
> 
> Upstream doesn't need anything like that since newer pseries machine types
> start with HTM disabled by default. This is really a oneshot fix for 2.11.2,
> and I've tried to make it as small as possible.
> 
> This is a full replacement of the previous version. It is based on Mike's
> staging tree for 2.11:

Thanks for fixing this up

Reviewed-by: David Gibson <address@hidden>

Btw, 2.11.z should probably have the 2.12 machine type removed
entirely, as well as (obviously) not being the default.  Not within
scope for this patch, though.

> 
> https://github.com/mdroth/qemu/commits/stable-2.11-staging 72cc467aabd1a2
> ---
>  hw/ppc/spapr.c           |    4 ++--
>  tests/boot-serial-test.c |    8 ++++++--
>  tests/migration-test.c   |    4 ++--
>  tests/prom-env-test.c    |    6 ++++--
>  tests/pxe-test.c         |   10 +++++++---
>  5 files changed, 21 insertions(+), 11 deletions(-)
> 
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 1a2dd1f597d9..6499a867520f 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -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
> diff --git a/tests/boot-serial-test.c b/tests/boot-serial-test.c
> index c935d69824bd..98c5462377f8 100644
> --- a/tests/boot-serial-test.c
> +++ b/tests/boot-serial-test.c
> @@ -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);
> diff --git a/tests/migration-test.c b/tests/migration-test.c
> index be598d3257ba..906d29b38241 100644
> --- a/tests/migration-test.c
> +++ b/tests/migration-test.c
> @@ -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",
> diff --git a/tests/prom-env-test.c b/tests/prom-env-test.c
> index 8c867e631ab6..f6946090d183 100644
> --- a/tests/prom-env-test.c
> +++ b/tests/prom-env-test.c
> @@ -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);
> diff --git a/tests/pxe-test.c b/tests/pxe-test.c
> index 937f29e63193..f3a65bd80cb1 100644
> --- a/tests/pxe-test.c
> +++ b/tests/pxe-test.c
> @@ -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();
> 

-- 
David Gibson                    | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
                                | _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]