Commit f44cedc9 authored by Peter Maydell's avatar Peter Maydell
Browse files

Merge remote-tracking branch 'remotes/awilliam/tags/vfio-update-20171213.0' into staging



VFIO updates for v2.12

 - Fix bug failing to register all but the first group attached to
   a container with kvm-vfio device (Alex Williamson)

 - Explicit QLIST init (Yi Lui)

 - SPAPR IOMMU v1 fallback (Alexey Kardashevskiy)

 - Remove unused structure fields (Alexey Kardashevskiy)

# gpg: Signature made Wed 13 Dec 2017 18:03:48 GMT
# gpg:                using RSA key 0x239B9B6E3BB08B22
# gpg: Good signature from "Alex Williamson <alex.williamson@redhat.com>"
# gpg:                 aka "Alex Williamson <alex@shazbot.org>"
# gpg:                 aka "Alex Williamson <alwillia@redhat.com>"
# gpg:                 aka "Alex Williamson <alex.l.williamson@gmail.com>"
# Primary key fingerprint: 42F6 C04E 540B D1A9 9E7B  8A90 239B 9B6E 3BB0 8B22

* remotes/awilliam/tags/vfio-update-20171213.0:
  vfio-pci: Remove unused fields from VFIOMSIXInfo
  vfio/spapr: Allow fallback to SPAPR TCE IOMMU v1
  vfio/common: init giommu_list and hostwin_list of vfio container
  vfio: Fix vfio-kvm group registration

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parents cba4d6d3 2fb9636e
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -968,6 +968,7 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as,
        if (!ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &container->fd)) {
            group->container = container;
            QLIST_INSERT_HEAD(&container->group_list, group, container_next);
            vfio_kvm_device_add_group(group);
            return 0;
        }
    }
@@ -990,6 +991,8 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as,
    container = g_malloc0(sizeof(*container));
    container->space = space;
    container->fd = fd;
    QLIST_INIT(&container->giommu_list);
    QLIST_INIT(&container->hostwin_list);
    if (ioctl(fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1_IOMMU) ||
        ioctl(fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1v2_IOMMU)) {
        bool v2 = !!ioctl(fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1v2_IOMMU);
@@ -1039,6 +1042,11 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as,
        container->iommu_type =
            v2 ? VFIO_SPAPR_TCE_v2_IOMMU : VFIO_SPAPR_TCE_IOMMU;
        ret = ioctl(fd, VFIO_SET_IOMMU, container->iommu_type);
        if (ret) {
            container->iommu_type = VFIO_SPAPR_TCE_IOMMU;
            v2 = false;
            ret = ioctl(fd, VFIO_SET_IOMMU, container->iommu_type);
        }
        if (ret) {
            error_setg_errno(errp, errno, "failed to set iommu for container");
            ret = -errno;
+0 −2
Original line number Diff line number Diff line
@@ -93,8 +93,6 @@ typedef struct VFIOMSIXInfo {
    uint16_t entries;
    uint32_t table_offset;
    uint32_t pba_offset;
    MemoryRegion mmap_mem;
    void *mmap;
    unsigned long *pending;
} VFIOMSIXInfo;