IOMMU/x86: drop locking from quarantine_init() hooks
authorJan Beulich <jbeulich@suse.com>
Wed, 20 Apr 2022 08:52:13 +0000 (10:52 +0200)
committerJan Beulich <jbeulich@suse.com>
Wed, 20 Apr 2022 08:52:13 +0000 (10:52 +0200)
Prior extension of these functions to enable per-device quarantine page
tables already didn't add more locking there, but merely left in place
what had been there before. But really locking is unnecessary here:
We're running with pcidevs_lock held (i.e. multiple invocations of the
same function [or their teardown equivalents] are impossible, and hence
there are no "local" races), while all consuming of the data being
populated here can't race anyway due to happening sequentially
afterwards, and unlike ordinary domains' page tables quarantine ones
are never modified once fully constructed. See also the comment in
struct arch_pci_dev.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
xen/drivers/passthrough/amd/iommu_map.c
xen/drivers/passthrough/vtd/iommu.c

index 1f5eae9b7df9445b901d2524585eb95f4a02e890..6d42bcea0e37bb5b9f12a8f673489a78f5ccf989 100644 (file)
@@ -699,15 +699,11 @@ int cf_check amd_iommu_quarantine_init(struct pci_dev *pdev, bool scratch_page)
         union amd_iommu_pte *root;
         struct page_info *pgs[IOMMU_MAX_PT_LEVELS] = {};
 
-        spin_lock(&hd->arch.mapping_lock);
-
         root = __map_domain_page(pdev->arch.amd.root_table);
         rc = fill_qpt(root, level - 1, pgs);
         unmap_domain_page(root);
 
         pdev->arch.leaf_mfn = page_to_mfn(pgs[0]);
-
-        spin_unlock(&hd->arch.mapping_lock);
     }
 
     page_list_move(&pdev->arch.pgtables_list, &hd->arch.pgtables.list);
index 42b76af73fc5f9ddb6b12a6d3944c5db174ff203..dbff56fe6a70be21191d34bb38965aa83ce82708 100644 (file)
@@ -3054,15 +3054,11 @@ static int cf_check intel_iommu_quarantine_init(struct pci_dev *pdev,
         struct dma_pte *root;
         struct page_info *pgs[6] = {};
 
-        spin_lock(&hd->arch.mapping_lock);
-
         root = map_vtd_domain_page(pdev->arch.vtd.pgd_maddr);
         rc = fill_qpt(root, level - 1, pgs);
         unmap_vtd_domain_page(root);
 
         pdev->arch.leaf_mfn = page_to_mfn(pgs[0]);
-
-        spin_unlock(&hd->arch.mapping_lock);
     }
 
     page_list_move(&pdev->arch.pgtables_list, &hd->arch.pgtables.list);