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: Greg Kurz
Subject: Re: [Qemu-devel] [PATCH v2 for-2.11.2] spapr: make pseries-2.11 the default machine type
Date: Thu, 21 Jun 2018 15:23:21 +0200

On Thu, 21 Jun 2018 11:18:09 +1000
David Gibson <address@hidden> wrote:

> 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.
> 

Well... it is indeed weird but I don't think it hurts. Also, people
may have started using pseries-2.12 with QEMU 2.11.1 (I seem to
remember Mike told me about something like this the other day)...

> > 
> > 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();
> >   
> 

Attachment: pgp1OYa4LTG70.pgp
Description: OpenPGP digital signature


reply via email to

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