From: Jason Gunthorpe <jgg@nvidia.com>
To: Alex Williamson <alex.williamson@redhat.com>,
Lu Baolu <baolu.lu@linux.intel.com>,
Christian Benvenuti <benve@cisco.com>,
Cornelia Huck <cohuck@redhat.com>,
David Woodhouse <dwmw2@infradead.org>,
Gerald Schaefer <gerald.schaefer@linux.ibm.com>,
iommu@lists.linux-foundation.org,
Jason Wang <jasowang@redhat.com>, Joerg Roedel <joro@8bytes.org>,
kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-arm-msm@vger.kernel.org, linux-rdma@vger.kernel.org,
linux-s390@vger.kernel.org,
Matthew Rosato <mjrosato@linux.ibm.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Nelson Escobar <neescoba@cisco.com>,
netdev@vger.kernel.org, Rob Clark <robdclark@gmail.com>,
Robin Murphy <robin.murphy@arm.com>,
Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>,
virtualization@lists.linux-foundation.org,
Will Deacon <will@kernel.org>
Cc: Christoph Hellwig <hch@lst.de>, "Tian, Kevin" <kevin.tian@intel.com>
Subject: [PATCH 2/5] vfio: Require that devices support DMA cache coherence
Date: Tue, 5 Apr 2022 13:16:01 -0300 [thread overview]
Message-ID: <2-v1-ef02c60ddb76+12ca2-intel_no_snoop_jgg@nvidia.com> (raw)
In-Reply-To: <0-v1-ef02c60ddb76+12ca2-intel_no_snoop_jgg@nvidia.com>
dev_is_dma_coherent() is the control to determine if IOMMU_CACHE can be
supported.
IOMMU_CACHE means that normal DMAs do not require any additional coherency
mechanism and is the basic uAPI that VFIO exposes to userspace. For
instance VFIO applications like DPDK will not work if additional coherency
operations are required.
Therefore check dev_is_dma_coherent() before allowing a device to join a
domain. This will block device/platform/iommu combinations from using VFIO
that do not support cache coherent DMA.
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
---
drivers/vfio/vfio.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
index a4555014bd1e72..2a3aa3e742d943 100644
--- a/drivers/vfio/vfio.c
+++ b/drivers/vfio/vfio.c
@@ -32,6 +32,7 @@
#include <linux/vfio.h>
#include <linux/wait.h>
#include <linux/sched/signal.h>
+#include <linux/dma-map-ops.h>
#include "vfio.h"
#define DRIVER_VERSION "0.3"
@@ -1348,6 +1349,11 @@ static int vfio_group_get_device_fd(struct vfio_group *group, char *buf)
if (IS_ERR(device))
return PTR_ERR(device);
+ if (group->type == VFIO_IOMMU && !dev_is_dma_coherent(device->dev)) {
+ ret = -ENODEV;
+ goto err_device_put;
+ }
+
if (!try_module_get(device->dev->driver->owner)) {
ret = -ENODEV;
goto err_device_put;
--
2.35.1
next prev parent reply other threads:[~2022-04-05 22:40 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-05 16:15 [PATCH 0/5] Make the iommu driver no-snoop block feature consistent Jason Gunthorpe
2022-04-05 16:16 ` [PATCH 1/5] iommu: Replace uses of IOMMU_CAP_CACHE_COHERENCY with dev_is_dma_coherent() Jason Gunthorpe
2022-04-06 5:30 ` Christoph Hellwig
2022-04-06 12:07 ` Jason Gunthorpe
2022-04-06 13:51 ` Christoph Hellwig
2022-04-06 14:14 ` Jason Gunthorpe
2022-04-06 15:47 ` Christoph Hellwig
2022-04-06 15:48 ` Jason Gunthorpe
2022-04-06 15:48 ` Robin Murphy
2022-04-06 13:56 ` Robin Murphy
2022-04-06 14:24 ` Jason Gunthorpe
2022-04-06 15:18 ` Jason Gunthorpe
2022-04-06 15:50 ` Christoph Hellwig
2022-04-06 16:06 ` Jason Gunthorpe
2022-04-06 16:10 ` Christoph Hellwig
2022-04-06 17:17 ` Jason Gunthorpe
2022-04-07 7:18 ` Tian, Kevin
2022-04-07 13:59 ` Jason Gunthorpe
2022-04-07 15:17 ` Robin Murphy
2022-04-07 15:23 ` Jason Gunthorpe
2022-04-07 22:37 ` Alex Williamson
2022-04-07 15:31 ` Christoph Hellwig
2022-04-07 8:53 ` Niklas Schnelle
2022-04-05 16:16 ` Jason Gunthorpe [this message]
2022-04-05 19:10 ` [PATCH 2/5] vfio: Require that devices support DMA cache coherence Alex Williamson
2022-04-05 19:29 ` Jason Gunthorpe
2022-04-06 7:02 ` Tian, Kevin
2022-04-07 14:53 ` Jason Gunthorpe
2022-04-05 16:16 ` [PATCH 3/5] iommu: Introduce the domain op enforce_cache_coherency() Jason Gunthorpe
2022-04-05 19:50 ` Alex Williamson
2022-04-05 22:57 ` Jason Gunthorpe
2022-04-05 23:31 ` Tian, Kevin
2022-04-06 0:08 ` Tian, Kevin
2022-04-06 7:09 ` Tian, Kevin
2022-04-06 12:27 ` Jason Gunthorpe
2022-04-05 16:16 ` [PATCH 4/5] vfio: Move the Intel no-snoop control off of IOMMU_CACHE Jason Gunthorpe
2022-04-05 16:16 ` [PATCH 5/5] iommu: Delete IOMMU_CAP_CACHE_COHERENCY Jason Gunthorpe
2022-04-06 6:52 ` [PATCH 0/5] Make the iommu driver no-snoop block feature consistent Tian, Kevin
2022-04-07 14:56 ` Jason Gunthorpe
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=2-v1-ef02c60ddb76+12ca2-intel_no_snoop_jgg@nvidia.com \
--to=jgg@nvidia.com \
--cc=alex.williamson@redhat.com \
--cc=baolu.lu@linux.intel.com \
--cc=benve@cisco.com \
--cc=cohuck@redhat.com \
--cc=dwmw2@infradead.org \
--cc=gerald.schaefer@linux.ibm.com \
--cc=hch@lst.de \
--cc=iommu@lists.linux-foundation.org \
--cc=jasowang@redhat.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=mjrosato@linux.ibm.com \
--cc=mst@redhat.com \
--cc=neescoba@cisco.com \
--cc=netdev@vger.kernel.org \
--cc=robdclark@gmail.com \
--cc=robin.murphy@arm.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=will@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox