From c0471c0ffda036656e6297b24bb12906df81f5df Mon Sep 17 00:00:00 2001 From: Vasant Hegde Date: Tue, 11 Mar 2025 08:51:19 +0900 Subject: [PATCH] iommu/amd/pgtbl_v2: Take protection domain lock before invalidating TLB BugLink: https://bugs.launchpad.net/bugs/2101915 [ Upstream commit 016991606aa01c4d92e6941be636c0c897aa05c7 ] Commit c7fc12354be0 ("iommu/amd/pgtbl_v2: Invalidate updated page ranges only") missed to take domain lock before calling amd_iommu_domain_flush_pages(). Fix this by taking protection domain lock before calling TLB invalidation function. Fixes: c7fc12354be0 ("iommu/amd/pgtbl_v2: Invalidate updated page ranges only") Signed-off-by: Vasant Hegde Reviewed-by: Jason Gunthorpe Link: https://lore.kernel.org/r/20241030063556.6104-2-vasant.hegde@amd.com Signed-off-by: Joerg Roedel Signed-off-by: Sasha Levin [koichiroden: adjusted context without backporting the following commits (which have been applied in linux-6.11.y) to avoid multiple conflicts and reduce regression risk: - 9ac0b3380acd ("iommu/amd: Narrow the use of struct protection_domain to invalidation") - 47f218d10895 ("iommu/amd: Store the nid in io_pgtable_cfg instead of the domain") - 670b57796c5d ("iommu/amd: Rename struct amd_io_pgtable iopt to pgtbl") - 1ed2d21d471c ("iommu/amd: Remove the amd_iommu_domain_set_pt_root() and related")] Signed-off-by: Koichiro Den Signed-off-by: Stefan Bader --- drivers/iommu/amd/io_pgtable_v2.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/amd/io_pgtable_v2.c b/drivers/iommu/amd/io_pgtable_v2.c index ce2652657543..077e26e23307 100644 --- a/drivers/iommu/amd/io_pgtable_v2.c +++ b/drivers/iommu/amd/io_pgtable_v2.c @@ -270,8 +270,13 @@ static int iommu_v2_map_pages(struct io_pgtable_ops *ops, unsigned long iova, } out: - if (updated) + if (updated) { + unsigned long flags; + + spin_lock_irqsave(&pdom->lock, flags); amd_iommu_domain_flush_pages(pdom, o_iova, size); + spin_unlock_irqrestore(&pdom->lock, flags); + } if (mapped) *mapped += mapped_size;