On Tue, 3 Nov 2020 06:49:13 +0100 Philippe Mathieu-Daudé <phi...@redhat.com> wrote:
> 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')) I think we need s/CONFIG_LINUX/CONFIG_VFIO/ here. > > > > 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: Hm. Is this run in any of the CI tests? I did not even realize it existed :) > > hw/s390x/s390-pci-vfio.c:52: undefined reference to > `vfio_get_info_dma_avail' > > Can you have a look please? > > Thanks. >