[PULL v3 00/32] VFIO updates 2020-11-01 (for QEMU 5.2 soft-freeze)

Alex Williamson posted 32 patches 3 years, 6 months ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/160426371498.24886.12193840637250368669.stgit@gimli.home
Maintainers: Richard Henderson <rth@twiddle.net>, Matthew Rosato <mjrosato@linux.ibm.com>, Alex Williamson <alex.williamson@redhat.com>, David Hildenbrand <david@redhat.com>, Eric Blake <eblake@redhat.com>, Cornelia Huck <cohuck@redhat.com>, Halil Pasic <pasic@linux.ibm.com>, Markus Armbruster <armbru@redhat.com>, "Michael S. Tsirkin" <mst@redhat.com>, Juan Quintela <quintela@redhat.com>, Thomas Huth <thuth@redhat.com>, "Dr. David Alan Gilbert" <dgilbert@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, Christian Borntraeger <borntraeger@de.ibm.com>
MAINTAINERS                                        |   1 +
hw/s390x/meson.build                               |   1 +
hw/s390x/s390-pci-bus.c                            |  91 +-
hw/s390x/s390-pci-inst.c                           |  78 +-
hw/s390x/s390-pci-vfio.c                           | 276 ++++++
hw/s390x/s390-virtio-ccw.c                         |   2 +-
hw/s390x/trace-events                              |   5 +
hw/vfio/common.c                                   | 508 ++++++++++-
hw/vfio/meson.build                                |   1 +
hw/vfio/migration.c                                | 933 +++++++++++++++++++++
hw/vfio/pci.c                                      |  87 +-
hw/vfio/pci.h                                      |   1 -
hw/vfio/platform.c                                 |   7 +-
hw/vfio/trace-events                               |  21 +
{hw => include/hw}/s390x/s390-pci-bus.h            |  22 +
.../hw/s390x/s390-pci-clp.h                        | 123 +--
include/hw/s390x/s390-pci-inst.h                   | 119 +++
include/hw/s390x/s390-pci-vfio.h                   |  38 +
include/hw/vfio/vfio-common.h                      |  30 +
.../infiniband/hw/vmw_pvrdma/pvrdma_verbs.h        |   2 +-
include/standard-headers/linux/ethtool.h           |   2 +
include/standard-headers/linux/fuse.h              |  50 +-
include/standard-headers/linux/input-event-codes.h |   4 +
include/standard-headers/linux/pci_regs.h          |   6 +-
include/standard-headers/linux/virtio_fs.h         |   3 +
include/standard-headers/linux/virtio_gpu.h        |  19 +
include/standard-headers/linux/virtio_mmio.h       |  11 +
include/standard-headers/linux/virtio_pci.h        |  11 +-
linux-headers/asm-arm64/kvm.h                      |  25 +
linux-headers/asm-arm64/mman.h                     |   1 +
linux-headers/asm-generic/hugetlb_encode.h         |   1 +
linux-headers/asm-generic/unistd.h                 |  18 +-
linux-headers/asm-mips/unistd_n32.h                |   1 +
linux-headers/asm-mips/unistd_n64.h                |   1 +
linux-headers/asm-mips/unistd_o32.h                |   1 +
linux-headers/asm-powerpc/unistd_32.h              |   1 +
linux-headers/asm-powerpc/unistd_64.h              |   1 +
linux-headers/asm-s390/unistd_32.h                 |   1 +
linux-headers/asm-s390/unistd_64.h                 |   1 +
linux-headers/asm-x86/kvm.h                        |  20 +
linux-headers/asm-x86/unistd_32.h                  |   1 +
linux-headers/asm-x86/unistd_64.h                  |   1 +
linux-headers/asm-x86/unistd_x32.h                 |   1 +
linux-headers/linux/kvm.h                          |  19 +
linux-headers/linux/mman.h                         |   1 +
linux-headers/linux/vfio.h                         |  29 +-
linux-headers/linux/vfio_zdev.h                    |  78 ++
migration/migration.c                              |  17 +
monitor/hmp-cmds.c                                 |   6 +
qapi/migration.json                                |  17 +
scripts/update-linux-headers.sh                    |   2 +-
softmmu/memory.c                                   |   2 +-
52 files changed, 2481 insertions(+), 217 deletions(-)
create mode 100644 hw/s390x/s390-pci-vfio.c
create mode 100644 hw/vfio/migration.c
rename {hw => include/hw}/s390x/s390-pci-bus.h (94%)
rename hw/s390x/s390-pci-inst.h => include/hw/s390x/s390-pci-clp.h (59%)
create mode 100644 include/hw/s390x/s390-pci-inst.h
create mode 100644 include/hw/s390x/s390-pci-vfio.h
create mode 100644 linux-headers/linux/vfio_zdev.h
[PULL v3 00/32] VFIO updates 2020-11-01 (for QEMU 5.2 soft-freeze)
Posted by Alex Williamson 3 years, 6 months ago
Aggregated interdiff versus v1 pull request below.  Thanks,

Alex

The following changes since commit 700d20b49e303549b32d3a7a3efbfcee8c7a4f6c:

  Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging (2020-11-01 14:02:19 +0000)

are available in the Git repository at:

  git://github.com/awilliam/qemu-vfio.git tags/vfio-update-20201101.0

for you to fetch changes up to c624b6b312680b76d2a19a4c65cfdb234e875e1b:

  vfio: fix incorrect print type (2020-11-01 12:30:52 -0700)

----------------------------------------------------------------
VFIO update 2020-11-01

 * Migration support (Kirti Wankhede)
 * s390 DMA limiting (Matthew Rosato)
 * zPCI hardware info (Matthew Rosato)
 * Lock guard (Amey Narkhede)
 * Print fixes (Zhengui li)
 * Warning/build fixes

----------------------------------------------------------------
Amey Narkhede (1):
      hw/vfio: Use lock guard macros

Kirti Wankhede (17):
      vfio: Add function to unmap VFIO region
      vfio: Add vfio_get_object callback to VFIODeviceOps
      vfio: Add save and load functions for VFIO PCI devices
      vfio: Add migration region initialization and finalize function
      vfio: Add VM state change handler to know state of VM
      vfio: Add migration state change notifier
      vfio: Register SaveVMHandlers for VFIO device
      vfio: Add save state functions to SaveVMHandlers
      vfio: Add load state functions to SaveVMHandlers
      memory: Set DIRTY_MEMORY_MIGRATION when IOMMU is enabled
      vfio: Get migration capability flags for container
      vfio: Add function to start and stop dirty pages tracking
      vfio: Add vfio_listener_log_sync to mark dirty pages
      vfio: Dirty page tracking when vIOMMU is enabled
      vfio: Add ioctl to get dirty pages bitmap during dma unmap
      vfio: Make vfio-pci device migration capable
      qapi: Add VFIO devices migration stats in Migration stats

Matthew Rosato (10):
      update-linux-headers: Add vfio_zdev.h
      linux-headers: update against 5.10-rc1
      s390x/pci: Move header files to include/hw/s390x
      vfio: Create shared routine for scanning info capabilities
      vfio: Find DMA available capability
      s390x/pci: Add routine to get the vfio dma available count
      s390x/pci: Honor DMA limits set by vfio
      s390x/pci: clean up s390 PCI groups
      vfio: Add routine for finding VFIO_DEVICE_GET_INFO capabilities
      s390x/pci: get zPCI function info from host

Pierre Morel (3):
      s390x/pci: create a header dedicated to PCI CLP
      s390x/pci: use a PCI Group structure
      s390x/pci: use a PCI Function structure

