From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Matthew Rosato <mjrosato@linux.ibm.com>,
alex.williamson@redhat.com, cohuck@redhat.com
Cc: thuth@redhat.com, pmorel@linux.ibm.com, schnelle@linux.ibm.com,
david@redhat.com, qemu-devel@nongnu.org, pasic@linux.ibm.com,
borntraeger@de.ibm.com, qemu-s390x@nongnu.org, rth@twiddle.net
Subject: Re: [PATCH v2 1/3] vfio: Find DMA available capability
Date: Tue, 15 Sep 2020 08:14:24 +0200 [thread overview]
Message-ID: <fbd1df4e-8d51-87c8-2b07-5b65666342d0@redhat.com> (raw)
In-Reply-To: <1600122570-12941-2-git-send-email-mjrosato@linux.ibm.com>
Hi Matthew,
On 9/15/20 12:29 AM, Matthew Rosato wrote:
> The underlying host may be limiting the number of outstanding DMA
> requests for type 1 IOMMU. Add helper functions to check for the
> DMA available capability and retrieve the current number of DMA
> mappings allowed.
>
> Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com>
> ---
> hw/vfio/common.c | 37 +++++++++++++++++++++++++++++++++++++
> include/hw/vfio/vfio-common.h | 2 ++
> 2 files changed, 39 insertions(+)
>
> diff --git a/hw/vfio/common.c b/hw/vfio/common.c
> index 3335714..7f4a338 100644
> --- a/hw/vfio/common.c
> +++ b/hw/vfio/common.c
> @@ -844,6 +844,43 @@ vfio_get_region_info_cap(struct vfio_region_info *info, uint16_t id)
> return NULL;
> }
>
> +static struct vfio_info_cap_header *
> +vfio_get_iommu_type1_info_cap(struct vfio_iommu_type1_info *info, uint16_t id)
> +{
> + struct vfio_info_cap_header *hdr;
> + void *ptr = info;
> +
> + if (!(info->flags & VFIO_IOMMU_INFO_CAPS)) {
> + return NULL;
> + }
> +
> + for (hdr = ptr + info->cap_offset; hdr != ptr; hdr = ptr + hdr->next) {
> + if (hdr->id == id) {
> + return hdr;
> + }
> + }
> +
> + return NULL;
> +}
> +
> +bool vfio_get_info_dma_avail(struct vfio_iommu_type1_info *info,
> + unsigned int *avail)
> +{
> + struct vfio_info_cap_header *hdr;
> + struct vfio_iommu_type1_info_dma_avail *cap;
> +
> + /* If the capability cannot be found, assume no DMA limiting */
> + hdr = vfio_get_iommu_type1_info_cap(info,
> + VFIO_IOMMU_TYPE1_INFO_DMA_AVAIL);
> + if (hdr == NULL || avail == NULL) {
If you expect the caller to use avail=NULL, then why
return false when there is available information?
> + return false;
> + }
> +
> + cap = (void *) hdr;
> + *avail = cap->avail;
> + return true;
> +}
> +
> static int vfio_setup_region_sparse_mmaps(VFIORegion *region,
> struct vfio_region_info *info)
> {
> diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
> index c78f3ff..661a380 100644
> --- a/include/hw/vfio/vfio-common.h
> +++ b/include/hw/vfio/vfio-common.h
> @@ -178,6 +178,8 @@ VFIOGroup *vfio_get_group(int groupid, AddressSpace *as, Error **errp);
> 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;
>
next prev parent reply other threads:[~2020-09-15 6:15 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-14 22:29 [PATCH v2 0/3] s390x/pci: Accomodate vfio DMA limiting Matthew Rosato
2020-09-14 22:29 ` [PATCH v2 1/3] vfio: Find DMA available capability Matthew Rosato
2020-09-15 6:14 ` Philippe Mathieu-Daudé [this message]
2020-09-15 10:10 ` Cornelia Huck
2020-09-15 13:39 ` Matthew Rosato
2020-09-15 10:33 ` Cornelia Huck
2020-09-15 13:57 ` Matthew Rosato
2020-09-15 14:37 ` Cornelia Huck
2020-09-14 22:29 ` [PATCH v2 2/3] s390x/pci: Honor DMA limits set by vfio Matthew Rosato
2020-09-15 11:28 ` Cornelia Huck
2020-09-15 14:16 ` Matthew Rosato
2020-09-15 14:50 ` Cornelia Huck
2020-09-15 12:54 ` Thomas Huth
2020-09-15 14:18 ` Matthew Rosato
2020-09-14 22:29 ` [PATCH v2 3/3] vfio: Create shared routine for scanning info capabilities Matthew Rosato
2020-09-15 6:16 ` Philippe Mathieu-Daudé
2020-09-15 13:43 ` Matthew Rosato
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fbd1df4e-8d51-87c8-2b07-5b65666342d0@redhat.com \
--to=philmd@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=mjrosato@linux.ibm.com \
--cc=pasic@linux.ibm.com \
--cc=pmorel@linux.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=rth@twiddle.net \
--cc=schnelle@linux.ibm.com \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.