Skip to content
Snippets Groups Projects
  1. Jul 15, 2023
  2. Jul 14, 2023
    • Richard Henderson's avatar
      Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging · 4633c1e2
      Richard Henderson authored
      * SCSI unit attention fix
      * add PCIe devices to s390x emulator
      * IDE unplug fix for Xen
      
      # -----BEGIN PGP SIGNATURE-----
      #
      # iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmSxEWkUHHBib256aW5p
      # QHJlZGhhdC5jb20ACgkQv/vSX3jHroPDrAf/SyGEcBr1U2v0HBwfqGcHOVPwx5Dc
      # jk9628klLgRF9EqEoffFfJTf9LU5Su4WsjtGLvH+GBCV0thfaPrvQJxD4KWvxgUl
      # SKX5zepw9GY+uiTmbyuStLo5a8ksL6z5Zvw92gKh2PEKwuicerJL7OnK8drTMXXS
      # haL/UL3v3Qa3OwkxBIIq9uXdZjUiSib6PQD9/u7OoY67F6/ThmtUozgcMpqR/39Q
      # 0AdNibteN2XlUrysS9hreC0pAmqB6luAdo7wcUR53NV7Yp0yOa1jySJRxiNvHGrB
      # gK7jpHL/UBjTTkBodfZD21q5Ih4Vpya2FWpg4ZZlrIEJQc2AyxCl3zw3Bg==
      # =Ai1b
      # -----END PGP SIGNATURE-----
      # gpg: Signature made Fri 14 Jul 2023 10:12:09 AM BST
      # gpg:                using RSA key F13338574B662389866C7682BFFBD25F78C7AE83
      # gpg:                issuer "pbonzini@redhat.com"
      # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [undefined]
      # gpg:                 aka "Paolo Bonzini <pbonzini@redhat.com>" [undefined]
      # gpg: WARNING: This key is not certified with a trusted signature!
      # gpg:          There is no indication that the signature belongs to the owner.
      # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4  E2F7 7E15 100C CD36 69B1
      #      Subkey fingerprint: F133 3857 4B66 2389 866C  7682 BFFB D25F 78C7 AE83
      
      * tag 'for-upstream' of https://gitlab.com/bonzini/qemu
      
      :
        scsi: clear unit attention only for REPORT LUNS commands
        scsi: cleanup scsi_clear_unit_attention()
        scsi: fetch unit attention when creating the request
        kconfig: Add PCIe devices to s390x machines
        hw/ide/piix: properly initialize the BMIBA register
      
      Signed-off-by: default avatarRichard Henderson <richard.henderson@linaro.org>
      4633c1e2
    • Stefano Garzarella's avatar
      scsi: clear unit attention only for REPORT LUNS commands · 2eb5599e
      Stefano Garzarella authored
      
      scsi_clear_unit_attention() now only handles REPORTED LUNS DATA HAS
      CHANGED.
      
      This only happens when we handle REPORT LUNS commands, so let's rename
      the function in scsi_clear_reported_luns_changed() and call it only in
      scsi_target_emulate_report_luns().
      
      Suggested-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarStefano Garzarella <sgarzare@redhat.com>
      Message-ID: <20230712134352.118655-4-sgarzare@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      2eb5599e
    • Stefano Garzarella's avatar
      scsi: cleanup scsi_clear_unit_attention() · ba947dab
      Stefano Garzarella authored
      
      The previous commit moved the unit attention clearing when we create
      the request. So now we can clean scsi_clear_unit_attention() to handle
      only the case of the REPORT LUNS command: this is the only case in
      which a UNIT ATTENTION is cleared without having been reported.
      
      Suggested-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarStefano Garzarella <sgarzare@redhat.com>
      Message-ID: <20230712134352.118655-3-sgarzare@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      ba947dab
    • Stefano Garzarella's avatar
      scsi: fetch unit attention when creating the request · 9472083e
      Stefano Garzarella authored
      
      Commit 1880ad4f ("virtio-scsi: Batched prepare for cmd reqs") split
      calls to scsi_req_new() and scsi_req_enqueue() in the virtio-scsi device.
      No ill effects were observed until commit 8cc5583a ("virtio-scsi: Send
      "REPORTED LUNS CHANGED" sense data upon disk hotplug events") added a
      unit attention that was easy to trigger with device hotplug and
      hot-unplug.
      
      Because the two calls were separated, all requests in the batch were
      prepared calling scsi_req_new() to report a sense.  The first one
      submitted would report the right sense and reset it to NO_SENSE, while
      the others reported CHECK_CONDITION with no sense data.  This caused
      SCSI errors in Linux.
      
      To solve this issue, let's fetch the unit attention as early as possible
      when we prepare the request, so that only the first request in the batch
      will use the unit attention SCSIReqOps and the others will not report
      CHECK CONDITION.
      
      Fixes: 1880ad4f ("virtio-scsi: Batched prepare for cmd reqs")
      Fixes: 8cc5583a ("virtio-scsi: Send "REPORTED LUNS CHANGED" sense data upon disk hotplug events")
      Reported-by: default avatarThomas Huth <thuth@redhat.com>
      Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2176702
      
      
      Co-developed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarStefano Garzarella <sgarzare@redhat.com>
      Message-ID: <20230712134352.118655-2-sgarzare@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      9472083e
    • Cédric Le Goater's avatar
      kconfig: Add PCIe devices to s390x machines · cc9ff56f
      Cédric Le Goater authored
      
      It is useful to extend the number of available PCIe devices to KVM guests
      for passthrough scenarios and also to expose these models to a different
      (big endian) architecture. Introduce a new config PCIE_DEVICES to select
      models, Intel Ethernet adapters and one USB controller. These devices all
      support MSI-X which is a requirement on s390x as legacy INTx are not
      supported.
      
      Cc: Matthew Rosato <mjrosato@linux.ibm.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Thomas Huth <thuth@redhat.com>
      Signed-off-by: default avatarCédric Le Goater <clg@redhat.com>
      Message-ID: <20230712080146.839113-1-clg@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      cc9ff56f
    • Olaf Hering's avatar
      hw/ide/piix: properly initialize the BMIBA register · 230dfd92
      Olaf Hering authored
      
      According to the 82371FB documentation (82371FB.pdf, 2.3.9. BMIBA-BUS
      MASTER INTERFACE BASE ADDRESS REGISTER, April 1997), the register is
      32bit wide. To properly reset it to default values, all 32bit need to be
      cleared. Bit #0 "Resource Type Indicator (RTE)" needs to be enabled.
      
      The initial change wrote just the lower 8 bit, leaving parts of the "Bus
      Master Interface Base Address" address at bit 15:4 unchanged.
      
      Fixes: e6a71ae3 ("Add support for 82371FB (Step A1) and Improved support for 82371SB (Function 1)")
      
      Signed-off-by: default avatarOlaf Hering <olaf@aepfle.de>
      Reviewed-by: default avatarBernhard Beschow <shentey@gmail.com>
      Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@linaro.org>
      Message-ID: <20230712074721.14728-1-olaf@aepfle.de>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      230dfd92
  3. Jul 12, 2023
    • Richard Henderson's avatar
      Merge tag 'block-pull-request' of https://gitlab.com/stefanha/qemu into staging · 3dd9e547
      Richard Henderson authored
      Pull request
      
      # -----BEGIN PGP SIGNATURE-----
      #
      # iQEzBAABCAAdFiEEhpWov9P5fNqsNXdanKSrs4Grc8gFAmSvAB0ACgkQnKSrs4Gr
      # c8hVzAgAomXGVhqm/qnQ99SIry+kec9a1Bom4ZprvpEtiHndoq8bw/ujeUlr/XK0
      # CBKdYNYY3R1rSB6yLsV2ea45elk3x/iMqygbJF3QfWxpHfx0l8vs1WB6uSQFqo/E
      # ext1dvP8Czc0BP4MLaijvkW2u0j8qsLQnJcu9JDrRzgD8OqJSlhOxBSmb8VDvDvx
      # am0RMRkYxSl7jn2LFEE4mMfUjy9JJSFhnzP8lMoGH/m8C62Eult2PFDItnTAG8hN
      # IAyNDCDr2LKZwe6DP9JHUKCtqNYUHnGibgKH3k9NKWgUyOHSxqtDUC9vtoTPskGf
      # BRo0XZM7qnSUZCoAhEjvKVWcEkFIkw==
      # =aHUy
      # -----END PGP SIGNATURE-----
      # gpg: Signature made Wed 12 Jul 2023 08:33:49 PM BST
      # gpg:                using RSA key 8695A8BFD3F97CDAAC35775A9CA4ABB381AB73C8
      # gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" [full]
      # gpg:                 aka "Stefan Hajnoczi <stefanha@gmail.com>" [full]
      
      * tag 'block-pull-request' of https://gitlab.com/stefanha/qemu
      
      :
        virtio-blk: fix host notifier issues during dataplane start/stop
      
      Signed-off-by: default avatarRichard Henderson <richard.henderson@linaro.org>
      3dd9e547
    • Stefan Hajnoczi's avatar
      virtio-blk: fix host notifier issues during dataplane start/stop · 75dcb4d7
      Stefan Hajnoczi authored
      
      The main loop thread can consume 100% CPU when using --device
      virtio-blk-pci,iothread=<iothread>. ppoll() constantly returns but
      reading virtqueue host notifiers fails with EAGAIN. The file descriptors
      are stale and remain registered with the AioContext because of bugs in
      the virtio-blk dataplane start/stop code.
      
      The problem is that the dataplane start/stop code involves drain
      operations, which call virtio_blk_drained_begin() and
      virtio_blk_drained_end() at points where the host notifier is not
      operational:
      - In virtio_blk_data_plane_start(), blk_set_aio_context() drains after
        vblk->dataplane_started has been set to true but the host notifier has
        not been attached yet.
      - In virtio_blk_data_plane_stop(), blk_drain() and blk_set_aio_context()
        drain after the host notifier has already been detached but with
        vblk->dataplane_started still set to true.
      
      I would like to simplify ->ioeventfd_start/stop() to avoid interactions
      with drain entirely, but couldn't find a way to do that. Instead, this
      patch accepts the fragile nature of the code and reorders it so that
      vblk->dataplane_started is false during drain operations. This way the
      virtio_blk_drained_begin() and virtio_blk_drained_end() calls don't
      touch the host notifier. The result is that
      virtio_blk_data_plane_start() and virtio_blk_data_plane_stop() have
      complete control over the host notifier and stale file descriptors are
      no longer left in the AioContext.
      
      This patch fixes the 100% CPU consumption in the main loop thread and
      correctly moves host notifier processing to the IOThread.
      
      Fixes: 1665d932 ("virtio-blk: implement BlockDevOps->drained_begin()")
      Reported-by: default avatarLukáš Doktor <ldoktor@redhat.com>
      Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      Tested-by: default avatarLukas Doktor <ldoktor@redhat.com>
      Message-id: 20230704151527.193586-1-stefanha@redhat.com
      Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
      75dcb4d7
    • Richard Henderson's avatar
      Merge tag 'mem-2023-07-12' of https://github.com/davidhildenbrand/qemu into staging · 6f05a92d
      Richard Henderson authored
      Hi,
      
      "Host Memory Backends" and "Memory devices" queue ("mem"):
      - Memory device cleanups (especially around machine initialization)
      - "x-ignore-shared" migration support for virtio-mem
      - Add an abstract virtio-md-pci device as a common parent for
        virtio-mem-pci and virtio-pmem-pci (virtio based memory devices)
      - Device unplug support for virtio-mem-pci
      
      # -----BEGIN PGP SIGNATURE-----
      #
      # iQJFBAABCAAvFiEEG9nKrXNcTDpGDfzKTd4Q9wD/g1oFAmSuYAQRHGRhdmlkQHJl
      # ZGhhdC5jb20ACgkQTd4Q9wD/g1od9A/9HXT8IqKGup9is7P/mpobPWXczRGZ5sEg
      # /q21PzX6crr9aFa+fYRF/Dlm3G/cSMOVXFRKGz3royLjsvaEj/veEewfKF8KWbBf
      # eIS9udQTOwoD2kAhcv3pm0SwSJoVizpw2z7IodGVKE6iZxTXsmDksqQuFbrvVLSh
      # 2wtP4lizEXco/YsiCoAnStj2QtXBcHw7Ua7W2cDzxFmL+1pM5w3rjQ1ydCNz3bSG
      # l4CXXs1i8OmOZbFN78F/E9SEkzQnAuHSO0Sc1aeAJkwVzOt2lj/YMgt0jHjAY0at
      # pheWZ5pEE6hnQP740YXpt4Y6IIgO22pH23dLhq9A2reyRnwjt830uObHi3qAE8kB
      # KR+ZQ+Z5bI6ZNB/EFiUsC1dFsr2fF20zQlO02MctyJ+lUG6p3gpvwsGScQxt+zdF
      # QlkiSecGErYwC+nZ529SQB4gSEJTCjd/STDoidVYnZazdStaOaSyft02xRNzBPW/
      # OnOY+6ZxZK6R11KfwGjnsftrovQIP3Pqi9TXGzW2xVlkWJHqlicy6G3ZfceTTlj9
      # Gg2Ue694Wr1r4PDV2XlYcZ1IPLjSy5Msp5V2wERRrp3OItxnvegvTevQN7USEHC+
      # BPGNMu11jriSY2pE5BSFN0hfGOvuvsk3GreLJiHFUXoje6gzAynuLjCN/CHdIVyK
      # 5i0AwdZ+xcA=
      # =ch6m
      # -----END PGP SIGNATURE-----
      # gpg: Signature made Wed 12 Jul 2023 09:10:44 AM BST
      # gpg:                using RSA key 1BD9CAAD735C4C3A460DFCCA4DDE10F700FF835A
      # gpg:                issuer "david@redhat.com"
      # gpg: Good signature from "David Hildenbrand <david@redhat.com>" [unknown]
      # gpg:                 aka "David Hildenbrand <davidhildenbrand@gmail.com>" [undefined]
      # gpg:                 aka "David Hildenbrand <hildenbr@in.tum.de>" [unknown]
      # gpg: WARNING: This key is not certified with a trusted signature!
      # gpg:          There is no indication that the signature belongs to the owner.
      # Primary key fingerprint: 1BD9 CAAD 735C 4C3A 460D  FCCA 4DDE 10F7 00FF 835A
      
      * tag 'mem-2023-07-12' of https://github.com/davidhildenbrand/qemu
      
      : (21 commits)
        virtio-mem-pci: Device unplug support
        virtio-mem: Prepare for device unplug support
        virtio-md-pci: Support unplug requests for compatible devices
        virtio-md-pci: Handle unplug of virtio based memory devices
        arm/virt: Use virtio-md-pci (un)plug functions
        pc: Factor out (un)plug handling of virtio-md-pci devices
        virtio-md-pci: New parent type for virtio-mem-pci and virtio-pmem-pci
        virtio-mem: Support "x-ignore-shared" migration
        migration/ram: Expose ramblock_is_ignored() as migrate_ram_is_ignored()
        virtio-mem: Skip most of virtio_mem_unplug_all() without plugged memory
        softmmu/physmem: Warn with ram_block_discard_range() on MAP_PRIVATE file mapping
        memory-device: Track used region size in DeviceMemoryState
        memory-device: Refactor memory_device_pre_plug()
        hw/i386/pc: Remove PC_MACHINE_DEVMEM_REGION_SIZE
        hw/i386/acpi-build: Rely on machine->device_memory when building SRAT
        hw/i386/pc: Use machine_memory_devices_init()
        hw/loongarch/virt: Use machine_memory_devices_init()
        hw/ppc/spapr: Use machine_memory_devices_init()
        hw/arm/virt: Use machine_memory_devices_init()
        memory-device: Introduce machine_memory_devices_init()
        ...
      
      Signed-off-by: default avatarRichard Henderson <richard.henderson@linaro.org>
      6f05a92d
    • David Hildenbrand's avatar
      virtio-mem-pci: Device unplug support · 339a8bbd
      David Hildenbrand authored
      
      Let's support device unplug by forwarding the unplug_request_check()
      callback to the virtio-mem device.
      
      Further, disallow changing the requested-size once an unplug request is
      pending.
      
      Disallowing requested-size changes handles corner cases such as
      (1) pausing the VM (2) requesting device unplug and (3) adjusting the
      requested size. If the VM would plug memory (due to the requested size
      change) before processing the unplug request, we would be in trouble.
      
      Message-ID: <20230711153445.514112-8-david@redhat.com>
      Tested-by: default avatarMario Casquero <mcasquer@redhat.com>
      Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      339a8bbd
    • David Hildenbrand's avatar
      virtio-mem: Prepare for device unplug support · 92a8ee1b
      David Hildenbrand authored
      
      In many cases, blindly unplugging a virtio-mem device is problematic. We
      can only safely remove a device once:
      * The guest is not expecting to be able to read unplugged memory
        (unplugged-inaccessible == on)
      * The virtio-mem device does not have memory plugged (size == 0)
      * The virtio-mem device does not have outstanding requests to the VM to
        plug memory (requested-size == 0)
      
      So let's add a callback to the virtio-mem device class to check for that.
      We'll wire-up virtio-mem-pci next.
      
      Message-ID: <20230711153445.514112-7-david@redhat.com>
      Tested-by: default avatarMario Casquero <mcasquer@redhat.com>
      Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      92a8ee1b
    • David Hildenbrand's avatar
      virtio-md-pci: Support unplug requests for compatible devices · aac44204
      David Hildenbrand authored
      
      Let's support unplug requests for virtio-md-pci devices that provide
      a unplug_request_check() callback.
      
      We'll wire that up for virtio-mem-pci next.
      
      Message-ID: <20230711153445.514112-6-david@redhat.com>
      Tested-by: default avatarMario Casquero <mcasquer@redhat.com>
      Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      aac44204
    • David Hildenbrand's avatar
      virtio-md-pci: Handle unplug of virtio based memory devices · c29dd73f
      David Hildenbrand authored
      
      While we fence unplug requests from the outside, the VM can still
      trigger unplug of virtio based memory devices, for example, in Linux
      doing on a virtio-mem-pci device:
          # echo 0 > /sys/bus/pci/slots/3/power
      
      While doing that is not really expected to work without harming the
      guest OS (e.g., removing a virtio-mem device while it still provides
      memory), let's make sure that we properly handle it on the QEMU side.
      
      We'll add support for unplugging of virtio-mem devices in some
      configurations next.
      
      Message-ID: <20230711153445.514112-5-david@redhat.com>
      Tested-by: default avatarMario Casquero <mcasquer@redhat.com>
      Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      c29dd73f
    • David Hildenbrand's avatar
      arm/virt: Use virtio-md-pci (un)plug functions · 30ec5ccd
      David Hildenbrand authored
      
      Let's use our new helper functions. Note that virtio-pmem-pci is not
      enabled for arm and, therefore, not compiled in.
      
      Message-ID: <20230711153445.514112-4-david@redhat.com>
      Tested-by: default avatarMario Casquero <mcasquer@redhat.com>
      Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      30ec5ccd
    • David Hildenbrand's avatar
      pc: Factor out (un)plug handling of virtio-md-pci devices · dbdf841b
      David Hildenbrand authored
      
      Let's factor out (un)plug handling, to be reused from arm/virt code.
      
      Provide stubs for the case that CONFIG_VIRTIO_MD is not selected because
      neither virtio-mem nor virtio-pmem is enabled. While this cannot
      currently happen for x86, it will be possible for arm/virt.
      
      Message-ID: <20230711153445.514112-3-david@redhat.com>
      Tested-by: default avatarMario Casquero <mcasquer@redhat.com>
      Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      dbdf841b
    • David Hildenbrand's avatar
      virtio-md-pci: New parent type for virtio-mem-pci and virtio-pmem-pci · 18129c15
      David Hildenbrand authored
      
      Let's add a new abstract "virtio memory device" type, and use it as
      parent class of virtio-mem-pci and virtio-pmem-pci.
      
      Message-ID: <20230711153445.514112-2-david@redhat.com>
      Tested-by: default avatarMario Casquero <mcasquer@redhat.com>
      Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      18129c15
    • David Hildenbrand's avatar
      virtio-mem: Support "x-ignore-shared" migration · b01fd4b6
      David Hildenbrand authored
      
      To achieve desired "x-ignore-shared" functionality, we should not
      discard all RAM when realizing the device and not mess with
      preallocation/postcopy when loading device state. In essence, we should
      not touch RAM content.
      
      As "x-ignore-shared" gets set after realizing the device, we cannot
      rely on that. Let's simply skip discarding of RAM on incoming migration.
      Note that virtio_mem_post_load() will call
      virtio_mem_restore_unplugged() -- unless "x-ignore-shared" is set. So
      once migration finished we'll have a consistent state.
      
      The initial system reset will also not discard any RAM, because
      virtio_mem_unplug_all() will not call virtio_mem_unplug_all() when no
      memory is plugged (which is the case before loading the device state).
      
      Note that something like VM templating -- see commit b17fbbe5
      ("migration: allow private destination ram with x-ignore-shared") -- is
      currently incompatible with virtio-mem and ram_block_discard_range() will
      warn in case a private file mapping is supplied by virtio-mem.
      
      For VM templating with virtio-mem, it makes more sense to either
      (a) Create the template without the virtio-mem device and hotplug a
          virtio-mem device to the new VM instances using proper own memory
          backend.
      (b) Use a virtio-mem device that doesn't provide any memory in the
          template (requested-size=0) and use private anonymous memory.
      
      Message-ID: <20230706075612.67404-5-david@redhat.com>
      Tested-by: default avatarMario Casquero <mcasquer@redhat.com>
      Reviewed-by: default avatarJuan Quintela <quintela@redhat.com>
      Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      b01fd4b6
    • David Hildenbrand's avatar
      migration/ram: Expose ramblock_is_ignored() as migrate_ram_is_ignored() · f161c88a
      David Hildenbrand authored
      
      virtio-mem wants to know whether it should not mess with the RAMBlock
      content (e.g., discard RAM, preallocate memory) on incoming migration.
      
      So let's expose that function as migrate_ram_is_ignored() in
      migration/misc.h
      
      Message-ID: <20230706075612.67404-4-david@redhat.com>
      Acked-by: default avatarPeter Xu <peterx@redhat.com>
      Tested-by: default avatarMario Casquero <mcasquer@redhat.com>
      Reviewed-by: default avatarJuan Quintela <quintela@redhat.com>
      Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      f161c88a
    • David Hildenbrand's avatar
      virtio-mem: Skip most of virtio_mem_unplug_all() without plugged memory · 836f657b
      David Hildenbrand authored
      
      Already when starting QEMU we perform one system reset that ends up
      triggering virtio_mem_unplug_all() with no actual memory plugged yet.
      That, in turn will trigger ram_block_discard_range() and perform some
      other actions that are not required in that case.
      
      Let's optimize virtio_mem_unplug_all() for the case that no memory is
      plugged. This will be beneficial for x-ignore-shared support as well.
      
      Message-ID: <20230706075612.67404-3-david@redhat.com>
      Tested-by: default avatarMario Casquero <mcasquer@redhat.com>
      Reviewed-by: default avatarJuan Quintela <quintela@redhat.com>
      Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      836f657b
    • David Hildenbrand's avatar
      softmmu/physmem: Warn with ram_block_discard_range() on MAP_PRIVATE file mapping · 1d44ff58
      David Hildenbrand authored
      
      ram_block_discard_range() cannot possibly do the right thing in
      MAP_PRIVATE file mappings in the general case.
      
      To achieve the documented semantics, we also have to punch a hole into
      the file, possibly messing with other MAP_PRIVATE/MAP_SHARED mappings
      of such a file.
      
      For example, using VM templating -- see commit b17fbbe5 ("migration:
      allow private destination ram with x-ignore-shared") -- in combination with
      any mechanism that relies on discarding of RAM is problematic. This
      includes:
      * Postcopy live migration
      * virtio-balloon inflation/deflation or free-page-reporting
      * virtio-mem
      
      So at least warn that there is something possibly dangerous is going on
      when using ram_block_discard_range() in these cases.
      
      Message-ID: <20230706075612.67404-2-david@redhat.com>
      Acked-by: default avatarPeter Xu <peterx@redhat.com>
      Tested-by: default avatarMario Casquero <mcasquer@redhat.com>
      Reviewed-by: default avatarJuan Quintela <quintela@redhat.com>
      Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      1d44ff58
    • David Hildenbrand's avatar
      memory-device: Track used region size in DeviceMemoryState · ac23dd2f
      David Hildenbrand authored
      
      Let's avoid iterating over all devices and simply track it in the
      DeviceMemoryState.
      
      Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@linaro.org>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      Message-Id: <20230623124553.400585-11-david@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      ac23dd2f
    • David Hildenbrand's avatar
      memory-device: Refactor memory_device_pre_plug() · d7f4891c
      David Hildenbrand authored
      
      Let's move memory_device_check_addable() and basic checks out of
      memory_device_get_free_addr() directly into memory_device_pre_plug().
      
      Separating basic checks from address assignment is cleaner and
      prepares for further changes.
      
      As all memory device users now use memory_devices_init(), and that
      function enforces that the size is 0, we can drop the check for an empty
      region.
      
      Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@linaro.org>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      Message-Id: <20230623124553.400585-10-david@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      d7f4891c
    • David Hildenbrand's avatar
      hw/i386/pc: Remove PC_MACHINE_DEVMEM_REGION_SIZE · a8e67ce3
      David Hildenbrand authored
      
      There are no remaining users in the tree. Libvirt never used that
      property and a quick internet search revealed no other users.
      
      Further, we renamed that property already in commit f2ffbe2b
      ("pc: rename "hotplug memory" terminology to "device memory"") without
      anybody complaining.
      
      So let's just get rid of it.
      
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Richard Henderson <richard.henderson@linaro.org>
      Cc: Eduardo Habkost <eduardo@habkost.net>
      Cc: "Michael S. Tsirkin" <mst@redhat.com>
      Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
      Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@linaro.org>
      Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      Message-Id: <20230623124553.400585-9-david@redhat.com>
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      a8e67ce3
Loading