Zhengui Li (1):
      vfio: fix incorrect print type

 MAINTAINERS                                        |   1 +
 hw/s390x/meson.build                               |   1 +
 hw/s390x/s390-pci-bus.c                            |  91 +-
 hw/s390x/s390-pci-inst.c                           |  78 +-
 hw/s390x/s390-pci-vfio.c                           | 276 ++++++
 hw/s390x/s390-virtio-ccw.c                         |   2 +-
 hw/s390x/trace-events                              |   5 +
 hw/vfio/common.c                                   | 508 ++++++++++-
 hw/vfio/meson.build                                |   1 +
 hw/vfio/migration.c                                | 933 +++++++++++++++++++++
 hw/vfio/pci.c                                      |  87 +-
 hw/vfio/pci.h                                      |   1 -
 hw/vfio/platform.c                                 |   7 +-
 hw/vfio/trace-events                               |  21 +
 {hw => include/hw}/s390x/s390-pci-bus.h            |  22 +
 .../hw/s390x/s390-pci-clp.h                        | 123 +--
 include/hw/s390x/s390-pci-inst.h                   | 119 +++
 include/hw/s390x/s390-pci-vfio.h                   |  38 +
 include/hw/vfio/vfio-common.h                      |  30 +
 .../infiniband/hw/vmw_pvrdma/pvrdma_verbs.h        |   2 +-
 include/standard-headers/linux/ethtool.h           |   2 +
 include/standard-headers/linux/fuse.h              |  50 +-
 include/standard-headers/linux/input-event-codes.h |   4 +
 include/standard-headers/linux/pci_regs.h          |   6 +-
 include/standard-headers/linux/virtio_fs.h         |   3 +
 include/standard-headers/linux/virtio_gpu.h        |  19 +
 include/standard-headers/linux/virtio_mmio.h       |  11 +
 include/standard-headers/linux/virtio_pci.h        |  11 +-
 linux-headers/asm-arm64/kvm.h                      |  25 +
 linux-headers/asm-arm64/mman.h                     |   1 +
 linux-headers/asm-generic/hugetlb_encode.h         |   1 +
 linux-headers/asm-generic/unistd.h                 |  18 +-
 linux-headers/asm-mips/unistd_n32.h                |   1 +
 linux-headers/asm-mips/unistd_n64.h                |   1 +
 linux-headers/asm-mips/unistd_o32.h                |   1 +
 linux-headers/asm-powerpc/unistd_32.h              |   1 +
 linux-headers/asm-powerpc/unistd_64.h              |   1 +
 linux-headers/asm-s390/unistd_32.h                 |   1 +
 linux-headers/asm-s390/unistd_64.h                 |   1 +
 linux-headers/asm-x86/kvm.h                        |  20 +
 linux-headers/asm-x86/unistd_32.h                  |   1 +
 linux-headers/asm-x86/unistd_64.h                  |   1 +
 linux-headers/asm-x86/unistd_x32.h                 |   1 +
 linux-headers/linux/kvm.h                          |  19 +
 linux-headers/linux/mman.h                         |   1 +
 linux-headers/linux/vfio.h                         |  29 +-
 linux-headers/linux/vfio_zdev.h                    |  78 ++
 migration/migration.c                              |  17 +
 monitor/hmp-cmds.c                                 |   6 +
 qapi/migration.json                                |  17 +
 scripts/update-linux-headers.sh                    |   2 +-
 softmmu/memory.c                                   |   2 +-
 52 files changed, 2481 insertions(+), 217 deletions(-)
 create mode 100644 hw/s390x/s390-pci-vfio.c
 create mode 100644 hw/vfio/migration.c
 rename {hw => include/hw}/s390x/s390-pci-bus.h (94%)
 rename hw/s390x/s390-pci-inst.h => include/hw/s390x/s390-pci-clp.h (59%)
 create mode 100644 include/hw/s390x/s390-pci-inst.h
 create mode 100644 include/hw/s390x/s390-pci-vfio.h
 create mode 100644 linux-headers/linux/vfio_zdev.h

Changes vs v1:

