From nobody Fri Dec 19 15:23:15 2025 Received: from fhigh8-smtp.messagingengine.com (fhigh8-smtp.messagingengine.com [103.168.172.159]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BAE7414EC77 for ; Mon, 26 Aug 2024 11:40:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.159 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724672458; cv=none; b=fz339rZ7zI6fH4U7PaHN92Rw7HIb2/ncZRuec4KsSzRE19fIxxjKhnghpuWQP/zt9BCv8+5E2zrIPaVpEvqVACHreEMit1jF42A2b5hKBjlIWh+6ooCQBd6vZ4Z8mTPn9WZarQ4ux6dxrSJsG4ZrqY4QZLxCCPrgue1wNRpkXhU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724672458; c=relaxed/simple; bh=nuFvxp/M5IAaOxTYl1jnlb6xI3ep0l9zxNIoSeA1838=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=djLEJpu468iHqIzAURbj/usjke3xKe9agq+5eUz/tROhP3aRibKIKs5EgNQFjHcolGlLJAGgnvY+FVjtwMGqf8lfRqCtXdKyIAQab6+CUuBD7TyDUPdSAAnHdpNIPk6W4NmjVhwIkTHH7MKz90Ja4v4MydOuS9MZyt4BPrCWlIM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=irrelevant.dk; spf=pass smtp.mailfrom=irrelevant.dk; dkim=pass (2048-bit key) header.d=irrelevant.dk header.i=@irrelevant.dk header.b=H6EB9Nj3; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=PV4X0N52; arc=none smtp.client-ip=103.168.172.159 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=irrelevant.dk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=irrelevant.dk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=irrelevant.dk header.i=@irrelevant.dk header.b="H6EB9Nj3"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="PV4X0N52" Received: from phl-compute-02.internal (phl-compute-02.nyi.internal [10.202.2.42]) by mailfhigh.nyi.internal (Postfix) with ESMTP id C64D41151B44; Mon, 26 Aug 2024 07:40:54 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-02.internal (MEProxy); Mon, 26 Aug 2024 07:40:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=cc:cc:content-transfer-encoding:content-type:content-type :date:date:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:subject:subject:to:to; s=fm3; t=1724672454; x=1724758854; bh=3Cs2r3GrVO/pQuuCnExnOKv/xk1e+riS WLlhLEUxL8A=; b=H6EB9Nj3aXdIKaUnP1vXC+IL+/RXp5a9q0PnGQY9KUW/2GXV Xo+PBNKbmx+Kl0xZSKF2BG0Xh+/CoVQWy5yDCoQ7t9VDjaLwzJZdb9oG5X2C1C+p RzEPB3r00XtSvuFgCag3SWfrv4wRsc609EExAGCjXgwvpb3wYMBJiyaslzaMx1zt dFekhlIWoddcCQO35S93CryuQCLnm49Dwk1+YkTgHNXNSwPH2G5kTV+IoVQnbiTk +MMtfaTmfx0VM3ZBacVrYEiJoNzWuoTX3Q4EVr+mZ8SCI/jydWwunBUmCJnv+UGL YwBBEc7BFTYv7RAOO7yaTFfGYkod6Fny6UtUjg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1724672454; x= 1724758854; bh=3Cs2r3GrVO/pQuuCnExnOKv/xk1e+riSWLlhLEUxL8A=; b=P V4X0N52RKKjOF4vL3ogwkptSUNooNmDzwfV0hpbbJcvU3NovTPx1wCiYbnCvalIz 8tjdi6hlFDBTACIVS5mtIRBtu+rmLQUzC+d+BOOLcZwV3Ni4AKofS+G83zdYIcL0 H2Qge47NqBK/Xv2GasEd71LMoekvwHFFunS8gM0OpKMw585jFSc60+U2pk/onY8f n3Zgcqm9JT9bA8bf1KlLIAtLHWnnLucTF8QQU2wBOuMNbihDbcoCl5iXNzKx9lDC JuUqIFa+fia1j1j5M61A/Mp0vQOSjCFO0b99pLR+M8FxDH2bLHy4OTovsN0gNMMP tPYZ6ZCe4qO21p1FSKmpA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddruddvkedggedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtkeertdertdej necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth drughkqeenucggtffrrghtthgvrhhnpeejleffjeekudffteekleekffeifeehveeghfdu leeifefgvedvleeftdejvefhudenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht thhopeduvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepjhdrghhrrghnrgguoh hssehsrghmshhunhhgrdgtohhmpdhrtghpthhtohepkhdrjhgvnhhsvghnsehsrghmshhu nhhgrdgtohhmpdhrtghpthhtohepkhgvvhhinhdrthhirghnsehinhhtvghlrdgtohhmpd hrtghpthhtohepugifmhifvdesihhnfhhrrgguvggrugdrohhrghdprhgtphhtthhopehi ohhmmhhusehlihhsthhsrdhlihhnuhigrdguvghvpdhrtghpthhtoheprhhosghinhdrmh hurhhphhihsegrrhhmrdgtohhmpdhrtghpthhtohepsggrohhluhdrlhhusehlihhnuhig rdhinhhtvghlrdgtohhmpdhrtghpthhtohepmhhinhifohhordhimhesshgrmhhsuhhngh drtghomhdprhgtphhtthhopehjohhroheskegshihtvghsrdhorhhg X-ME-Proxy: Feedback-ID: idc91472f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 26 Aug 2024 07:40:52 -0400 (EDT) From: Klaus Jensen Date: Mon, 26 Aug 2024 13:40:27 +0200 Subject: [PATCH RFC PREVIEW 1/6] iommu/vt-d: Separate page request queue from SVM Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240826-iopf-for-all-v1-1-59174e6a7528@samsung.com> References: <20240826-iopf-for-all-v1-0-59174e6a7528@samsung.com> In-Reply-To: <20240826-iopf-for-all-v1-0-59174e6a7528@samsung.com> To: David Woodhouse , Lu Baolu , Joerg Roedel , Will Deacon , Robin Murphy , Jason Gunthorpe , Kevin Tian Cc: Minwoo Im , linux-kernel@vger.kernel.org, iommu@lists.linux.dev, Joel Granados , Klaus Jensen X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=23262; i=k.jensen@samsung.com; h=from:subject:message-id; bh=Cw8vFAdG8yu2OkPDBe2zQUVFQKT7ftWvIP+SquT6slw=; b=LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tCgpvd0o0bkp2QXk4ekF4ZWo3Y0wxaHJqL3ZTO GJUYWtrTWFXY3k5KzEyczI1KzQ3cm83TFo3TnBhcVIzNEkrSE96CnlQZUoxMXh1RjlrZS9KaUpx NnlUMFppRmdaR0xRVlpNa1NWSXczaFY2YU03enhhNXB4MkFHY1RLQkRLRmdZdFQKQUNaeXI0WDl 2K3V5OTY4T25mVlp0VC9pWjZXTWwxamZDZmw4am0vU3RkbmZ2KzJxL2RYUVl1U3FOcTNGdnQxRA pVL2p5eGtNekZhNXlYUlhxVy9IVStmYkV0dHVudk00VW1EWkYrUFFjUzVmVDdGcjQxaWZITjFPN zM5azVmMW4vCjlQQ0puOVJXaVBmTTJIbjJzZjRWNVVMN1JZazk1MUs3MzVZSHMvRWxGWW90OEhQ ZkxPVE1XTEVpeWtUaWRienoKMjFOY3MrUlZsbXpmN2JFajlmKzNuUXVuZGE2cCtKZ1gwMVVmbFd nUStuYS9oTmV2cS83T2k0L3h1Q1J1clRrUwpxZUJibDNKc1cvdk5Hc1B3RlMrMEo2MnpQWjNibl ZZc0pQNnQ4RUI4WHF5T2d0ZDluMGQ4TFZaTGVDd2ttdjRsCnVqMzRsNkRoOFhpYXFYeml1M3E1V 1NhUmk2V0wzYjFGZUZQcStYTG55RzNkT3dVQTg4ZWp5Zz09Cj1ScVU1Ci0tLS0tRU5EIFBHUCBN RVNTQUdFLS0tLS0K X-Developer-Key: i=k.jensen@samsung.com; a=openpgp; fpr=DDCA4D9C9EF931CC3468427263D56FC5E55DA838 From: Joel Granados IO page faults are no longer dependent on CONFIG_INTEL_IOMMU_SVM. Move all Page Request Queue (PRQ) functions that handle prq events to a new file in drivers/iommu/intel/prq.c. The page_req_des struct is made available in drivers/iommu/intel/iommu.h. No functional changes are intended. This is a preparation patch to enable the use of IO page faults outside the SVM and nested use cases. Signed-off-by: Joel Granados --- drivers/iommu/intel/Makefile | 2 +- drivers/iommu/intel/iommu.c | 18 +-- drivers/iommu/intel/iommu.h | 40 +++++- drivers/iommu/intel/prq.c | 290 ++++++++++++++++++++++++++++++++++++++++ drivers/iommu/intel/svm.c | 308 ---------------------------------------= ---- 5 files changed, 331 insertions(+), 327 deletions(-) diff --git a/drivers/iommu/intel/Makefile b/drivers/iommu/intel/Makefile index c8beb0281559..d3bb0798092d 100644 --- a/drivers/iommu/intel/Makefile +++ b/drivers/iommu/intel/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 obj-$(CONFIG_DMAR_TABLE) +=3D dmar.o -obj-$(CONFIG_INTEL_IOMMU) +=3D iommu.o pasid.o nested.o cache.o +obj-$(CONFIG_INTEL_IOMMU) +=3D iommu.o pasid.o nested.o cache.o prq.o obj-$(CONFIG_DMAR_TABLE) +=3D trace.o cap_audit.o obj-$(CONFIG_DMAR_PERF) +=3D perf.o obj-$(CONFIG_INTEL_IOMMU_DEBUGFS) +=3D debugfs.o diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 9ff8b83c19a3..4ca284d53a6b 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -1487,12 +1487,10 @@ static void free_dmar_iommu(struct intel_iommu *iom= mu) /* free context mapping */ free_context_table(iommu); =20 -#ifdef CONFIG_INTEL_IOMMU_SVM if (pasid_supported(iommu)) { if (ecap_prs(iommu->ecap)) - intel_svm_finish_prq(iommu); + intel_finish_prq(iommu); } -#endif } =20 /* @@ -2480,19 +2478,18 @@ static int __init init_dmars(void) =20 iommu_flush_write_buffer(iommu); =20 -#ifdef CONFIG_INTEL_IOMMU_SVM if (pasid_supported(iommu) && ecap_prs(iommu->ecap)) { /* * Call dmar_alloc_hwirq() with dmar_global_lock held, * could cause possible lock race condition. */ up_write(&dmar_global_lock); - ret =3D intel_svm_enable_prq(iommu); + ret =3D intel_enable_prq(iommu); down_write(&dmar_global_lock); if (ret) goto free_iommu; } -#endif + ret =3D dmar_set_interrupt(iommu); if (ret) goto free_iommu; @@ -2922,13 +2919,12 @@ static int intel_iommu_add(struct dmar_drhd_unit *d= maru) intel_iommu_init_qi(iommu); iommu_flush_write_buffer(iommu); =20 -#ifdef CONFIG_INTEL_IOMMU_SVM if (pasid_supported(iommu) && ecap_prs(iommu->ecap)) { - ret =3D intel_svm_enable_prq(iommu); + ret =3D intel_enable_prq(iommu); if (ret) goto disable_iommu; } -#endif + ret =3D dmar_set_interrupt(iommu); if (ret) goto disable_iommu; @@ -4669,9 +4665,7 @@ const struct iommu_ops intel_iommu_ops =3D { .def_domain_type =3D device_def_domain_type, .remove_dev_pasid =3D intel_iommu_remove_dev_pasid, .pgsize_bitmap =3D SZ_4K, -#ifdef CONFIG_INTEL_IOMMU_SVM - .page_response =3D intel_svm_page_response, -#endif + .page_response =3D intel_page_response, .default_domain_ops =3D &(const struct iommu_domain_ops) { .attach_dev =3D intel_iommu_attach_device, .set_dev_pasid =3D intel_iommu_set_dev_pasid, diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h index b67c14da1240..b3d98e706ed8 100644 --- a/drivers/iommu/intel/iommu.h +++ b/drivers/iommu/intel/iommu.h @@ -694,6 +694,35 @@ struct iommu_pmu { #define IOMMU_IRQ_ID_OFFSET_PRQ (DMAR_UNITS_SUPPORTED) #define IOMMU_IRQ_ID_OFFSET_PERF (2 * DMAR_UNITS_SUPPORTED) =20 +/* Page request queue descriptor */ +struct page_req_dsc { + union { + struct { + u64 type:8; + u64 pasid_present:1; + u64 rsvd:7; + u64 rid:16; + u64 pasid:20; + u64 exe_req:1; + u64 pm_req:1; + u64 rsvd2:10; + }; + u64 qw_0; + }; + union { + struct { + u64 rd_req:1; + u64 wr_req:1; + u64 lpig:1; + u64 prg_index:9; + u64 addr:52; + }; + u64 qw_1; + }; + u64 qw_2; + u64 qw_3; +}; + struct intel_iommu { void __iomem *reg; /* Pointer to hardware regs, virtual addr */ u64 reg_phys; /* physical address of hw register set */ @@ -719,12 +748,10 @@ struct intel_iommu { =20 struct iommu_flush flush; #endif -#ifdef CONFIG_INTEL_IOMMU_SVM struct page_req_dsc *prq; unsigned char prq_name[16]; /* Name for PRQ interrupt */ unsigned long prq_seq_number; struct completion prq_complete; -#endif struct iopf_queue *iopf_queue; unsigned char iopfq_name[16]; /* Synchronization between fault report and iommu device release. */ @@ -1156,12 +1183,13 @@ void intel_context_flush_present(struct device_doma= in_info *info, struct context_entry *context, bool affect_domains); =20 +int intel_enable_prq(struct intel_iommu *iommu); +int intel_finish_prq(struct intel_iommu *iommu); +void intel_page_response(struct device *dev, struct iopf_fault *evt, + struct iommu_page_response *msg); + #ifdef CONFIG_INTEL_IOMMU_SVM void intel_svm_check(struct intel_iommu *iommu); -int intel_svm_enable_prq(struct intel_iommu *iommu); -int intel_svm_finish_prq(struct intel_iommu *iommu); -void intel_svm_page_response(struct device *dev, struct iopf_fault *evt, - struct iommu_page_response *msg); struct iommu_domain *intel_svm_domain_alloc(struct device *dev, struct mm_struct *mm); void intel_drain_pasid_prq(struct device *dev, u32 pasid); diff --git a/drivers/iommu/intel/prq.c b/drivers/iommu/intel/prq.c new file mode 100644 index 000000000000..2814373e95d8 --- /dev/null +++ b/drivers/iommu/intel/prq.c @@ -0,0 +1,290 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright =C2=A9 2015 Intel Corporation. + * + * Authors: David Woodhouse + */ + +#include + +#include "iommu.h" +#include "../iommu-pages.h" +#include "trace.h" + +static bool is_canonical_address(u64 addr) +{ + int shift =3D 64 - (__VIRTUAL_MASK_SHIFT + 1); + long saddr =3D (long) addr; + + return (((saddr << shift) >> shift) =3D=3D saddr); +} + +static void handle_bad_prq_event(struct intel_iommu *iommu, + struct page_req_dsc *req, int result) +{ + struct qi_desc desc =3D { }; + + pr_err("%s: Invalid page request: %08llx %08llx\n", + iommu->name, ((unsigned long long *)req)[0], + ((unsigned long long *)req)[1]); + + if (!req->lpig) + return; + + desc.qw0 =3D QI_PGRP_PASID(req->pasid) | + QI_PGRP_DID(req->rid) | + QI_PGRP_PASID_P(req->pasid_present) | + QI_PGRP_RESP_CODE(result) | + QI_PGRP_RESP_TYPE; + desc.qw1 =3D QI_PGRP_IDX(req->prg_index) | + QI_PGRP_LPIG(req->lpig); + + qi_submit_sync(iommu, &desc, 1, 0); +} + +static int prq_to_iommu_prot(struct page_req_dsc *req) +{ + int prot =3D 0; + + if (req->rd_req) + prot |=3D IOMMU_FAULT_PERM_READ; + if (req->wr_req) + prot |=3D IOMMU_FAULT_PERM_WRITE; + if (req->exe_req) + prot |=3D IOMMU_FAULT_PERM_EXEC; + if (req->pm_req) + prot |=3D IOMMU_FAULT_PERM_PRIV; + + return prot; +} + +static void intel_prq_report(struct intel_iommu *iommu, struct device *dev, + struct page_req_dsc *desc) +{ + struct iopf_fault event =3D { }; + + /* Fill in event data for device specific processing */ + event.fault.type =3D IOMMU_FAULT_PAGE_REQ; + event.fault.prm.addr =3D (u64)desc->addr << VTD_PAGE_SHIFT; + event.fault.prm.pasid =3D desc->pasid; + event.fault.prm.grpid =3D desc->prg_index; + event.fault.prm.perm =3D prq_to_iommu_prot(desc); + + if (desc->lpig) + event.fault.prm.flags |=3D IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE; + if (desc->pasid_present) { + event.fault.prm.flags |=3D IOMMU_FAULT_PAGE_REQUEST_PASID_VALID; + event.fault.prm.flags |=3D IOMMU_FAULT_PAGE_RESPONSE_NEEDS_PASID; + } + + iommu_report_device_fault(dev, &event); +} + +static irqreturn_t prq_event_thread(int irq, void *d) +{ + struct intel_iommu *iommu =3D d; + struct page_req_dsc *req; + int head, tail, handled; + struct device *dev; + u64 address; + + /* + * Clear PPR bit before reading head/tail registers, to ensure that + * we get a new interrupt if needed. + */ + writel(DMA_PRS_PPR, iommu->reg + DMAR_PRS_REG); + + tail =3D dmar_readq(iommu->reg + DMAR_PQT_REG) & PRQ_RING_MASK; + head =3D dmar_readq(iommu->reg + DMAR_PQH_REG) & PRQ_RING_MASK; + handled =3D (head !=3D tail); + while (head !=3D tail) { + req =3D &iommu->prq[head / sizeof(*req)]; + address =3D (u64)req->addr << VTD_PAGE_SHIFT; + + if (unlikely(!req->pasid_present)) { + pr_err("IOMMU: %s: Page request without PASID\n", + iommu->name); +bad_req: + handle_bad_prq_event(iommu, req, QI_RESP_INVALID); + goto prq_advance; + } + + if (unlikely(!is_canonical_address(address))) { + pr_err("IOMMU: %s: Address is not canonical\n", + iommu->name); + goto bad_req; + } + + if (unlikely(req->pm_req && (req->rd_req | req->wr_req))) { + pr_err("IOMMU: %s: Page request in Privilege Mode\n", + iommu->name); + goto bad_req; + } + + if (unlikely(req->exe_req && req->rd_req)) { + pr_err("IOMMU: %s: Execution request not supported\n", + iommu->name); + goto bad_req; + } + + /* Drop Stop Marker message. No need for a response. */ + if (unlikely(req->lpig && !req->rd_req && !req->wr_req)) + goto prq_advance; + + /* + * If prq is to be handled outside iommu driver via receiver of + * the fault notifiers, we skip the page response here. + */ + mutex_lock(&iommu->iopf_lock); + dev =3D device_rbtree_find(iommu, req->rid); + if (!dev) { + mutex_unlock(&iommu->iopf_lock); + goto bad_req; + } + + intel_prq_report(iommu, dev, req); + trace_prq_report(iommu, dev, req->qw_0, req->qw_1, + req->qw_2, req->qw_3, + iommu->prq_seq_number++); + mutex_unlock(&iommu->iopf_lock); +prq_advance: + head =3D (head + sizeof(*req)) & PRQ_RING_MASK; + } + + dmar_writeq(iommu->reg + DMAR_PQH_REG, tail); + + /* + * Clear the page request overflow bit and wake up all threads that + * are waiting for the completion of this handling. + */ + if (readl(iommu->reg + DMAR_PRS_REG) & DMA_PRS_PRO) { + pr_info_ratelimited("IOMMU: %s: PRQ overflow detected\n", + iommu->name); + head =3D dmar_readq(iommu->reg + DMAR_PQH_REG) & PRQ_RING_MASK; + tail =3D dmar_readq(iommu->reg + DMAR_PQT_REG) & PRQ_RING_MASK; + if (head =3D=3D tail) { + iopf_queue_discard_partial(iommu->iopf_queue); + writel(DMA_PRS_PRO, iommu->reg + DMAR_PRS_REG); + pr_info_ratelimited("IOMMU: %s: PRQ overflow cleared", + iommu->name); + } + } + + if (!completion_done(&iommu->prq_complete)) + complete(&iommu->prq_complete); + + return IRQ_RETVAL(handled); +} + +int intel_enable_prq(struct intel_iommu *iommu) +{ + struct iopf_queue *iopfq; + int irq, ret; + + iommu->prq =3D iommu_alloc_pages_node(iommu->node, GFP_KERNEL, PRQ_ORDER); + if (!iommu->prq) { + pr_warn("IOMMU: %s: Failed to allocate page request queue\n", + iommu->name); + return -ENOMEM; + } + + irq =3D dmar_alloc_hwirq(IOMMU_IRQ_ID_OFFSET_PRQ + iommu->seq_id, iommu->= node, iommu); + if (irq <=3D 0) { + pr_err("IOMMU: %s: Failed to create IRQ vector for page request queue\n", + iommu->name); + ret =3D -EINVAL; + goto free_prq; + } + iommu->pr_irq =3D irq; + + snprintf(iommu->iopfq_name, sizeof(iommu->iopfq_name), + "dmar%d-iopfq", iommu->seq_id); + iopfq =3D iopf_queue_alloc(iommu->iopfq_name); + if (!iopfq) { + pr_err("IOMMU: %s: Failed to allocate iopf queue\n", iommu->name); + ret =3D -ENOMEM; + goto free_hwirq; + } + iommu->iopf_queue =3D iopfq; + + snprintf(iommu->prq_name, sizeof(iommu->prq_name), "dmar%d-prq", iommu->s= eq_id); + + ret =3D request_threaded_irq(irq, NULL, prq_event_thread, IRQF_ONESHOT, + iommu->prq_name, iommu); + if (ret) { + pr_err("IOMMU: %s: Failed to request IRQ for page request queue\n", + iommu->name); + goto free_iopfq; + } + dmar_writeq(iommu->reg + DMAR_PQH_REG, 0ULL); + dmar_writeq(iommu->reg + DMAR_PQT_REG, 0ULL); + dmar_writeq(iommu->reg + DMAR_PQA_REG, virt_to_phys(iommu->prq) | PRQ_ORD= ER); + + init_completion(&iommu->prq_complete); + + return 0; + +free_iopfq: + iopf_queue_free(iommu->iopf_queue); + iommu->iopf_queue =3D NULL; +free_hwirq: + dmar_free_hwirq(irq); + iommu->pr_irq =3D 0; +free_prq: + iommu_free_pages(iommu->prq, PRQ_ORDER); + iommu->prq =3D NULL; + + return ret; +} + +int intel_finish_prq(struct intel_iommu *iommu) +{ + dmar_writeq(iommu->reg + DMAR_PQH_REG, 0ULL); + dmar_writeq(iommu->reg + DMAR_PQT_REG, 0ULL); + dmar_writeq(iommu->reg + DMAR_PQA_REG, 0ULL); + + if (iommu->pr_irq) { + free_irq(iommu->pr_irq, iommu); + dmar_free_hwirq(iommu->pr_irq); + iommu->pr_irq =3D 0; + } + + if (iommu->iopf_queue) { + iopf_queue_free(iommu->iopf_queue); + iommu->iopf_queue =3D NULL; + } + + iommu_free_pages(iommu->prq, PRQ_ORDER); + iommu->prq =3D NULL; + + return 0; +} + +void intel_page_response(struct device *dev, struct iopf_fault *evt, + struct iommu_page_response *msg) +{ + struct device_domain_info *info =3D dev_iommu_priv_get(dev); + struct intel_iommu *iommu =3D info->iommu; + u8 bus =3D info->bus, devfn =3D info->devfn; + struct iommu_fault_page_request *prm; + struct qi_desc desc; + bool pasid_present; + bool last_page; + u16 sid; + + prm =3D &evt->fault.prm; + sid =3D PCI_DEVID(bus, devfn); + pasid_present =3D prm->flags & IOMMU_FAULT_PAGE_REQUEST_PASID_VALID; + last_page =3D prm->flags & IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE; + + desc.qw0 =3D QI_PGRP_PASID(prm->pasid) | QI_PGRP_DID(sid) | + QI_PGRP_PASID_P(pasid_present) | + QI_PGRP_RESP_CODE(msg->code) | + QI_PGRP_RESP_TYPE; + desc.qw1 =3D QI_PGRP_IDX(prm->grpid) | QI_PGRP_LPIG(last_page); + desc.qw2 =3D 0; + desc.qw3 =3D 0; + + qi_submit_sync(iommu, &desc, 1, 0); +} + diff --git a/drivers/iommu/intel/svm.c b/drivers/iommu/intel/svm.c index 0e3a9b38bef2..c50c68df1fb2 100644 --- a/drivers/iommu/intel/svm.c +++ b/drivers/iommu/intel/svm.c @@ -25,92 +25,6 @@ #include "../iommu-pages.h" #include "trace.h" =20 -static irqreturn_t prq_event_thread(int irq, void *d); - -int intel_svm_enable_prq(struct intel_iommu *iommu) -{ - struct iopf_queue *iopfq; - int irq, ret; - - iommu->prq =3D iommu_alloc_pages_node(iommu->node, GFP_KERNEL, PRQ_ORDER); - if (!iommu->prq) { - pr_warn("IOMMU: %s: Failed to allocate page request queue\n", - iommu->name); - return -ENOMEM; - } - - irq =3D dmar_alloc_hwirq(IOMMU_IRQ_ID_OFFSET_PRQ + iommu->seq_id, iommu->= node, iommu); - if (irq <=3D 0) { - pr_err("IOMMU: %s: Failed to create IRQ vector for page request queue\n", - iommu->name); - ret =3D -EINVAL; - goto free_prq; - } - iommu->pr_irq =3D irq; - - snprintf(iommu->iopfq_name, sizeof(iommu->iopfq_name), - "dmar%d-iopfq", iommu->seq_id); - iopfq =3D iopf_queue_alloc(iommu->iopfq_name); - if (!iopfq) { - pr_err("IOMMU: %s: Failed to allocate iopf queue\n", iommu->name); - ret =3D -ENOMEM; - goto free_hwirq; - } - iommu->iopf_queue =3D iopfq; - - snprintf(iommu->prq_name, sizeof(iommu->prq_name), "dmar%d-prq", iommu->s= eq_id); - - ret =3D request_threaded_irq(irq, NULL, prq_event_thread, IRQF_ONESHOT, - iommu->prq_name, iommu); - if (ret) { - pr_err("IOMMU: %s: Failed to request IRQ for page request queue\n", - iommu->name); - goto free_iopfq; - } - dmar_writeq(iommu->reg + DMAR_PQH_REG, 0ULL); - dmar_writeq(iommu->reg + DMAR_PQT_REG, 0ULL); - dmar_writeq(iommu->reg + DMAR_PQA_REG, virt_to_phys(iommu->prq) | PRQ_ORD= ER); - - init_completion(&iommu->prq_complete); - - return 0; - -free_iopfq: - iopf_queue_free(iommu->iopf_queue); - iommu->iopf_queue =3D NULL; -free_hwirq: - dmar_free_hwirq(irq); - iommu->pr_irq =3D 0; -free_prq: - iommu_free_pages(iommu->prq, PRQ_ORDER); - iommu->prq =3D NULL; - - return ret; -} - -int intel_svm_finish_prq(struct intel_iommu *iommu) -{ - dmar_writeq(iommu->reg + DMAR_PQH_REG, 0ULL); - dmar_writeq(iommu->reg + DMAR_PQT_REG, 0ULL); - dmar_writeq(iommu->reg + DMAR_PQA_REG, 0ULL); - - if (iommu->pr_irq) { - free_irq(iommu->pr_irq, iommu); - dmar_free_hwirq(iommu->pr_irq); - iommu->pr_irq =3D 0; - } - - if (iommu->iopf_queue) { - iopf_queue_free(iommu->iopf_queue); - iommu->iopf_queue =3D NULL; - } - - iommu_free_pages(iommu->prq, PRQ_ORDER); - iommu->prq =3D NULL; - - return 0; -} - void intel_svm_check(struct intel_iommu *iommu) { if (!pasid_supported(iommu)) @@ -237,43 +151,6 @@ static int intel_svm_set_dev_pasid(struct iommu_domain= *domain, return ret; } =20 -/* Page request queue descriptor */ -struct page_req_dsc { - union { - struct { - u64 type:8; - u64 pasid_present:1; - u64 rsvd:7; - u64 rid:16; - u64 pasid:20; - u64 exe_req:1; - u64 pm_req:1; - u64 rsvd2:10; - }; - u64 qw_0; - }; - union { - struct { - u64 rd_req:1; - u64 wr_req:1; - u64 lpig:1; - u64 prg_index:9; - u64 addr:52; - }; - u64 qw_1; - }; - u64 qw_2; - u64 qw_3; -}; - -static bool is_canonical_address(u64 addr) -{ - int shift =3D 64 - (__VIRTUAL_MASK_SHIFT + 1); - long saddr =3D (long) addr; - - return (((saddr << shift) >> shift) =3D=3D saddr); -} - /** * intel_drain_pasid_prq - Drain page requests and responses for a pasid * @dev: target device @@ -363,191 +240,6 @@ void intel_drain_pasid_prq(struct device *dev, u32 pa= sid) } } =20 -static int prq_to_iommu_prot(struct page_req_dsc *req) -{ - int prot =3D 0; - - if (req->rd_req) - prot |=3D IOMMU_FAULT_PERM_READ; - if (req->wr_req) - prot |=3D IOMMU_FAULT_PERM_WRITE; - if (req->exe_req) - prot |=3D IOMMU_FAULT_PERM_EXEC; - if (req->pm_req) - prot |=3D IOMMU_FAULT_PERM_PRIV; - - return prot; -} - -static void intel_svm_prq_report(struct intel_iommu *iommu, struct device = *dev, - struct page_req_dsc *desc) -{ - struct iopf_fault event =3D { }; - - /* Fill in event data for device specific processing */ - event.fault.type =3D IOMMU_FAULT_PAGE_REQ; - event.fault.prm.addr =3D (u64)desc->addr << VTD_PAGE_SHIFT; - event.fault.prm.pasid =3D desc->pasid; - event.fault.prm.grpid =3D desc->prg_index; - event.fault.prm.perm =3D prq_to_iommu_prot(desc); - - if (desc->lpig) - event.fault.prm.flags |=3D IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE; - if (desc->pasid_present) { - event.fault.prm.flags |=3D IOMMU_FAULT_PAGE_REQUEST_PASID_VALID; - event.fault.prm.flags |=3D IOMMU_FAULT_PAGE_RESPONSE_NEEDS_PASID; - } - - iommu_report_device_fault(dev, &event); -} - -static void handle_bad_prq_event(struct intel_iommu *iommu, - struct page_req_dsc *req, int result) -{ - struct qi_desc desc =3D { }; - - pr_err("%s: Invalid page request: %08llx %08llx\n", - iommu->name, ((unsigned long long *)req)[0], - ((unsigned long long *)req)[1]); - - if (!req->lpig) - return; - - desc.qw0 =3D QI_PGRP_PASID(req->pasid) | - QI_PGRP_DID(req->rid) | - QI_PGRP_PASID_P(req->pasid_present) | - QI_PGRP_RESP_CODE(result) | - QI_PGRP_RESP_TYPE; - desc.qw1 =3D QI_PGRP_IDX(req->prg_index) | - QI_PGRP_LPIG(req->lpig); - - qi_submit_sync(iommu, &desc, 1, 0); -} - -static irqreturn_t prq_event_thread(int irq, void *d) -{ - struct intel_iommu *iommu =3D d; - struct page_req_dsc *req; - int head, tail, handled; - struct device *dev; - u64 address; - - /* - * Clear PPR bit before reading head/tail registers, to ensure that - * we get a new interrupt if needed. - */ - writel(DMA_PRS_PPR, iommu->reg + DMAR_PRS_REG); - - tail =3D dmar_readq(iommu->reg + DMAR_PQT_REG) & PRQ_RING_MASK; - head =3D dmar_readq(iommu->reg + DMAR_PQH_REG) & PRQ_RING_MASK; - handled =3D (head !=3D tail); - while (head !=3D tail) { - req =3D &iommu->prq[head / sizeof(*req)]; - address =3D (u64)req->addr << VTD_PAGE_SHIFT; - - if (unlikely(!req->pasid_present)) { - pr_err("IOMMU: %s: Page request without PASID\n", - iommu->name); -bad_req: - handle_bad_prq_event(iommu, req, QI_RESP_INVALID); - goto prq_advance; - } - - if (unlikely(!is_canonical_address(address))) { - pr_err("IOMMU: %s: Address is not canonical\n", - iommu->name); - goto bad_req; - } - - if (unlikely(req->pm_req && (req->rd_req | req->wr_req))) { - pr_err("IOMMU: %s: Page request in Privilege Mode\n", - iommu->name); - goto bad_req; - } - - if (unlikely(req->exe_req && req->rd_req)) { - pr_err("IOMMU: %s: Execution request not supported\n", - iommu->name); - goto bad_req; - } - - /* Drop Stop Marker message. No need for a response. */ - if (unlikely(req->lpig && !req->rd_req && !req->wr_req)) - goto prq_advance; - - /* - * If prq is to be handled outside iommu driver via receiver of - * the fault notifiers, we skip the page response here. - */ - mutex_lock(&iommu->iopf_lock); - dev =3D device_rbtree_find(iommu, req->rid); - if (!dev) { - mutex_unlock(&iommu->iopf_lock); - goto bad_req; - } - - intel_svm_prq_report(iommu, dev, req); - trace_prq_report(iommu, dev, req->qw_0, req->qw_1, - req->qw_2, req->qw_3, - iommu->prq_seq_number++); - mutex_unlock(&iommu->iopf_lock); -prq_advance: - head =3D (head + sizeof(*req)) & PRQ_RING_MASK; - } - - dmar_writeq(iommu->reg + DMAR_PQH_REG, tail); - - /* - * Clear the page request overflow bit and wake up all threads that - * are waiting for the completion of this handling. - */ - if (readl(iommu->reg + DMAR_PRS_REG) & DMA_PRS_PRO) { - pr_info_ratelimited("IOMMU: %s: PRQ overflow detected\n", - iommu->name); - head =3D dmar_readq(iommu->reg + DMAR_PQH_REG) & PRQ_RING_MASK; - tail =3D dmar_readq(iommu->reg + DMAR_PQT_REG) & PRQ_RING_MASK; - if (head =3D=3D tail) { - iopf_queue_discard_partial(iommu->iopf_queue); - writel(DMA_PRS_PRO, iommu->reg + DMAR_PRS_REG); - pr_info_ratelimited("IOMMU: %s: PRQ overflow cleared", - iommu->name); - } - } - - if (!completion_done(&iommu->prq_complete)) - complete(&iommu->prq_complete); - - return IRQ_RETVAL(handled); -} - -void intel_svm_page_response(struct device *dev, struct iopf_fault *evt, - struct iommu_page_response *msg) -{ - struct device_domain_info *info =3D dev_iommu_priv_get(dev); - struct intel_iommu *iommu =3D info->iommu; - u8 bus =3D info->bus, devfn =3D info->devfn; - struct iommu_fault_page_request *prm; - struct qi_desc desc; - bool pasid_present; - bool last_page; - u16 sid; - - prm =3D &evt->fault.prm; - sid =3D PCI_DEVID(bus, devfn); - pasid_present =3D prm->flags & IOMMU_FAULT_PAGE_REQUEST_PASID_VALID; - last_page =3D prm->flags & IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE; - - desc.qw0 =3D QI_PGRP_PASID(prm->pasid) | QI_PGRP_DID(sid) | - QI_PGRP_PASID_P(pasid_present) | - QI_PGRP_RESP_CODE(msg->code) | - QI_PGRP_RESP_TYPE; - desc.qw1 =3D QI_PGRP_IDX(prm->grpid) | QI_PGRP_LPIG(last_page); - desc.qw2 =3D 0; - desc.qw3 =3D 0; - - qi_submit_sync(iommu, &desc, 1, 0); -} - static void intel_svm_domain_free(struct iommu_domain *domain) { struct dmar_domain *dmar_domain =3D to_dmar_domain(domain); --=20 2.45.2 From nobody Fri Dec 19 15:23:15 2025 Received: from fhigh8-smtp.messagingengine.com (fhigh8-smtp.messagingengine.com [103.168.172.159]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E12051547E0 for ; Mon, 26 Aug 2024 11:40:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.159 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724672459; cv=none; b=QBslHzloxa6VYG1VYzSmckwLPAfkqCmIj7SkBwALeu4YIZF3/tYz2R/uQcuhq7c+uR0ZzVyvTIN4iUGE8ajTggXV3m1EFVW5QM1aqZknOY7azE/rcbcwaF+6cyZOUeNEyskPG2EOFvdt7Ky8h3hB88fYGMuAypNvSgNyACP6mTI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724672459; c=relaxed/simple; bh=6mOIGi8eWFfBUbXfMtI8aXTqY1hiHLwOMEvzBhD/gMA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WBJ5WUMqaTh8XanY2KdrZTdSU23c3k1ZQO35dadUBmC7ON9Q8jcA6xg4+LqxMPF5lnWWrPCEqQG1v8s9FaVmysrRiXT5NEBY5pDGaklmkLyXThlQv6V5y/A8p6Q9RpYxpmX8i4TkoiYV3dGkkzls/j0aW54BSbOHtTW0X/h0+GY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=irrelevant.dk; spf=pass smtp.mailfrom=irrelevant.dk; dkim=pass (2048-bit key) header.d=irrelevant.dk header.i=@irrelevant.dk header.b=V2vOca6H; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=Mn24dR6w; arc=none smtp.client-ip=103.168.172.159 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=irrelevant.dk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=irrelevant.dk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=irrelevant.dk header.i=@irrelevant.dk header.b="V2vOca6H"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="Mn24dR6w" Received: from phl-compute-04.internal (phl-compute-04.nyi.internal [10.202.2.44]) by mailfhigh.nyi.internal (Postfix) with ESMTP id 16D2A1151B30; Mon, 26 Aug 2024 07:40:57 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-04.internal (MEProxy); Mon, 26 Aug 2024 07:40:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=cc:cc:content-transfer-encoding:content-type:content-type :date:date:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:subject:subject:to:to; s=fm3; t=1724672457; x=1724758857; bh=Fl0Byk6Xko02Any/zqz+yNt8CJ2vkbrY q01MKLCOOiE=; b=V2vOca6HjHj9mb/PkdTHTPQwce2eLBP6e1Wq86sYd2iRd2cs DfdSKsbDqXlg4UPg1LnDXdfV3a3dSmXZwooNzphwrrK4ibyCBgMxP5w0eKYTElcg u0pHdjpH+u6F9cPlXZ9AX9WiuvYHGEa6Y6NCmmO1lDmA3fNReuQvP1QIqpzIcz/n 3OobJ/GOdEiPnzKOwKu/FWqG31jaQ7EpoOdr6lmbdF1TCLfoHwMTSUv7VpalPz/X 0g1KpAmfXlCEWeJG9yCHryMtBH/F94dGB7xSVlUO0gUjVHhnHQnAZ9JbVMN+fgQ4 Ful7ud9Tm0E8b3/N1ETfZgpYeFN1BmMFurbMaA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1724672457; x= 1724758857; bh=Fl0Byk6Xko02Any/zqz+yNt8CJ2vkbrYq01MKLCOOiE=; b=M n24dR6wAW1aVWcuKDxg6bunmo1GFcVr0KrJp6kCFYNyCAy2WuSEOAVCaZlrOWsFV /q0B5okbaEeONzJRlGffIHeIzuQB+HDnqaTVW5G6m7oOBdOWg1hmWlQiFIiNVixc H0zIvNWhqC5XrTSzxIJGO96ex4QsEYp3Ct/ndkJCmpUDM4EEsVLlPe9duYzs3VwQ OVyZzRuwHv8eAaIV3SSUtgdFXHvVBmjq7SOQhMucMYqPce5XW/WvIX8NCSuAjEw8 ajg0VRXrLYyZ+jbrqHj3BbOo9qB2HWsLL08EcDTG0Whd8/RlKKZUEkfQWQXLprK0 AVyo8paAtT67GNtiUzwOg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddruddvkedggedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdej necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth drughkqeenucggtffrrghtthgvrhhnpeekiedvtdeuhefffedutdelfeekhfeitddtudev gefgffeiteevfffhhefggefhffenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht thhopeduvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepjhdrghhrrghnrgguoh hssehsrghmshhunhhgrdgtohhmpdhrtghpthhtohepkhdrjhgvnhhsvghnsehsrghmshhu nhhgrdgtohhmpdhrtghpthhtohepkhgvvhhinhdrthhirghnsehinhhtvghlrdgtohhmpd hrtghpthhtohepugifmhifvdesihhnfhhrrgguvggrugdrohhrghdprhgtphhtthhopehi ohhmmhhusehlihhsthhsrdhlihhnuhigrdguvghvpdhrtghpthhtoheprhhosghinhdrmh hurhhphhihsegrrhhmrdgtohhmpdhrtghpthhtohepsggrohhluhdrlhhusehlihhnuhig rdhinhhtvghlrdgtohhmpdhrtghpthhtohepmhhinhifohhordhimhesshgrmhhsuhhngh drtghomhdprhgtphhtthhopehjohhroheskegshihtvghsrdhorhhg X-ME-Proxy: Feedback-ID: idc91472f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 26 Aug 2024 07:40:54 -0400 (EDT) From: Klaus Jensen Date: Mon, 26 Aug 2024 13:40:28 +0200 Subject: [PATCH RFC PREVIEW 2/6] iommu: Make IOMMU_IOPF selectable in Kconfig Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240826-iopf-for-all-v1-2-59174e6a7528@samsung.com> References: <20240826-iopf-for-all-v1-0-59174e6a7528@samsung.com> In-Reply-To: <20240826-iopf-for-all-v1-0-59174e6a7528@samsung.com> To: David Woodhouse , Lu Baolu , Joerg Roedel , Will Deacon , Robin Murphy , Jason Gunthorpe , Kevin Tian Cc: Minwoo Im , linux-kernel@vger.kernel.org, iommu@lists.linux.dev, Joel Granados , Klaus Jensen X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1119; i=k.jensen@samsung.com; h=from:subject:message-id; bh=ht2xZMigewF9A7qohlF48obc1MLGHg3kw4jDBytvoWE=; b=LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tCgpvd0o0bkFGdEFaTCtrQTBEQUFvQlRlR3ZNV zFQRGVrQnl5WmlBR2JNYWIvVThUOWJWcXI3bXpWc2JOaVR4eURDCnJlbzUwTCtCQndiYW9GNHZX c2pQQjRrQk13UUFBUW9BSFJZaEJGSW9NNnAxNHR6bW9rZG13RTNocnpGdFR3M3AKQlFKbXpHbS9 BQW9KRUUzaHJ6RnRUdzNwZEw4SC8xeWZYRFlJOFpuL0gyQk9STEZibjVxM1VDb0gwRU1Tay9XTA pOcG9QTlFEMG42Y1JoYjJodnUzaWgzb0xzeC9RN3hYNE1PYStGQWxxVDh0Qk83YXJPRitSZFhYZ jF3SkNTM2JYCm51NExITEwzZUFHdTJIbjAyRE5ibldCWFIrZU5KQWlyM2NDQ2VIWDFQemh1Wkpo RTl2TUJTbnBtUEJuck9jYWQKbFF4OXpXL1NRVFRxSTQySzI2V1pETjZ5Q2twZmlPSkRuY0xmeEk 5VWl0aHRwbWJoYzdOb0srU2JQSCtnYWJPZgptSjlFdTdhMklKRE1rZUZxR3JVWlRiUm9LY3k0UC treTJRSUNrT3BNUnVrazZ2anB0LytueUs0K052UDc4NDlZCld2SXorcFh2cnJLMUdZaFFaRWp0K 1RyT1lKMTVuNlRuTHFiaytyRVBKU016cDM2bjhLOFdyckw1Cj04anQ4Ci0tLS0tRU5EIFBHUCBN RVNTQUdFLS0tLS0K X-Developer-Key: i=k.jensen@samsung.com; a=openpgp; fpr=DDCA4D9C9EF931CC3468427263D56FC5E55DA838 From: Joel Granados IOMMU_IOPF is no longer selectable through INTEL_IOMMU_SVM effectively severing their relation and allowing them to be used independently. Signed-off-by: Joel Granados --- drivers/iommu/Kconfig | 2 +- drivers/iommu/intel/Kconfig | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig index a82f10054aec..d3ee8a0ad4a6 100644 --- a/drivers/iommu/Kconfig +++ b/drivers/iommu/Kconfig @@ -164,7 +164,7 @@ config IOMMU_SVA bool =20 config IOMMU_IOPF - bool + bool "Enable IO page fault in IOMMU" =20 config FSL_PAMU bool "Freescale IOMMU support" diff --git a/drivers/iommu/intel/Kconfig b/drivers/iommu/intel/Kconfig index f52fb39c968e..fb5a4593c197 100644 --- a/drivers/iommu/intel/Kconfig +++ b/drivers/iommu/intel/Kconfig @@ -51,7 +51,6 @@ config INTEL_IOMMU_SVM depends on X86_64 select MMU_NOTIFIER select IOMMU_SVA - select IOMMU_IOPF help Shared Virtual Memory (SVM) provides a facility for devices to access DMA resources through process address space by --=20 2.45.2 From nobody Fri Dec 19 15:23:15 2025 Received: from fout5-smtp.messagingengine.com (fout5-smtp.messagingengine.com [103.168.172.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0FB8C15539D for ; Mon, 26 Aug 2024 11:40:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724672461; cv=none; b=BxOw5VdFVs8dLUJaJLfGBIxC+vrBJbR/SZGFoc6ccymiPintqu0aMgML6KNwhMtUGISVnyS2yyBDoCwkltuNGm7E44H/5/9H6ZgAE4uH5DjBLlFbEhDFFB0XwJICZAfUy/AdmIUa9/YQ4P+TlyUEi29tmeB1/VneU6LQlYbLwQI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724672461; c=relaxed/simple; bh=hs/ZudjzfEqcAh7HluGv+nmR1yWWfTmWeR7gImxnI8g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tCIgXCXo+Kyy/YrIScPumRcuPnSyFlsql0X3Q2tAwaJ1prCmpoxMom/D9g+7aLMHBbirjJ6gF+mifDrBq6VOn+ZXkkaaOvCebmm2200PY/Bj3tIZHLTFsVSBGyiKfbe5oguw7zfphpetrzSsRNp4RDKz13GH2ilEDbCo5a5aIWw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=irrelevant.dk; spf=pass smtp.mailfrom=irrelevant.dk; dkim=pass (2048-bit key) header.d=irrelevant.dk header.i=@irrelevant.dk header.b=YldQ0X8v; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=OIiLmPgl; arc=none smtp.client-ip=103.168.172.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=irrelevant.dk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=irrelevant.dk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=irrelevant.dk header.i=@irrelevant.dk header.b="YldQ0X8v"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="OIiLmPgl" Received: from phl-compute-02.internal (phl-compute-02.nyi.internal [10.202.2.42]) by mailfout.nyi.internal (Postfix) with ESMTP id 4A3B11390A12; Mon, 26 Aug 2024 07:40:59 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-02.internal (MEProxy); Mon, 26 Aug 2024 07:40:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=cc:cc:content-transfer-encoding:content-type:content-type :date:date:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:subject:subject:to:to; s=fm3; t=1724672459; x=1724758859; bh=tWVv16qdxasnFH/zAKrmYDtll4cJrF5f qwTGoDxNSrM=; b=YldQ0X8v7UitvauDHEVFkh/KmYhRsw2Y8rCvVmxUPoSNP2/z FHqfTXrpYQRM6KNX502rSSjqTyVsdqipxtWFcwn5pwD9WPeI863HqQLTCStcb3gk u6mLHbfBJ35U8B/sFgWKlmLZm3ODcMHfcumyEQmmB41szTLY2vEVYV1vUWJ9vppP SqNQ0HFRRimjcZLx4+Q5D400NeJTpRMEFXGDE28zvkdnF9euLWv88Z3SRR1128hD fUfomopFLeP4uZEazYxp7jv4M0sV3OJo2/0hB7tbPZzdZGE/9qXT9kKYv6dKKYYC 3n4PR10uv4VsnNW29BOfTwF0aRo2ou+33PUbtA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1724672459; x= 1724758859; bh=tWVv16qdxasnFH/zAKrmYDtll4cJrF5fqwTGoDxNSrM=; b=O IiLmPglbBdAQpKtaq1dUyahYItaSq9IEf3p05VX798AKRCAaWt281Y7P4H43/xqt xz6YXFYEnBlkzFjB1YGpTphaOHyR4kRiExEyrL+QQzn5zPzc1W+ktjbKGGE9kOMn 2vqI2kdyOYTENtfq5n9Z7h7sIgPU3NyLhb+I/RS6fE9fTTPinXAk+JEcIN4jXxDu i+Akjbudn5jZ1ZxPG4aHcQrPhWlhFf6ipZHkwF2QT5HAQWRSP1Zh9GF40tKZBS7G 0Wr8hHQo8W8r2oerM7PmufsFeP+S1GO1JhmslMTj2D++lFJlLVvp87Aax2nIoayI sVi0yYDWDHKIdRW2138WA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddruddvkedggedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdej necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth drughkqeenucggtffrrghtthgvrhhnpeekiedvtdeuhefffedutdelfeekhfeitddtudev gefgffeiteevfffhhefggefhffenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht thhopeduvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepjhdrghhrrghnrgguoh hssehsrghmshhunhhgrdgtohhmpdhrtghpthhtohepkhdrjhgvnhhsvghnsehsrghmshhu nhhgrdgtohhmpdhrtghpthhtohepkhgvvhhinhdrthhirghnsehinhhtvghlrdgtohhmpd hrtghpthhtohepugifmhifvdesihhnfhhrrgguvggrugdrohhrghdprhgtphhtthhopehi ohhmmhhusehlihhsthhsrdhlihhnuhigrdguvghvpdhrtghpthhtoheprhhosghinhdrmh hurhhphhihsegrrhhmrdgtohhmpdhrtghpthhtohepsggrohhluhdrlhhusehlihhnuhig rdhinhhtvghlrdgtohhmpdhrtghpthhtohepmhhinhifohhordhimhesshgrmhhsuhhngh drtghomhdprhgtphhtthhopehjohhroheskegshihtvghsrdhorhhg X-ME-Proxy: Feedback-ID: idc91472f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 26 Aug 2024 07:40:57 -0400 (EDT) From: Klaus Jensen Date: Mon, 26 Aug 2024 13:40:29 +0200 Subject: [PATCH RFC PREVIEW 3/6] iommufd: Enable PRI when doing the iommufd_hwpt_alloc Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240826-iopf-for-all-v1-3-59174e6a7528@samsung.com> References: <20240826-iopf-for-all-v1-0-59174e6a7528@samsung.com> In-Reply-To: <20240826-iopf-for-all-v1-0-59174e6a7528@samsung.com> To: David Woodhouse , Lu Baolu , Joerg Roedel , Will Deacon , Robin Murphy , Jason Gunthorpe , Kevin Tian Cc: Minwoo Im , linux-kernel@vger.kernel.org, iommu@lists.linux.dev, Joel Granados , Klaus Jensen X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1694; i=k.jensen@samsung.com; h=from:subject:message-id; bh=PpQLWdKZhPTArwQOEpcdZXSK5WSfDc067pv1+3sevyg=; b=LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tCgprQTBEQUFvQlRlR3ZNVzFQRGVrQnl5WmlBR 2JNYWIrajVvUnVhaVplSWd0T25udEg1UjZlQTcxaXVSNFlXdUZKCjZPS3crdFpsR1lrQk13UUFB UW9BSFJZaEJGSW9NNnAxNHR6bW9rZG13RTNocnpGdFR3M3BCUUptekdtL0FBb0oKRUUzaHJ6RnR UdzNwc1d3SUFMZkJycTFoSnZyazJhWWxwdWtJTy9KQ3MydTBLZzR3RGhibFdGK1dTYU5RZ0J1cw ovQlNCeE9CUVdicmdqd0VtR1V5blR2M0granNJb29Qc2kvbk5xd2lYUjlKejViTWQ0aXd5c0NuU kdGU1BvcTlCCmd2NGI0SnBMZkdvcnVRNFNRVmFhRzBmWWppU0srMVZuK3NDZTNBMlAvbmIvYjJK QW14YnlpZUxRTzY3QmE4TmMKZU9NZUp1Qms3bFVjNG1lcmlJQ1hTRXRtMWsrNEJXWmprdDVFTWl oazJNdWpSQjJ6cTZIL3dPSVRGTEpzYlhZNgpNRVF5YlhRT2ZBMlFQSFRUSnd6clJXU1Z6T0ZhOU FUa3hyYVcvd3ZRYmc2K28yMlZWWTFFWWFwNEw1Q1FPVUNwCkFmdDZVMDdaamM1UThHMnAzeStUQ 2kxRmJ2NnRSOEtURHlJdlNWTT0KPUJmSk8KLS0tLS1FTkQgUEdQIE1FU1NBR0UtLS0tLQo= X-Developer-Key: i=k.jensen@samsung.com; a=openpgp; fpr=DDCA4D9C9EF931CC3468427263D56FC5E55DA838 From: Joel Granados Add IOMMU_HWPT_FAULT_ID_VALID as part of the valid flags when doing an iommufd_hwpt_alloc allowing the use of an iommu fault allocation (iommu_fault_alloc) with the IOMMU_HWPT_ALLOC ioctl. Signed-off-by: Joel Granados --- drivers/iommu/intel/iommu.c | 3 ++- drivers/iommu/iommufd/hw_pagetable.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 4ca284d53a6b..ada3507d2831 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -3716,7 +3716,8 @@ intel_iommu_domain_alloc_user(struct device *dev, u32= flags, } =20 if (flags & - (~(IOMMU_HWPT_ALLOC_NEST_PARENT | IOMMU_HWPT_ALLOC_DIRTY_TRACKING))) + (~(IOMMU_HWPT_ALLOC_NEST_PARENT | IOMMU_HWPT_ALLOC_DIRTY_TRACKING + | IOMMU_HWPT_FAULT_ID_VALID))) return ERR_PTR(-EOPNOTSUPP); if (nested_parent && !nested_supported(iommu)) return ERR_PTR(-EOPNOTSUPP); diff --git a/drivers/iommu/iommufd/hw_pagetable.c b/drivers/iommu/iommufd/h= w_pagetable.c index aefde4443671..88074e459995 100644 --- a/drivers/iommu/iommufd/hw_pagetable.c +++ b/drivers/iommu/iommufd/hw_pagetable.c @@ -107,7 +107,8 @@ iommufd_hwpt_paging_alloc(struct iommufd_ctx *ictx, str= uct iommufd_ioas *ioas, const struct iommu_user_data *user_data) { const u32 valid_flags =3D IOMMU_HWPT_ALLOC_NEST_PARENT | - IOMMU_HWPT_ALLOC_DIRTY_TRACKING; + IOMMU_HWPT_ALLOC_DIRTY_TRACKING | + IOMMU_HWPT_FAULT_ID_VALID; const struct iommu_ops *ops =3D dev_iommu_ops(idev->dev); struct iommufd_hwpt_paging *hwpt_paging; struct iommufd_hw_pagetable *hwpt; --=20 2.45.2 From nobody Fri Dec 19 15:23:15 2025 Received: from fout5-smtp.messagingengine.com (fout5-smtp.messagingengine.com [103.168.172.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6A757155CB8 for ; Mon, 26 Aug 2024 11:41:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724672464; cv=none; b=rplaUa8CPBxBkqjmZVPpkvykfnuxQ1OgEAYhKMrxWSFSCz/h963Tb28whCWAAjanpBJsutmXna9xbshnr2Gn9gNBrRD+0ndtP7YYEj/72z+n2qgnayWqmVF2D6EVihSW0LgQ3JRNOub+w6x125PuvLd6BOXfFRvSaqj3eFq9b48= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724672464; c=relaxed/simple; bh=QwdKBKUjHQcCaR0COG6te3pLXHZzB3VkLWQ3UeLhuyo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HeF7hyrX2M9BmS/rTj/4gHV6eXlk7w7mJn80Lt85zw+J6g9pOchIVcLCt9oLDlya07EaN5TCCd+1fvW9p2Rqr6FWThEpHVk8vN5vI0oJvTUs33Ueh7HCEef08XxVhNBxMheRK+lMFpXt4J2TKP/FEytfC5z5vObaiw8a+gTP3Gc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=irrelevant.dk; spf=pass smtp.mailfrom=irrelevant.dk; dkim=pass (2048-bit key) header.d=irrelevant.dk header.i=@irrelevant.dk header.b=T/OwSFlz; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=C0pvuL7g; arc=none smtp.client-ip=103.168.172.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=irrelevant.dk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=irrelevant.dk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=irrelevant.dk header.i=@irrelevant.dk header.b="T/OwSFlz"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="C0pvuL7g" Received: from phl-compute-07.internal (phl-compute-07.nyi.internal [10.202.2.47]) by mailfout.nyi.internal (Postfix) with ESMTP id 9B37E1390066; Mon, 26 Aug 2024 07:41:01 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-07.internal (MEProxy); Mon, 26 Aug 2024 07:41:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=cc:cc:content-transfer-encoding:content-type:content-type :date:date:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:subject:subject:to:to; s=fm3; t=1724672461; x=1724758861; bh=vE8VUoDK+3jeL5mY3Ecz/OM6t9sanOqw 7sgab91lrt8=; b=T/OwSFlz2XJSoFtJfY2CsLrGqn/vjjfixer91VAvCoqWtr6o 8uAOscJMH1LfqaldqxKXX+9ic7/CXPeJGbNlKl41R4Uy3vZx4xly2GTq1Ikly7Tm bfCtUengkHpn6I5J6xy3ukWvZgweNZ+0DFVtdHHcwhySF7Q6gYC/jrCf+Z2d6lWf wcfbrZEzmQilkG4vGLkNjMu54u7eEh0iN5omF8xXnBPFJDduTzs4DD5XD0o1yPbZ RBynv+bnSTknGLeP9vLIDZlUcii8tg/lxBOTN44qojCi7QBHQDMJJNjLS9dC2q95 qUeorRf9tZ4AP6fIEycEFeZoEIJarTjcaGHqAw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1724672461; x= 1724758861; bh=vE8VUoDK+3jeL5mY3Ecz/OM6t9sanOqw7sgab91lrt8=; b=C 0pvuL7gCsAnY5h/7ilr9x2SrJ6UApMzEeqbJzuo3QG/1e+/woPT9DnDyRNNDsFGR zYtwcssiqV10JkYmbhBtsxyaJ7r+4T4RlVlxGiXP23OZtV2Xi3IqF0QixKPCvkjJ hNaitrhvcMiw99fXfgZkzysDERy49DgaoQw+TZKoc4RlexbVOpzuGxe4sMTuXo7V eZfAUjq+eCmMUzOSk05ZFOgQ44ZP+tNcUmXK42w/twU3rQoPivfghHQW/eAxKUe3 vdmz2RoVOp6ojQWS1UPmGwD+a8QFcUOit9pKvFUqCKnyduTHpn6VqkXBlzjO6W5z qKfZb6ERllA4TcMVikrkQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddruddvkedggeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdej necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth drughkqeenucggtffrrghtthgvrhhnpeekiedvtdeuhefffedutdelfeekhfeitddtudev gefgffeiteevfffhhefggefhffenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht thhopeduvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepjhdrghhrrghnrgguoh hssehsrghmshhunhhgrdgtohhmpdhrtghpthhtohepkhdrjhgvnhhsvghnsehsrghmshhu nhhgrdgtohhmpdhrtghpthhtohepkhgvvhhinhdrthhirghnsehinhhtvghlrdgtohhmpd hrtghpthhtohepugifmhifvdesihhnfhhrrgguvggrugdrohhrghdprhgtphhtthhopehi ohhmmhhusehlihhsthhsrdhlihhnuhigrdguvghvpdhrtghpthhtoheprhhosghinhdrmh hurhhphhihsegrrhhmrdgtohhmpdhrtghpthhtohepsggrohhluhdrlhhusehlihhnuhig rdhinhhtvghlrdgtohhmpdhrtghpthhtohepmhhinhifohhordhimhesshgrmhhsuhhngh drtghomhdprhgtphhtthhopehjohhroheskegshihtvghsrdhorhhg X-ME-Proxy: Feedback-ID: idc91472f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 26 Aug 2024 07:40:59 -0400 (EDT) From: Klaus Jensen Date: Mon, 26 Aug 2024 13:40:30 +0200 Subject: [PATCH RFC PREVIEW 4/6] iommu: init pasid array while doing domain_replace and iopf is active Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240826-iopf-for-all-v1-4-59174e6a7528@samsung.com> References: <20240826-iopf-for-all-v1-0-59174e6a7528@samsung.com> In-Reply-To: <20240826-iopf-for-all-v1-0-59174e6a7528@samsung.com> To: David Woodhouse , Lu Baolu , Joerg Roedel , Will Deacon , Robin Murphy , Jason Gunthorpe , Kevin Tian Cc: Minwoo Im , linux-kernel@vger.kernel.org, iommu@lists.linux.dev, Joel Granados , Klaus Jensen X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=4192; i=k.jensen@samsung.com; h=from:subject:message-id; bh=lXHuPImJ6cuCzq6Nq2YtwMc4JoBLUbpYEcsoNAUv1f0=; b=LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tCgpvd0o0bkFGdEFaTCtrQTBEQUFvQlRlR3ZNV zFQRGVrQnl5WmlBR2JNYWIrdzlQVU5NNG1RSEpiYnAzYmI3azRCCnVSdUk4NE9OMi9wRkk1c29J N0VaSTRrQk13UUFBUW9BSFJZaEJGSW9NNnAxNHR6bW9rZG13RTNocnpGdFR3M3AKQlFKbXpHbS9 BQW9KRUUzaHJ6RnRUdzNwWng0SUFKd3pud1d3TzlWd3RlYnp6QUtWMWprazFHQVBhSnNacTAxNQ pkYTBEdTFYenJCVTFUMnZuVi94OGgxL2JkNjJ3VlJLM2U2clJ0aHd0ajJPYXJORDdEK09OU3ove TdwK0I1VWNvCmxUdW5tanBDQkVDQXZZVlNDZ0d3N01qWkk1WC8rRUpKM25uVFhBd2cxZEwxVllj Y2h3amk4VGwyMVNrQlJPdGoKcTZFd00ybS8wbEhEYkRFeEp4UndRZ0syNkliUFQwMTY0cTZiZUh EQkU0NHlLSEV3VWxyYVNiSDQ0SlpmRGp1RwplL0RkSXJoZFdUNjZMdnhMaDJhbUZ2d3hGUk9uQk tRUHZZOUEraGRSZUQ1UUR0QndoOTlhdXBYK1h3SHNwRmh2Cm11VFc2SEFvSkhZYkxBaUtMc0o5c EF6N1J6S1YrSW9VaytPTjlEbm0rdVhHZGU2dzl0OVZIS3BKCj1wSDRvCi0tLS0tRU5EIFBHUCBN RVNTQUdFLS0tLS0K X-Developer-Key: i=k.jensen@samsung.com; a=openpgp; fpr=DDCA4D9C9EF931CC3468427263D56FC5E55DA838 From: Joel Granados iommu_report_device_fault expects a pasid array to have an iommu_attach_handle when a fault is detected. Add this handle when the replacing hwpt has a valid iommufd fault object. Remove it when we release ownership of the group. Signed-off-by: Joel Granados --- drivers/iommu/iommu-priv.h | 3 +++ drivers/iommu/iommu.c | 31 +++++++++++++++++++++++++++++++ drivers/iommu/iommufd/fault.c | 22 ++++++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/drivers/iommu/iommu-priv.h b/drivers/iommu/iommu-priv.h index de5b54eaa8bf..493e501badc7 100644 --- a/drivers/iommu/iommu-priv.h +++ b/drivers/iommu/iommu-priv.h @@ -38,6 +38,9 @@ void iommu_device_unregister_bus(struct iommu_device *iom= mu, struct iommu_attach_handle *iommu_attach_handle_get(struct iommu_group *gr= oup, ioasid_t pasid, unsigned int type); +int iommu_init_pasid_array(struct iommu_domain *domain, + struct iommu_group *group, + struct iommu_attach_handle *handle); int iommu_attach_group_handle(struct iommu_domain *domain, struct iommu_group *group, struct iommu_attach_handle *handle); diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index ed6c5cb60c5a..083bf1bbad93 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -3262,6 +3262,9 @@ EXPORT_SYMBOL_GPL(iommu_device_claim_dma_owner); =20 static void __iommu_release_dma_ownership(struct iommu_group *group) { + if (!xa_empty(&group->pasid_array)) + xa_erase(&group->pasid_array, IOMMU_NO_PASID); + if (WARN_ON(!group->owner_cnt || !group->owner || !xa_empty(&group->pasid_array))) return; @@ -3495,6 +3498,33 @@ iommu_attach_handle_get(struct iommu_group *group, i= oasid_t pasid, unsigned int } EXPORT_SYMBOL_NS_GPL(iommu_attach_handle_get, IOMMUFD_INTERNAL); =20 +/** + * iommu_init_pasid_array - Initialize pasid array in the domain group + * + * Returns 0 on success. Error code on failure + * + * An IOMMU_NO_PASID element is *NOT* replaced if there is one already the= re. + */ +int iommu_init_pasid_array(struct iommu_domain *domain, + struct iommu_group *group, + struct iommu_attach_handle *handle) +{ + int ret; + + if (handle) + handle->domain =3D domain; + + mutex_lock(&group->mutex); + ret =3D xa_insert(&group->pasid_array, IOMMU_NO_PASID, handle, GFP_KERNEL= ); + mutex_unlock(&group->mutex); + + if (ret =3D=3D -EBUSY) + ret =3D 0; + + return ret; +} +EXPORT_SYMBOL_NS_GPL(iommu_init_pasid_array, IOMMUFD_INTERNAL); + /** * iommu_attach_group_handle - Attach an IOMMU domain to an IOMMU group * @domain: IOMMU domain to attach @@ -3535,6 +3565,7 @@ int iommu_attach_group_handle(struct iommu_domain *do= main, } EXPORT_SYMBOL_NS_GPL(iommu_attach_group_handle, IOMMUFD_INTERNAL); =20 + /** * iommu_detach_group_handle - Detach an IOMMU domain from an IOMMU group * @domain: IOMMU domain to attach diff --git a/drivers/iommu/iommufd/fault.c b/drivers/iommu/iommufd/fault.c index a643d5c7c535..ea7f1bf64892 100644 --- a/drivers/iommu/iommufd/fault.c +++ b/drivers/iommu/iommufd/fault.c @@ -178,6 +178,25 @@ static int __fault_domain_replace_dev(struct iommufd_d= evice *idev, return ret; } =20 +static int iommufd_init_pasid_array(struct iommu_domain *domain, + struct iommufd_device *idev) +{ + int ret; + struct iommufd_attach_handle *handle; + struct iommu_group *group =3D idev->igroup->group; + + handle =3D kzalloc(sizeof(*handle), GFP_KERNEL); + if (!handle) + return -ENOMEM; + handle->idev =3D idev; + + ret =3D iommu_init_pasid_array(domain, group, &handle->handle); + if (ret) + kfree(handle); + + return ret; +} + int iommufd_fault_domain_replace_dev(struct iommufd_device *idev, struct iommufd_hw_pagetable *hwpt, struct iommufd_hw_pagetable *old) @@ -190,6 +209,9 @@ int iommufd_fault_domain_replace_dev(struct iommufd_dev= ice *idev, ret =3D iommufd_fault_iopf_enable(idev); if (ret) return ret; + + if (iommufd_init_pasid_array(hwpt->domain, idev)) + return -EINVAL; } =20 ret =3D __fault_domain_replace_dev(idev, hwpt, old); --=20 2.45.2 From nobody Fri Dec 19 15:23:15 2025 Received: from fout5-smtp.messagingengine.com (fout5-smtp.messagingengine.com [103.168.172.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9043216BE09 for ; Mon, 26 Aug 2024 11:41:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724672466; cv=none; b=qGN8Hut2F8a/n5cdTMTymlAZSLmPIjawCIuFvVVNwxxVY0qKWxasRwnTDWxpd0D98s+zNBZXP/sMi/j1bKupSoY4YpgSAiqSbFZ9yFS5JM/C6CEfuunOc0FeFR8WC9TNgjVPdqBOSbljXSbcWSmK5e/hL8rpyG43/+m2GSV22Ow= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724672466; c=relaxed/simple; bh=L/FGzQ8zpniVkgpoOSJL5BYnM3LKCwvVi0ZSaocV/+U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Gv6Hk6NuxBxM+mevrH1GexFQ+VTL9XlJfQurRZFIjgatnJz1Yae3tYhLhbl2tytyGTE6UcTiMu48X88jGg4d9Zx0TN9MNU4GRJKEPI7CcK8Fh4djzb8/3zITPyUofaIS2KBpbaAmA23MQenucA2pINUV16b6MVoodRHirbvCwzg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=irrelevant.dk; spf=pass smtp.mailfrom=irrelevant.dk; dkim=pass (2048-bit key) header.d=irrelevant.dk header.i=@irrelevant.dk header.b=QITWCLYI; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=OgmDRds7; arc=none smtp.client-ip=103.168.172.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=irrelevant.dk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=irrelevant.dk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=irrelevant.dk header.i=@irrelevant.dk header.b="QITWCLYI"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="OgmDRds7" Received: from phl-compute-05.internal (phl-compute-05.nyi.internal [10.202.2.45]) by mailfout.nyi.internal (Postfix) with ESMTP id CA2E11390A12; Mon, 26 Aug 2024 07:41:03 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-05.internal (MEProxy); Mon, 26 Aug 2024 07:41:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=cc:cc:content-transfer-encoding:content-type:content-type :date:date:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:subject:subject:to:to; s=fm3; t=1724672463; x=1724758863; bh=kMFHMd9S329W3ID5o0HYSw0A/MBapvs6 /gFfJCROojI=; b=QITWCLYIkT7WVNC1JJ+jUH+AdkJ0iof5SX5NG/iuNT2Bi5Ii 3ouCIbj1zj/b3+7qHmO1cubZUFptrjEkKTo+MZX5yszR4uOTaI76zeKLygl7Bjo5 srffj7gtJwnH5dJ1cfaf64hPsFDObb1Pd7P9K9bGMFsAioTJF+moD0A8DRnVH14V ZaCL1xHXpbg1X0Yv8EqNVtLgppJrlm8t7sDksXfZqpS/y7wVauL4pDeizaKxSQNf w5/bveRR8rPoGzQN6o+5F89NDkPo8O9gHWw6nXdkstNQE+sXmahozbddAZZDhenZ flPXfiM3S06aV6ts/cWav4+GrNFlT4NfFB5RNQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1724672463; x= 1724758863; bh=kMFHMd9S329W3ID5o0HYSw0A/MBapvs6/gFfJCROojI=; b=O gmDRds7ooQLMaqacY8cfre5aV1XuCdxfFEpB2+FsmOIog+OcUhPIP4W7TMUvebpU cA2hNRB1mLVnGIE1BX8G1JY9D60wsItw0mOcZ/liXI8LjOpFxGxtsw0Q+yfLtDyx 5hgyK323zpss1ilXful9pvdIw0cZO273L07pK7LNCkaR47yTorsZCyPcHD+dqZjo OxEfnqn8yYODWlcag+pJ2dDnClYZLs2L3jrHttECZLXOaFnBRhKlkQIqFxIJ56PD ViNsgh6KkDWnOGKKgJpGMT6ErTCXFW+jLVgeUydUFuDAr7TmsLqLA2rYSCTg35rc bkSk4Y3sZjNFygCJrVOGA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddruddvkedggeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdej necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth drughkqeenucggtffrrghtthgvrhhnpeekiedvtdeuhefffedutdelfeekhfeitddtudev gefgffeiteevfffhhefggefhffenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht thhopeduvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepjhdrghhrrghnrgguoh hssehsrghmshhunhhgrdgtohhmpdhrtghpthhtohepkhdrjhgvnhhsvghnsehsrghmshhu nhhgrdgtohhmpdhrtghpthhtohepkhgvvhhinhdrthhirghnsehinhhtvghlrdgtohhmpd hrtghpthhtohepugifmhifvdesihhnfhhrrgguvggrugdrohhrghdprhgtphhtthhopehi ohhmmhhusehlihhsthhsrdhlihhnuhigrdguvghvpdhrtghpthhtoheprhhosghinhdrmh hurhhphhihsegrrhhmrdgtohhmpdhrtghpthhtohepsggrohhluhdrlhhusehlihhnuhig rdhinhhtvghlrdgtohhmpdhrtghpthhtohepmhhinhifohhordhimhesshgrmhhsuhhngh drtghomhdprhgtphhtthhopehjohhroheskegshihtvghsrdhorhhg X-ME-Proxy: Feedback-ID: idc91472f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 26 Aug 2024 07:41:01 -0400 (EDT) From: Klaus Jensen Date: Mon, 26 Aug 2024 13:40:31 +0200 Subject: [PATCH RFC PREVIEW 5/6] iommu/vt-d: drop pasid requirement for prq initialization Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240826-iopf-for-all-v1-5-59174e6a7528@samsung.com> References: <20240826-iopf-for-all-v1-0-59174e6a7528@samsung.com> In-Reply-To: <20240826-iopf-for-all-v1-0-59174e6a7528@samsung.com> To: David Woodhouse , Lu Baolu , Joerg Roedel , Will Deacon , Robin Murphy , Jason Gunthorpe , Kevin Tian Cc: Minwoo Im , linux-kernel@vger.kernel.org, iommu@lists.linux.dev, Joel Granados , Klaus Jensen X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1399; i=k.jensen@samsung.com; h=from:subject:message-id; bh=CwuF9pmuEX48hp2ZuB20pZfeUGBaUDnjBt7rCAANZ+E=; b=LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tCgpvd0o0bkFGdEFaTCtrQTBEQUFvQlRlR3ZNV zFQRGVrQnl5WmlBR2JNYWNCVEg1Qk1UU2tqbGh1Vlk4QVdhOUVKCit1c3RiVFEycHVxMWx3NHV1 RXkxRVlrQk13UUFBUW9BSFJZaEJGSW9NNnAxNHR6bW9rZG13RTNocnpGdFR3M3AKQlFKbXpHbkF BQW9KRUUzaHJ6RnRUdzNwQTVRSUFLTXhXWTlWc2c3TWgrT3pPakZIRkNjQUZFeEVZS1A3OVowSQ oxSmlHS0I3SVF4OVZid0g5amM5aU1hNGIxUUNCZmM3cUtwN3BjQ0JmYWM1RnIwUWF2dUh0ZVBJO VdLMGtIYmg1ClRZVTdJWHU4eVdhNlRqT0RFRDNTZlROaVRRYWU0TWN2dTVGY01iQ0xiL3dlaHF6 V2ZSaXRrWDZNRWVYK2hIOXIKTUhmQzArMGpiZWFYanZyTlBhME0ra21BSEdaN0sycmx2N21GcVF xVWsvRWFSZWdPRUVWbit0ZzFnRnRyTHZiaAp5NUpUWXg2ZWE0SmN6RjNVditlVXpWNkJTVWlvbm xTWFlwMXFuK1k4K1JKREQxbTNFYW5FVUVHWGpoZW9sMFVjCmcxd09ENTFUbWdZS0ptM2oydi9hT WZISzJ0RDlwdEpNUmcvbXhmYUFkM0lqOTA5S01mMjNWS1dlCj05V2JyCi0tLS0tRU5EIFBHUCBN RVNTQUdFLS0tLS0K X-Developer-Key: i=k.jensen@samsung.com; a=openpgp; fpr=DDCA4D9C9EF931CC3468427263D56FC5E55DA838 From: Klaus Jensen PASID support within the IOMMU is not required to enable the Page Request Queue, only the PRS capability. Signed-off-by: Klaus Jensen --- drivers/iommu/intel/iommu.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index ada3507d2831..bc1a369c2cf4 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -1487,10 +1487,8 @@ static void free_dmar_iommu(struct intel_iommu *iomm= u) /* free context mapping */ free_context_table(iommu); =20 - if (pasid_supported(iommu)) { - if (ecap_prs(iommu->ecap)) - intel_finish_prq(iommu); - } + if (ecap_prs(iommu->ecap)) + intel_finish_prq(iommu); } =20 /* @@ -2478,7 +2476,7 @@ static int __init init_dmars(void) =20 iommu_flush_write_buffer(iommu); =20 - if (pasid_supported(iommu) && ecap_prs(iommu->ecap)) { + if (ecap_prs(iommu->ecap)) { /* * Call dmar_alloc_hwirq() with dmar_global_lock held, * could cause possible lock race condition. @@ -2919,7 +2917,7 @@ static int intel_iommu_add(struct dmar_drhd_unit *dma= ru) intel_iommu_init_qi(iommu); iommu_flush_write_buffer(iommu); =20 - if (pasid_supported(iommu) && ecap_prs(iommu->ecap)) { + if (ecap_prs(iommu->ecap)) { ret =3D intel_enable_prq(iommu); if (ret) goto disable_iommu; --=20 2.45.2 From nobody Fri Dec 19 15:23:15 2025 Received: from fout5-smtp.messagingengine.com (fout5-smtp.messagingengine.com [103.168.172.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A271216BE1E for ; Mon, 26 Aug 2024 11:41:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724672468; cv=none; b=n7O89lEp20t1ZKrc2gja58VYr+CJtEzbP8VtGab2UaoD29PrHk4gaetjQAMEFfx5kXzV8u1z3j0nUuFT+F2pjX1UF0po0Zq60MM4O2NQZy6r/QKxu1M1K7sDyO4xsHFSSyEI1fTbk5cn2epsaqsXNVbvPjmBKZM5wrcjIZ40/AU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724672468; c=relaxed/simple; bh=jHDwvs4XW4LjqzJwHaxI9oERjlUVSUY0D7V/9XakqNw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=g/VC1ctPBnTKuMdVGaB0fZOnHDysOYSSVhThAobqQyG8eg+G11UEZuHqg8fVFAMlDLRZSjoIYpFETzlBpHiR9nQjuRZjoqEN6SsuCk48D5IDP6cPx1RsDThZQMZAn7FaOhdyaq9ZOQMY8vifNeB6ohWyM504STf361EVtjovgnQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=irrelevant.dk; spf=pass smtp.mailfrom=irrelevant.dk; dkim=pass (2048-bit key) header.d=irrelevant.dk header.i=@irrelevant.dk header.b=WEMnRkBK; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=a1INHpcJ; arc=none smtp.client-ip=103.168.172.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=irrelevant.dk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=irrelevant.dk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=irrelevant.dk header.i=@irrelevant.dk header.b="WEMnRkBK"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="a1INHpcJ" Received: from phl-compute-06.internal (phl-compute-06.nyi.internal [10.202.2.46]) by mailfout.nyi.internal (Postfix) with ESMTP id F1414139081F; Mon, 26 Aug 2024 07:41:05 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-06.internal (MEProxy); Mon, 26 Aug 2024 07:41:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irrelevant.dk; h=cc:cc:content-transfer-encoding:content-type:content-type :date:date:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:subject:subject:to:to; s=fm3; t=1724672465; x=1724758865; bh=qyECNre3MKh/GNrYjMn6VpOuWvEEq8tX k/MbTJU7AEM=; b=WEMnRkBK8zbeYD1pPYQPz9sVccQfIofESAbjmZwPiQwfJbg8 l/TGNBA3XzYREfQzOpUco6yWJxhqnf8W369SfOlgLu3mzMLBhnntiWqZd9X4Kj8e 4rinQ09VljVy9JIZ5qIXWHSTkBIgIwRn5kE90HHxluns7KJmEfZCawsWQL2SVXU+ VCRTsdZHdOpt061sFgxM8IGMUd3/5E1u44PmHYFwnLX4uQiYwUKt4xnwZngsH4mz Yt7IUgLFAm+4ECZCQKrYrxuT319p+/Ues0c1L/pSzKReL7IHVkfbm+xArbzBU5vr sY4Gs104D5FEzjO57SRsFeqYqtAncAhs8/8L5g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1724672465; x= 1724758865; bh=qyECNre3MKh/GNrYjMn6VpOuWvEEq8tXk/MbTJU7AEM=; b=a 1INHpcJw3T0IFR7Ukox2q8+T+68qa0EFcYMlZ0Bk2qthFS+q+FguZ33W4uTIgccV +A+0ugDV84Vnb8Cq3HcrdcTc61Rnpf+fqGsVGtSPBdiO1wSAACTbrcap7hr+w3rm kAPyn2Kc6SspbzbzzTUV6avH1ZbC5xlBjCzz//Nn4In7eihZfSK5QC2BrGOv283R 7ydg3OwBBtQVZ9gpqjHp9M2DmlULCSBDfQ12lbOKFmOk0u7TFdTJP1q2i6msLGPg t/qJip2ewGTq97rcU/hThTHQpiDj3UOaQCDj/jNnZfWoKaTxCLjFfZ7WYt/WHQmV 0jKSiRU4eFDgPdsYz9cEQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddruddvkedggeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdej necuhfhrohhmpefmlhgruhhsucflvghnshgvnhcuoehithhssehirhhrvghlvghvrghnth drughkqeenucggtffrrghtthgvrhhnpeekiedvtdeuhefffedutdelfeekhfeitddtudev gefgffeiteevfffhhefggefhffenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpehithhssehirhhrvghlvghvrghnthdrughkpdhnsggprhgtphht thhopeduvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepjhdrghhrrghnrgguoh hssehsrghmshhunhhgrdgtohhmpdhrtghpthhtohepkhdrjhgvnhhsvghnsehsrghmshhu nhhgrdgtohhmpdhrtghpthhtohepkhgvvhhinhdrthhirghnsehinhhtvghlrdgtohhmpd hrtghpthhtohepugifmhifvdesihhnfhhrrgguvggrugdrohhrghdprhgtphhtthhopehi ohhmmhhusehlihhsthhsrdhlihhnuhigrdguvghvpdhrtghpthhtoheprhhosghinhdrmh hurhhphhihsegrrhhmrdgtohhmpdhrtghpthhtohepsggrohhluhdrlhhusehlihhnuhig rdhinhhtvghlrdgtohhmpdhrtghpthhtohepmhhinhifohhordhimhesshgrmhhsuhhngh drtghomhdprhgtphhtthhopehjohhroheskegshihtvghsrdhorhhg X-ME-Proxy: Feedback-ID: idc91472f:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 26 Aug 2024 07:41:03 -0400 (EDT) From: Klaus Jensen Date: Mon, 26 Aug 2024 13:40:32 +0200 Subject: [PATCH RFC PREVIEW 6/6] iommu/vt-d: do not require a PASID in page requests Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240826-iopf-for-all-v1-6-59174e6a7528@samsung.com> References: <20240826-iopf-for-all-v1-0-59174e6a7528@samsung.com> In-Reply-To: <20240826-iopf-for-all-v1-0-59174e6a7528@samsung.com> To: David Woodhouse , Lu Baolu , Joerg Roedel , Will Deacon , Robin Murphy , Jason Gunthorpe , Kevin Tian Cc: Minwoo Im , linux-kernel@vger.kernel.org, iommu@lists.linux.dev, Joel Granados , Klaus Jensen X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1140; i=k.jensen@samsung.com; h=from:subject:message-id; bh=kfiGm5p448US0J5HAOq/YOUe9BCb4+xS2lFdixASPsE=; b=LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tCgpvd0o0bkp2QXk4ekF4ZWo3Y0wxaHJqL3ZTO GJUYWtrTWFXY3lEMHdRV3RzUXdmQXkrNCtpaWRiTlpoWm1acWtTCjNkaXdyVXhlbWNsS1VXNW5N em9aalZrWUdMa1laTVVVV1lJMGpGZVZQcnJ6YkpGNzJnR1lRYXhNSUZNWXVEZ0YKWUNLMUJ6Z1k 1alM1TnovTGZNS3lPK1RKcGVncFArY1UydjJNWnYvS2FqdzNxQ0NwejB6L25XeVp5ZDZwTnlyKw p1VnpMNitHWjduelBKMit5dmNycmw3bW1QMDhGbFZTOTIyNFNOdlhOWStGaXVlUmxWN2lPcXEwd 1hYV3FTU2J3CnMzbjFSc3YwT2VyZDhwbTdNd1FsaFNWbktpWHZ1N2d0ZHZWOGh0dlQ3STRzL3Iy bWZmNVJscm9INVdVbXJ5eVgKVjB3UmpWclJQY255NGkxUHZiZEhDanEyclpDZWQ0ejNnZDNEL3J TTkx6YnVuK1FhYWMvNlIxQjBUNDU4ZjVOUgpvbk5JWjZiUG8zMldIK09xN3JDY3Z4LzlYNCsxSl NpRHVlVno5VGNXMFgzRzZ5UFBsb2Vzdkp6UzcrclR0NDlICk5jZmhpc2ZTL3o2S0RrTHI1ODdpU GUxaFlOYm54TEJtV3ZvN1oyMHB3WktRMTlVQWhkU2lIdz09Cj1OQUY3Ci0tLS0tRU5EIFBHUCBN RVNTQUdFLS0tLS0K X-Developer-Key: i=k.jensen@samsung.com; a=openpgp; fpr=DDCA4D9C9EF931CC3468427263D56FC5E55DA838 From: Klaus Jensen PRQ events can now be handled without a PASID being present. Remove the restriction. Signed-off-by: Klaus Jensen --- drivers/iommu/intel/prq.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/drivers/iommu/intel/prq.c b/drivers/iommu/intel/prq.c index 2814373e95d8..cc36198ebf91 100644 --- a/drivers/iommu/intel/prq.c +++ b/drivers/iommu/intel/prq.c @@ -101,18 +101,12 @@ static irqreturn_t prq_event_thread(int irq, void *d) req =3D &iommu->prq[head / sizeof(*req)]; address =3D (u64)req->addr << VTD_PAGE_SHIFT; =20 - if (unlikely(!req->pasid_present)) { - pr_err("IOMMU: %s: Page request without PASID\n", - iommu->name); -bad_req: - handle_bad_prq_event(iommu, req, QI_RESP_INVALID); - goto prq_advance; - } - if (unlikely(!is_canonical_address(address))) { pr_err("IOMMU: %s: Address is not canonical\n", iommu->name); - goto bad_req; +bad_req: + handle_bad_prq_event(iommu, req, QI_RESP_INVALID); + goto prq_advance; } =20 if (unlikely(req->pm_req && (req->rd_req | req->wr_req))) { --=20 2.45.2