All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jacob Pan <jacob.jun.pan@linux.intel.com>
To: LKML <linux-kernel@vger.kernel.org>,
	iommu@lists.linux.dev, Jason Gunthorpe <jgg@nvidia.com>,
	"Lu Baolu" <baolu.lu@linux.intel.com>,
	Joerg Roedel <joro@8bytes.org>,
	dmaengine@vger.kernel.org, vkoul@kernel.org
Cc: "Robin Murphy" <robin.murphy@arm.com>,
	"Will Deacon" <will@kernel.org>,
	David Woodhouse <dwmw2@infradead.org>,
	Raj Ashok <ashok.raj@intel.com>,
	"Tian, Kevin" <kevin.tian@intel.com>, Yi Liu <yi.l.liu@intel.com>,
	"Yu, Fenghua" <fenghua.yu@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	Tony Luck <tony.luck@intel.com>,
	"Zanussi, Tom" <tom.zanussi@intel.com>,
	Jacob Pan <jacob.jun.pan@linux.intel.com>
Subject: [PATCH v2 6/8] iommu/vt-d: Implement set_dev_pasid domain op
Date: Mon, 27 Mar 2023 16:21:36 -0700	[thread overview]
Message-ID: <20230327232138.1490712-7-jacob.jun.pan@linux.intel.com> (raw)
In-Reply-To: <20230327232138.1490712-1-jacob.jun.pan@linux.intel.com>

Devices that use ENQCMDS to submit work on buffers mapped by DMA API
must attach a PASID to the default domain of the device. In preparation
for this use case, this patch implements set_dev_pasid() for the
default_domain_ops. Besides PASID attachment, device will also be
attached to the domain as the result of this call if the device has not
been attached before.

Signed-off-by: Jacob Pan <jacob.jun.pan@linux.intel.com>
---
 drivers/iommu/intel/iommu.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 0a195136bac7..652ee0ca72da 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -4782,6 +4782,26 @@ static void intel_iommu_remove_dev_pasid(struct device *dev, ioasid_t pasid)
 	intel_iommu_detach_device_pasid(domain, dev, pasid);
 }
 
+static int intel_iommu_attach_device_pasid(struct iommu_domain *domain,
+					   struct device *dev, ioasid_t pasid)
+{
+	struct device_domain_info *info = dev_iommu_priv_get(dev);
+	struct dmar_domain *dmar_domain = to_dmar_domain(domain);
+	struct intel_iommu *iommu = info->iommu;
+	int ret;
+
+	if (!pasid_supported(iommu))
+		return -ENODEV;
+
+	ret = prepare_domain_attach_device(domain, dev);
+	if (ret)
+		return ret;
+
+	return dmar_domain_attach_device_pasid(dmar_domain, dev, pasid);
+}
+
+
+
 const struct iommu_ops intel_iommu_ops = {
 	.capable		= intel_iommu_capable,
 	.domain_alloc		= intel_iommu_domain_alloc,
@@ -4801,6 +4821,7 @@ const struct iommu_ops intel_iommu_ops = {
 #endif
 	.default_domain_ops = &(const struct iommu_domain_ops) {
 		.attach_dev		= intel_iommu_attach_device,
+		.set_dev_pasid          = intel_iommu_attach_device_pasid,
 		.map_pages		= intel_iommu_map_pages,
 		.unmap_pages		= intel_iommu_unmap_pages,
 		.iotlb_sync_map		= intel_iommu_iotlb_sync_map,
-- 
2.25.1


  parent reply	other threads:[~2023-03-27 23:17 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-27 23:21 [PATCH v2 0/8] Re-enable IDXD kernel workqueue under DMA API Jacob Pan
2023-03-27 23:21 ` [PATCH v2 1/8] iommu/vt-d: Use non-privileged mode for all PASIDs Jacob Pan
2023-03-28  4:55   ` Baolu Lu
2023-03-27 23:21 ` [PATCH v2 2/8] iommu/vt-d: Remove PASID supervisor request support Jacob Pan
2023-03-28  4:59   ` Baolu Lu
2023-03-27 23:21 ` [PATCH v2 3/8] iommu/sva: Support reservation of global SVA PASIDs Jacob Pan
2023-03-28  5:11   ` Baolu Lu
2023-03-28 15:21     ` Jacob Pan
2023-03-28  7:35   ` Tian, Kevin
2023-03-28 15:31     ` Jacob Pan
2023-03-28 15:55       ` Jason Gunthorpe
2023-03-28 16:32         ` Jacob Pan
2023-03-27 23:21 ` [PATCH v2 4/8] iommu/vt-d: Reserve RID_PASID from global SVA PASID space Jacob Pan
2023-03-28  5:20   ` Baolu Lu
2023-03-28 16:29     ` Jacob Pan
2023-03-28 20:52       ` Jacob Pan
2023-03-29  6:13         ` Baolu Lu
2023-03-29  8:20     ` Vasant Hegde
2023-03-27 23:21 ` [PATCH v2 5/8] iommu/vt-d: Make device pasid attachment explicit Jacob Pan
2023-03-28  5:49   ` Baolu Lu
2023-03-28  7:44     ` Tian, Kevin
2023-03-28 20:39       ` Jacob Pan
2023-03-29  6:18       ` Baolu Lu
2023-03-27 23:21 ` Jacob Pan [this message]
2023-03-28  7:47   ` [PATCH v2 6/8] iommu/vt-d: Implement set_dev_pasid domain op Tian, Kevin
2023-03-28 15:40     ` Jacob Pan
2023-03-29  3:04       ` Tian, Kevin
2023-03-29  6:22       ` Baolu Lu
2023-03-27 23:21 ` [PATCH v2 7/8] iommu: Export iommu_get_dma_domain Jacob Pan
2023-03-28  6:04   ` Baolu Lu
2023-03-28  7:52     ` Tian, Kevin
2023-03-28 15:48       ` Jacob Pan
2023-03-28 16:19         ` Jason Gunthorpe
2023-03-28 17:25           ` Jacob Pan
2023-03-28 15:48     ` Jacob Pan
2023-03-29  6:28       ` Baolu Lu
2023-03-27 23:21 ` [PATCH v2 8/8] dmaengine/idxd: Re-enable kernel workqueue under DMA API Jacob Pan
2023-03-28 18:16   ` Fenghua Yu
2023-03-28 20:23     ` Jacob Pan

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=20230327232138.1490712-7-jacob.jun.pan@linux.intel.com \
    --to=jacob.jun.pan@linux.intel.com \
    --cc=ashok.raj@intel.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=dave.jiang@intel.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=dwmw2@infradead.org \
    --cc=fenghua.yu@intel.com \
    --cc=iommu@lists.linux.dev \
    --cc=jgg@nvidia.com \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=tom.zanussi@intel.com \
    --cc=tony.luck@intel.com \
    --cc=vkoul@kernel.org \
    --cc=will@kernel.org \
    --cc=yi.l.liu@intel.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.