Hi Matthew, On 11/1/20 10:02 PM, Alex Williamson wrote: > From: Matthew Rosato <mjros...@linux.ibm.com> > > Create new files for separating out vfio-specific work for s390 > pci. Add the first such routine, which issues VFIO_IOMMU_GET_INFO > ioctl to collect the current dma available count. > > Signed-off-by: Matthew Rosato <mjros...@linux.ibm.com> > Reviewed-by: Cornelia Huck <coh...@redhat.com> > [aw: Fix non-Linux build with CONFIG_LINUX] > Signed-off-by: Alex Williamson <alex.william...@redhat.com> > --- > hw/s390x/meson.build | 1 + > hw/s390x/s390-pci-vfio.c | 54 > ++++++++++++++++++++++++++++++++++++++ > include/hw/s390x/s390-pci-vfio.h | 24 +++++++++++++++++ > 3 files changed, 79 insertions(+) > create mode 100644 hw/s390x/s390-pci-vfio.c > create mode 100644 include/hw/s390x/s390-pci-vfio.h > > diff --git a/hw/s390x/meson.build b/hw/s390x/meson.build > index 948ceae7a7b3..f4663a835514 100644 > --- a/hw/s390x/meson.build > +++ b/hw/s390x/meson.build > @@ -27,6 +27,7 @@ s390x_ss.add(when: 'CONFIG_KVM', if_true: files( > )) > 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 --git a/hw/s390x/s390-pci-vfio.c b/hw/s390x/s390-pci-vfio.c > new file mode 100644 > index 000000000000..cb3f4d98adf8 > --- /dev/null > +++ b/hw/s390x/s390-pci-vfio.c > @@ -0,0 +1,54 @@ > +/* > + * s390 vfio-pci interfaces > + * > + * Copyright 2020 IBM Corp. > + * Author(s): Matthew Rosato <mjros...@linux.ibm.com> > + * > + * This work is licensed under the terms of the GNU GPL, version 2 or (at > + * your option) any later version. See the COPYING file in the top-level > + * directory. > + */ > + > +#include <sys/ioctl.h> > + > +#include "qemu/osdep.h" > +#include "hw/s390x/s390-pci-vfio.h" > +#include "hw/vfio/vfio-common.h" > + > +/* > + * Get the current DMA available count from vfio. Returns true if vfio is > + * limiting DMA requests, false otherwise. The current available count read > + * from vfio is returned in avail. > + */ > +bool s390_pci_update_dma_avail(int fd, unsigned int *avail) > +{ > + g_autofree struct vfio_iommu_type1_info *info; > + uint32_t argsz; > + > + assert(avail); > + > + argsz = sizeof(struct vfio_iommu_type1_info); > + info = g_malloc0(argsz); > + > + /* > + * If the specified argsz is not large enough to contain all capabilities > + * it will be updated upon return from the ioctl. Retry until we have > + * a big enough buffer to hold the entire capability chain. > + */ > +retry: > + info->argsz = argsz; > + > + if (ioctl(fd, VFIO_IOMMU_GET_INFO, info)) { > + return false; > + } > + > + if (info->argsz > argsz) { > + argsz = info->argsz; > + info = g_realloc(info, argsz); > + goto retry; > + } > + > + /* If the capability exists, update with the current value */ > + return vfio_get_info_dma_avail(info, avail); > +}
--without-default-devices configuration is broken, bisected to this commit: hw/s390x/s390-pci-vfio.c:52: undefined reference to `vfio_get_info_dma_avail' Can you have a look please? Thanks.