diff -u b/hw/s390x/meson.build b/hw/s390x/meson.build
--- b/hw/s390x/meson.build
+++ b/hw/s390x/meson.build
@@ -10,7 +10,6 @@
   's390-ccw.c',
   's390-pci-bus.c',
   's390-pci-inst.c',
-  's390-pci-vfio.c',
   's390-skeys.c',
   's390-stattrib.c',
   's390-virtio-hcall.c',
@@ -28,6 +27,7 @@
 ))
 s390x_ss.add(when: 'CONFIG_S390_CCW_VIRTIO', if_true: files('s390-virtio-ccw.c'))
 s390x_ss.add(when: 'CONFIG_TERMINAL3270', if_true: files('3270-ccw.c'))
+s390x_ss.add(when: 'CONFIG_LINUX', if_true: files('s390-pci-vfio.c'))
 
 virtio_ss = ss.source_set()
 virtio_ss.add(files('virtio-ccw.c'))
diff -u b/hw/vfio/common.c b/hw/vfio/common.c
--- b/hw/vfio/common.c
+++ b/hw/vfio/common.c
@@ -397,7 +397,8 @@
                    BITS_PER_BYTE;
 
     if (bitmap->size > container->max_dirty_bitmap_size) {
-        error_report("UNMAP: Size of bitmap too big 0x%llx", bitmap->size);
+        error_report("UNMAP: Size of bitmap too big 0x%"PRIx64,
+                     (uint64_t)bitmap->size);
         ret = -E2BIG;
         goto unmap_exit;
     }
