1. 19 4月, 2019 1 次提交
  2. 18 4月, 2019 4 次提交
  3. 17 4月, 2019 1 次提交
  4. 12 4月, 2019 1 次提交
    • G
      spapr_pci: Fix broken naming of PCI bus · 4560116e
      Greg Kurz 提交于
      Recent commit 5cf0d326 fixed a regression which was preventing the
      guest to access the extended config space of a PCIe device. This was
      done by introducing a new PCI bus subtype for PAPR. The original fix
      was causing PCI busses to be named "spapr-pci-host-bridge-root-bus.N"
      instead of "pci.N", which was making upper layers unhappy of course.
      This got worked around by hardcoding the PCI bus name to "pci.0", but
      this only works for the default PHB. And we're now hitting:
      
      # qemu-system-ppc64 \
                   -device spapr-pci-host-bridge,index=1 \
                   -device e1000e,bus=pci.0 \
                   -device e1000e,bus=pci.1
      qemu-system-ppc64: -device e1000e,bus=pci.1: Bus 'pci.1' not found
      
      David already posted some patches [1] to control PCI extended config
      space accesses with a new flag in the base PCI bus class instead of
      subtyping. These patches are a bit more intrusive though, and
      are targetted for 4.1.
      
      When no name is passed to pci_register_bus(), the core device code
      generates a lowercase name based on the QOM typename. The typename
      for the base PCI bus class is "PCI", hence the "pci.0", "pci.1"
      bus names. Rename the type of the PAPR PCI bus to "pci", so that
      the QOM code can generate proper names. This is a hack but it is
      enough to fix the regression. And all this will be reworked properly
      in 4.1.
      
      [1] https://patchwork.ozlabs.org/project/qemu-devel/list/?series=100486
      
      Fixes: 5cf0d326Signed-off-by: NGreg Kurz <groug@kaod.org>
      Message-Id: <155500034416.646888.1307366522340665522.stgit@bahia.lab.toulouse-stg.fr.ibm.com>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      4560116e
  5. 10 4月, 2019 1 次提交
    • T
      hw/i386/pc: Fix crash when hot-plugging nvdimm on older machine types · ae909496
      Thomas Huth 提交于
      QEMU currently crashes when you try to hot-plug an "nvdimm" device
      on older machine types:
      
      $ qemu-system-x86_64 -monitor stdio -M pc-1.1
      QEMU 3.1.92 monitor - type 'help' for more information
      (qemu) device_add nvdimm,id=nvdimmn1
      qemu-system-x86_64: /home/thuth/devel/qemu/util/error.c:57: error_setv:
       Assertion `*errp == ((void *)0)' failed.
      Aborted (core dumped)
      
      The call to hotplug_handler_pre_plug() in pc_memory_pre_plug() has been
      added recently before the check whether nvdimm is enabled. It should
      be done after the check. And while we're at it, also check the errp
      after the hotplug_handler_pre_plug(), otherwise errors are silently
      ignored here.
      
      Fixes: 9040e6dfSigned-off-by: NThomas Huth <thuth@redhat.com>
      Message-Id: <20190407092314.11066-1-thuth@redhat.com>
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      ae909496
  6. 09 4月, 2019 2 次提交
  7. 05 4月, 2019 3 次提交
    • A
      riscv: plic: Log guest errors · 79bcac25
      Alistair Francis 提交于
      Instead of using error_report() to print guest errors let's use
      qemu_log_mask(LOG_GUEST_ERROR,...) to log the error.
      Signed-off-by: NAlistair Francis <alistair.francis@wdc.com>
      Signed-off-by: NPalmer Dabbelt <palmer@sifive.com>
      79bcac25
    • A
      riscv: plic: Fix incorrect irq calculation · 0feb4a71
      Alistair Francis 提交于
      This patch fixes four different things, to maintain bisectability they
      have been merged into a single patch. The following fixes are below:
      
      sifive_plic: Fix incorrect irq calculation
      The irq is incorrectly calculated to be off by one. It has worked in the
      past as the priority_base offset has also been set incorrectly. We are
      about to fix the priority_base offset so first first the irq
      calculation.
      
      sifive_u: Fix PLIC priority base offset and numbering
      According to the FU540 manual the PLIC source priority address starts at
      an offset of 0x04 and not 0x00. The same manual also specifies that the
      PLIC only has 53 source priorities. Fix these two incorrect header
      files.
      
      We also need to over extend the plic_gpios[] array as the PLIC sources
      count from 1 and not 0.
      
      riscv: sifive_e: Fix PLIC priority base offset
      According to the FE31 manual the PLIC source priority address starts at
      an offset of 0x04 and not 0x00.
      
      riscv: virt: Fix PLIC priority base offset
      Update the virt offsets based on the newly updated SiFive U and SiFive E
      offsets.
      Signed-off-by: NAlistair Francis <alistair.francis@wdc.com>
      Signed-off-by: NPalmer Dabbelt <palmer@sifive.com>
      0feb4a71
    • P
      xen-block: scale sector based quantities correctly · 2bcd05cf
      Paul Durrant 提交于
      The Xen blkif protocol requires that sector based quantities should be
      interpreted strictly as multiples of 512 bytes. Specifically:
      
      "first_sect and last_sect in blkif_request_segment, as well as
      sector_number in blkif_request, are always expressed in 512-byte units."
      
      Commit fcab2b46 "xen: add header and build dataplane/xen-block.c"
      incorrectly modified behaviour to use the block device logical_block_size
      property as the scale, instead of correctly shifting values by the
      hardcoded BDRV_SECTOR_BITS (and hence scaling them to 512 byte units).
      This patch undoes that change and restores compliance with the spec.
      
      Furthermore, this patch also restores the original xen_disk behaviour
      of advertizing a hardcoded 'sector-size' value of 512 in xenstore and
      scaling 'sectors' accordingly. The realize() method is also modified to
      fail if logical_block_size is set to anything other than 512.
      Signed-off-by: NPaul Durrant <paul.durrant@citrix.com>
      Reviewed-by: NAnthony PERARD <anthony.perard@citrix.com>
      Message-Id: <20190401121719.27208-1-paul.durrant@citrix.com>
      Signed-off-by: NAnthony PERARD <anthony.perard@citrix.com>
      2bcd05cf
  8. 04 4月, 2019 1 次提交
    • P
      xen-block: only advertize discard to the frontend when it is enabled... · 15f08450
      Paul Durrant 提交于
      ...and properly enable it when synthesizing a drive.
      
      The Xen toolstack sets 'discard-enable' to '1' in xenstore when it wants
      to enable discard on a specified image. The code in
      xen_block_drive_create() correctly parses this and uses it to set
      'discard' to 'unmap' for the file_layer, but fails to do the same for the
      driver_layer (which effectively disables it). Meanwhile the code in
      xen_block_realize() advertizes discard support to the frontend in the
      default case (because conf->discard_granularity defaults to -1), even when
      the underlying image may not handle it.
      
      This patch adds the missing option to the driver_layer in
      xen_block_driver_create() and checks whether BDRV_O_UNMAP is actually
      set on the block device before advertizing discard to the frontend.
      In the case that discard is supported it also makes sure that the
      granularity is set to the physical block size.
      Signed-off-by: NPaul Durrant <paul.durrant@citrix.com>
      Reviewed-by: NAnthony PERARD <anthony.perard@citrix.com>
      Message-Id: <20190320142825.24565-1-paul.durrant@citrix.com>
      Signed-off-by: NAnthony PERARD <anthony.perard@citrix.com>
      15f08450
  9. 03 4月, 2019 4 次提交
    • D
      hw/s390x/3270-ccw: avoid taking address of fields in packed struct · 7357b221
      Daniel P. Berrangé 提交于
      Compiling with GCC 9 complains
      
      hw/s390x/3270-ccw.c: In function ‘emulated_ccw_3270_cb’:
      hw/s390x/3270-ccw.c:81:19: error: taking address of packed member of ‘struct SCHIB’ may result in an unaligned pointer value [-Werror=address-of-packed-member]
         81 |         SCSW *s = &sch->curr_status.scsw;
            |                   ^~~~~~~~~~~~~~~~~~~~~~
      
      This local variable is only present to save a little bit of
      typing when setting the field later. Get rid of this to avoid
      the warning about unaligned accesses.
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      Message-Id: <20190329111104.17223-15-berrange@redhat.com>
      Reviewed-by: NDavid Hildenbrand <david@redhat.com>
      Reviewed-by: NThomas Huth <thuth@redhat.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      7357b221
    • D
      hw/s390x/ipl: avoid taking address of fields in packed struct · 5d45a332
      Daniel P. Berrangé 提交于
      Compiling with GCC 9 complains
      
      hw/s390x/ipl.c: In function ‘s390_ipl_set_boot_menu’:
      hw/s390x/ipl.c:256:25: warning: taking address of packed member of ‘struct QemuIplParameters’ may result in an unaligned pointer value [-Waddress-of-packed-member]
        256 |     uint32_t *timeout = &ipl->qipl.boot_menu_timeout;
            |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      This local variable is only present to save a little bit of
      typing when setting the field later. Get rid of this to avoid
      the warning about unaligned accesses.
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      Message-Id: <20190329111104.17223-14-berrange@redhat.com>
      Reviewed-by: NDavid Hildenbrand <david@redhat.com>
      Reviewed-by: NThomas Huth <thuth@redhat.com>
      Reviewed-by: NFarhan Ali <alifm@linux.ibm.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      5d45a332
    • D
      hw/s390/css: avoid taking address members in packed structs · bea0279b
      Daniel P. Berrangé 提交于
      The GCC 9 compiler complains about many places in s390 code
      that take the address of members of the 'struct SCHIB' which
      is marked packed:
      
      hw/s390x/css.c: In function ‘sch_handle_clear_func’:
      hw/s390x/css.c:698:15: warning: taking address of packed member of ‘struct SCHIB’ may result in an unaligned pointer val\
      ue [-Waddress-of-packed-member]
        698 |     PMCW *p = &sch->curr_status.pmcw;
            |               ^~~~~~~~~~~~~~~~~~~~~~
      hw/s390x/css.c:699:15: warning: taking address of packed member of ‘struct SCHIB’ may result in an unaligned pointer val\
      ue [-Waddress-of-packed-member]
        699 |     SCSW *s = &sch->curr_status.scsw;
            |               ^~~~~~~~~~~~~~~~~~~~~~
      
      ...snip many more...
      
      Almost all of these are just done for convenience to avoid
      typing out long variable/field names when referencing struct
      members. We can get most of this convenience by taking the
      address of the 'struct SCHIB' instead, avoiding triggering
      the compiler warnings.
      
      In a couple of places we copy via a local variable which is
      a technique already applied elsewhere in s390 code for this
      problem.
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      Message-Id: <20190329111104.17223-13-berrange@redhat.com>
      Reviewed-by: NThomas Huth <thuth@redhat.com>
      Reviewed-by: NHalil Pasic <pasic@linux.ibm.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      bea0279b
    • D
      hw/vfio/ccw: avoid taking address members in packed structs · e1d0b372
      Daniel P. Berrangé 提交于
      The GCC 9 compiler complains about many places in s390 code
      that take the address of members of the 'struct SCHIB' which
      is marked packed:
      
      hw/vfio/ccw.c: In function ‘vfio_ccw_io_notifier_handler’:
      hw/vfio/ccw.c:133:15: warning: taking address of packed member of ‘struct SCHIB’ may result in an unaligned pointer value \
      [-Waddress-of-packed-member]
        133 |     SCSW *s = &sch->curr_status.scsw;
            |               ^~~~~~~~~~~~~~~~~~~~~~
      hw/vfio/ccw.c:134:15: warning: taking address of packed member of ‘struct SCHIB’ may result in an unaligned pointer value \
      [-Waddress-of-packed-member]
        134 |     PMCW *p = &sch->curr_status.pmcw;
            |               ^~~~~~~~~~~~~~~~~~~~~~
      
      ...snip many more...
      
      Almost all of these are just done for convenience to avoid
      typing out long variable/field names when referencing struct
      members. We can get most of this convenience by taking the
      address of the 'struct SCHIB' instead, avoiding triggering
      the compiler warnings.
      
      In a couple of places we copy via a local variable which is
      a technique already applied elsewhere in s390 code for this
      problem.
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      Message-Id: <20190329111104.17223-12-berrange@redhat.com>
      Reviewed-by: NEric Farman <farman@linux.ibm.com>
      Reviewed-by: NHalil Pasic <pasic@linux.ibm.com>
      Reviewed-by: NFarhan Ali <alifm@linux.ibm.com>
      Signed-off-by: NCornelia Huck <cohuck@redhat.com>
      e1d0b372
  10. 02 4月, 2019 8 次提交
  11. 01 4月, 2019 2 次提交
  12. 29 3月, 2019 4 次提交
    • Y
      e1000: Delay flush queue when receive RCTL · 157628d0
      yuchenlin 提交于
      Due to too early RCT0 interrput, win10x32 may hang on booting.
      This problem can be reproduced by doing power cycle on win10x32 guest.
      In our environment, we have 10 win10x32 and stress power cycle.
      The problem will happen about 20 rounds.
      
      Below shows some log with comment:
      
      The normal case:
      
      22831@1551928392.984687:e1000x_rx_disabled Received packet dropped
      because receive is disabled RCTL = 0
      22831@1551928392.985655:e1000x_rx_disabled Received packet dropped
      because receive is disabled RCTL = 0
      22831@1551928392.985801:e1000x_rx_disabled Received packet dropped
      because receive is disabled RCTL = 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: RCTL: 0, mac_reg[RCTL] = 0x0
      22831@1551928393.056710:e1000x_rx_disabled Received packet dropped
      because receive is disabled RCTL = 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: ICR read: 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: RCTL: 0, mac_reg[RCTL] = 0x0
      22831@1551928393.077548:e1000x_rx_disabled Received packet dropped
      because receive is disabled RCTL = 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: ICR read: 0
      e1000: set_ics 2, ICR 0, IMR 0
      e1000: set_ics 2, ICR 2, IMR 0
      e1000: RCTL: 0, mac_reg[RCTL] = 0x0
      22831@1551928393.102974:e1000x_rx_disabled Received packet dropped
      because receive is disabled RCTL = 0
      22831@1551928393.103267:e1000x_rx_disabled Received packet dropped
      because receive is disabled RCTL = 0
      e1000: RCTL: 255, mac_reg[RCTL] = 0x40002 <- win10x32 says it can handle
      RX now
      e1000: set_ics 0, ICR 2, IMR 9d <- unmask interrupt
      e1000: RCTL: 255, mac_reg[RCTL] = 0x48002
      e1000: set_ics 80, ICR 2, IMR 9d <- interrupt and work!
      ...
      
      The bad case:
      
      27744@1551930483.117766:e1000x_rx_disabled Received packet dropped
      because receive is disabled RCTL = 0
      27744@1551930483.118398:e1000x_rx_disabled Received packet dropped
      because receive is disabled RCTL = 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: RCTL: 0, mac_reg[RCTL] = 0x0
      27744@1551930483.198063:e1000x_rx_disabled Received packet dropped
      because receive is disabled RCTL = 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: ICR read: 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: RCTL: 0, mac_reg[RCTL] = 0x0
      27744@1551930483.218675:e1000x_rx_disabled Received packet dropped
      because receive is disabled RCTL = 0
      e1000: set_ics 0, ICR 0, IMR 0
      e1000: ICR read: 0
      e1000: set_ics 2, ICR 0, IMR 0
      e1000: set_ics 2, ICR 2, IMR 0
      e1000: RCTL: 0, mac_reg[RCTL] = 0x0
      27744@1551930483.241768:e1000x_rx_disabled Received packet dropped
      because receive is disabled RCTL = 0
      27744@1551930483.241979:e1000x_rx_disabled Received packet dropped
      because receive is disabled RCTL = 0
      e1000: RCTL: 255, mac_reg[RCTL] = 0x40002 <- win10x32 says it can handle
      RX now
      e1000: set_ics 80, ICR 2, IMR 0 <- flush queue (caused by setting RCTL)
      e1000: set_ics 0, ICR 82, IMR 9d <- unmask interrupt and because 0x82&0x9d
      != 0 generate interrupt, hang on here...
      
      To workaround this problem, simply delay flush queue. Also stop receiving
      when timer is going to run.
      
      Tested on CentOS, Win7SP1x64 and Win10x32.
      Signed-off-by: Nyuchenlin <yuchenlin@synology.com>
      Reviewed-by: NDmitry Fleytman <dmitry.fleytman@gmail.com>
      Signed-off-by: NJason Wang <jasowang@redhat.com>
      157628d0
    • C
      spapr/irq: Add XIVE sanity checks on non-P9 machines · 273fef83
      Cédric Le Goater 提交于
      On non-P9 machines, the XIVE interrupt mode is not advertised, see
      spapr_dt_ov5_platform_support(). Add a couple of checks on the machine
      configuration to filter bogus setups and prevent OS failures :
      
                           Interrupt modes
      
        CPU/Compat      XICS    XIVE                dual
      
         P8/P8          OK      QEMU failure (1)    OK (3)
         P9/P8          OK      QEMU failure (2)    OK (3)
         P9/P9          OK      OK                  OK
      
        (1) CPU exception model is incompatible with XIVE and the presenters
            will fail to realize.
      
        (2) CPU exception model is compatible with XIVE, but the XIVE CAS
            advertisement is dropped when in POWER8 mode. So we could ended up
            booting with the XIVE DT properties but without the HCALLs. Avoid
            confusing Linux with such settings and fail under QEMU.
      
        (3) force XICS in machine init
      
      Remove the check on XIVE-only machines in spapr_machine_init(), which
      has now become redundant.
      Signed-off-by: NCédric Le Goater <clg@kaod.org>
      Message-Id: <20190328100044.11408-1-clg@kaod.org>
      Reviewed-by: NGreg Kurz <groug@kaod.org>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      273fef83
    • D
      spapr: Simplify handling of host-serial and host-model values · 0a794529
      David Gibson 提交于
      27461d69 "ppc: add host-serial and host-model machine attributes
      (CVE-2019-8934)" introduced 'host-serial' and 'host-model' machine
      properties for spapr to explicitly control the values advertised to the
      guest in device tree properties with the same names.
      
      The previous behaviour on KVM was to unconditionally populate the device
      tree with the real host serial number and model, which leaks possibly
      sensitive information about the host to the guest.
      
      To maintain compatibility for old machine types, we allowed those props
      to be set to "passthrough" to take the value from the host as before.  Or
      they could be set to "none" to explicitly omit the device tree items.
      
      Special casing specific values on what's otherwise a user supplied string
      is very ugly.  So, this patch simplifies things by implementing the
      backwards compatibility in a different way: we have a machine class flag
      set for the older machines, and we only load the host values into the
      device tree if A) they're not set by the user and B) we have that flag set.
      
      This does mean that the "passthrough" functionality is no longer available
      with the current machine type.  That's ok though: if a user or management
      layer really wants the information passed through they can read it
      themselves (OpenStack Nova already does something similar for x86).
      
      It also means the user can't explicitly ask for the values to be omitted
      on the old machine types.  I think that's an acceptable trade-off: if you
      care enough about not leaking the host information you can either move to
      the new machine type, or use a dummy value for the properties.
      
      For the new machine type, this also removes an odd inconsistency
      between running on a POWER and non-POWER (or non-Linux) hosts: if the
      host information couldn't be read from where we expect (in the host's
      device tree as exposed by Linux), we'd fallback to omitting the guest
      device tree items.
      
      While we're there, improve some poorly worded comments, and the help text
      for the properties.
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Reviewed-by: NDaniel P. Berrangé <berrange@redhat.com>
      Reviewed-by: NGreg Kurz <groug@kaod.org>
      Tested-by: NGreg Kurz <groug@kaod.org>
      0a794529
    • G
      target/ppc: Consolidate 64-bit server processor detection in a helper · d0db7cad
      Greg Kurz 提交于
      We use PPC_SEGMENT_64B in various places to guard code that is specific
      to 64-bit server processors compliant with arch 2.x. Consolidate the
      logic in a helper macro with an explicit name.
      Signed-off-by: NGreg Kurz <groug@kaod.org>
      Message-Id: <155327783157.1283071.3747129891004927299.stgit@bahia.lan>
      Tested-by: NSuraj Jitindar Singh <sjitindarsingh@gmail.com>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      d0db7cad
  13. 26 3月, 2019 5 次提交
  14. 25 3月, 2019 1 次提交
    • P
      nrf51_gpio: reflect pull-up/pull-down to IRQs · 4261b2f9
      Paolo Bonzini 提交于
      Some drivers do I2C bitbanging by keeping the output to 0 and flipping
      the GPIO direction between input and output (see for example in Linux
      gpio_set_open_drain_value_commit, in drivers/gpio/gpiolib.c).
      When the GPIO is set to input, the pull-up resistor brings the output
      to 1, while when the GPIO is set to output, the output driver brings
      the output to 0.
      
      Implement this for the nRF51 GPIO device model.  First, if both input and
      output are floating, and there is a pull-up or pull-down resistor
      configured, do not just set s->in, but also make any devices listening
      on the output qemu_irq receive that value.  Second, if the pin is
      driven both internally (output pin) and externally you don't get a
      short circuit if both sides drive the pin to the same value.
      Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
      Acked-by: NStefan Hajnoczi <stefanha@redhat.com>
      Message-id: 20190317141001.3346-1-pbonzini@redhat.com
      [PMM: wrapped long line]
      Reviewed-by: NPeter Maydell <peter.maydell@linaro.org>
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      4261b2f9
  15. 23 3月, 2019 2 次提交
    • M
      trace-events: Fix attribution of trace points to source · dec97760
      Markus Armbruster 提交于
      Some trace points are attributed to the wrong source file.  Happens
      when we neglect to update trace-events for code motion, or add events
      in the wrong place, or misspell the file name.
      
      Clean up with help of cleanup-trace-events.pl.  Same funnies as in the
      previous commit, of course.  Manually shorten its change to
      linux-user/trace-events to */signal.c.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-id: 20190314180929.27722-6-armbru@redhat.com
      Message-Id: <20190314180929.27722-6-armbru@redhat.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      dec97760
    • M
      trace-events: Delete unused trace points · a9779a3a
      Markus Armbruster 提交于
      Tracked down with cleanup-trace-events.pl.  Funnies requiring manual
      post-processing:
      
      * block.c and blockdev.c trace points are in block/trace-events.
      
      * hw/block/nvme.c uses the preprocessor to hide its trace point use
        from cleanup-trace-events.pl.
      
      * include/hw/xen/xen_common.h trace points are in hw/xen/trace-events.
      
      * net/colo-compare and net/filter-rewriter.c use pseudo trace points
        colo_compare_udp_miscompare and colo_filter_rewriter_debug to guard
        debug code.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-id: 20190314180929.27722-5-armbru@redhat.com
      Message-Id: <20190314180929.27722-5-armbru@redhat.com>
      Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
      a9779a3a