@@ -410,7 +411,7 @@
 
     ret = ioctl(container->fd, VFIO_IOMMU_UNMAP_DMA, unmap);
     if (!ret) {
-        cpu_physical_memory_set_dirty_lebitmap((uint64_t *)bitmap->data,
+        cpu_physical_memory_set_dirty_lebitmap((unsigned long *)bitmap->data,
                 iotlb->translated_addr, pages);
     } else {
         error_report("VFIO_UNMAP_DMA with DIRTY_BITMAP : %m");
@@ -998,13 +999,13 @@
 
     ret = ioctl(container->fd, VFIO_IOMMU_DIRTY_PAGES, dbitmap);
     if (ret) {
-        error_report("Failed to get dirty bitmap for iova: 0x%llx "
-                "size: 0x%llx err: %d",
-                range->iova, range->size, errno);
+        error_report("Failed to get dirty bitmap for iova: 0x%"PRIx64
+                " size: 0x%"PRIx64" err: %d", (uint64_t)range->iova,
+                (uint64_t)range->size, errno);
         goto err_out;
     }
 
-    cpu_physical_memory_set_dirty_lebitmap((uint64_t *)range->bitmap.data,
+    cpu_physical_memory_set_dirty_lebitmap((unsigned long *)range->bitmap.data,
                                             ram_addr, pages);
 
     trace_vfio_get_dirty_bitmap(container->fd, range->iova, range->size,
diff -u b/hw/vfio/migration.c b/hw/vfio/migration.c
--- b/hw/vfio/migration.c
+++ b/hw/vfio/migration.c
@@ -55,8 +55,8 @@
     ret = iswrite ? pwrite(vbasedev->fd, val, count, off) :
                     pread(vbasedev->fd, val, count, off);
     if (ret < count) {
-        error_report("vfio_mig_%s %d byte %s: failed at offset 0x%lx, err: %s",
-                     iswrite ? "write" : "read", count,
+        error_report("vfio_mig_%s %d byte %s: failed at offset 0x%"
+                     HWADDR_PRIx", err: %s", iswrite ? "write" : "read", count,
                      vbasedev->name, off, strerror(errno));
         return (ret < 0) ? ret : -EINVAL;
     }
@@ -734,7 +734,7 @@
     uint32_t value, mask;
     int ret;
 
-    if ((vbasedev->migration->vm_running == running)) {
+    if (vbasedev->migration->vm_running == running) {
         return;
     }
 
diff -u b/include/hw/s390x/s390-pci-vfio.h b/include/hw/s390x/s390-pci-vfio.h
--- b/include/hw/s390x/s390-pci-vfio.h
+++ b/include/hw/s390x/s390-pci-vfio.h
@@ -15,9 +15,24 @@
 #include "hw/s390x/s390-pci-bus.h"
 
+#ifdef CONFIG_LINUX
 bool s390_pci_update_dma_avail(int fd, unsigned int *avail);
 S390PCIDMACount *s390_pci_start_dma_count(S390pciState *s,
                                           S390PCIBusDevice *pbdev);
 void s390_pci_end_dma_count(S390pciState *s, S390PCIDMACount *cnt);
 void s390_pci_get_clp_info(S390PCIBusDevice *pbdev);
+#else
+static inline bool s390_pci_update_dma_avail(int fd, unsigned int *avail)
+{
+    return false;
+}
+static inline S390PCIDMACount *s390_pci_start_dma_count(S390pciState *s,
+                                                        S390PCIBusDevice *pbdev)
+{
+    return NULL;
+}
+static inline void s390_pci_end_dma_count(S390pciState *s,
+                                          S390PCIDMACount *cnt) { }
+static inline void s390_pci_get_clp_info(S390PCIBusDevice *pbdev) { }
+#endif
 
 #endif
diff -u b/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
--- b/include/hw/vfio/vfio-common.h
+++ b/include/hw/vfio/vfio-common.h
@@ -198,8 +198,6 @@
 void vfio_put_group(VFIOGroup *group);
 int vfio_get_device(VFIOGroup *group, const char *name,
                     VFIODevice *vbasedev, Error **errp);
-bool vfio_get_info_dma_avail(struct vfio_iommu_type1_info *info,
-                             unsigned int *avail);
 
 extern const MemoryRegionOps vfio_region_ops;
 typedef QLIST_HEAD(VFIOGroupList, VFIOGroup) VFIOGroupList;
@@ -216,6 +214,8 @@
 bool vfio_has_region_cap(VFIODevice *vbasedev, int region, uint16_t cap_type);
 struct vfio_info_cap_header *
 vfio_get_region_info_cap(struct vfio_region_info *info, uint16_t id);
+bool vfio_get_info_dma_avail(struct vfio_iommu_type1_info *info,
+                             unsigned int *avail);
 struct vfio_info_cap_header *
 vfio_get_device_info_cap(struct vfio_device_info *info, uint16_t id);
 #endif


Re: [PULL v3 00/32] VFIO updates 2020-11-01 (for QEMU 5.2 soft-freeze)
Posted by Peter Maydell 3 years, 6 months ago
On Sun, 1 Nov 2020 at 21:01, Alex Williamson <alex.williamson@redhat.com> wrote:
>
> Aggregated interdiff versus v1 pull request below.  Thanks,
>
> Alex
>
> The following changes since commit 700d20b49e303549b32d3a7a3efbfcee8c7a4f6c:
>
>   Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging (2020-11-01 14:02:19 +0000)
>
> are available in the Git repository at:
>
>   git://github.com/awilliam/qemu-vfio.git tags/vfio-update-20201101.0
>
> for you to fetch changes up to c624b6b312680b76d2a19a4c65cfdb234e875e1b:
>
>   vfio: fix incorrect print type (2020-11-01 12:30:52 -0700)
>
> ----------------------------------------------------------------
> VFIO update 2020-11-01
>
>  * Migration support (Kirti Wankhede)
>  * s390 DMA limiting (Matthew Rosato)
>  * zPCI hardware info (Matthew Rosato)
>  * Lock guard (Amey Narkhede)
>  * Print fixes (Zhengui li)
>  * Warning/build fixes
>


Applied, thanks.

Please update the changelog at https://wiki.qemu.org/ChangeLog/5.2
for any user-visible changes.

-- PMM