Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1484287

[PATCH v5 7/8] iommu/amd: Don't update domain info to dte entry at iommu init stage

From Baoquan He <bhe@redhat.com>
Newsgroups linux.kernel
Subject [PATCH v5 7/8] iommu/amd: Don't update domain info to dte entry at iommu init stage
Date 2016-09-15 17:10 +0200
Message-ID <shGsx-ar-21@gated-at.bofh.it> (permalink)
References <shGsx-ar-11@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


AMD iommu creates protection domain and assign each device to it during
iommu driver initialization stage. This happened just after system pci
bus scanning stage, and much earlier than device driver init stage. So
at this time if in kdump kernel the domain info, especially pte_root,
can't be updated to dte entry. We should wait until device driver init
stage.

Signed-off-by: Baoquan He <bhe@redhat.com>
---
 drivers/iommu/amd_iommu.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index fcb69ff..6c37300 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -137,6 +137,7 @@ struct iommu_dev_data {
 	bool pri_tlp;			  /* PASID TLB required for
 					     PPR completions */
 	u32 errata;			  /* Bitmap for errata to apply */
+	bool domain_updated;
 };
 
 /*
@@ -1708,6 +1709,15 @@ static void set_dte_entry(u16 devid, struct protection_domain *domain, bool ats)
 {
 	u64 pte_root = 0;
 	u64 flags = 0;
+	struct iommu_dev_data *dev_data;
+	struct amd_iommu *iommu = amd_iommu_rlookup_table[devid];
+
+	dev_data = find_dev_data(devid);
+        if (!dev_data)
+                return;
+
+	if (translation_pre_enabled(iommu) && !dev_data->domain_updated)
+		return;
 
 	if (domain->mode != PAGE_MODE_NONE)
 		pte_root = virt_to_phys(domain->pt_root);
@@ -1756,6 +1766,14 @@ static void set_dte_entry(u16 devid, struct protection_domain *domain, bool ats)
 
 static void clear_dte_entry(u16 devid)
 {
+	struct iommu_dev_data *dev_data;
+	struct amd_iommu *iommu = amd_iommu_rlookup_table[devid];
+
+	dev_data = find_dev_data(devid);
+        if (!dev_data)
+                return;
+	if (translation_pre_enabled(iommu) && !dev_data->domain_updated)
+		return;
 	/* remove entry from the device table seen by the hardware */
 	amd_iommu_dev_table[devid].data[0]  = DTE_FLAG_V | DTE_FLAG_TV;
 	amd_iommu_dev_table[devid].data[1] &= DTE_FLAG_MASK;
-- 
2.5.5

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v5 0/8] Fix kdump faults on system with amd iommu Baoquan He <bhe@redhat.com> - 2016-09-15 17:10 +0200
  [PATCH v5 4/8] iommu/amd: Add function copy_dev_tables Baoquan He <bhe@redhat.com> - 2016-09-15 17:10 +0200
    Re: [PATCH v5 4/8] iommu/amd: Add function copy_dev_tables Joerg Roedel <joro@8bytes.org> - 2016-09-20 14:00 +0200
      Re: [PATCH v5 4/8] iommu/amd: Add function copy_dev_tables Baoquan He <bhe@redhat.com> - 2016-09-21 12:20 +0200
  [PATCH v5 7/8] iommu/amd: Don't update domain info to dte entry at iommu init stage Baoquan He <bhe@redhat.com> - 2016-09-15 17:10 +0200
    Re: [PATCH v5 7/8] iommu/amd: Don't update domain info to dte entry  at iommu init stage Joerg Roedel <joro@8bytes.org> - 2016-09-20 15:00 +0200
      Re: [PATCH v5 7/8] iommu/amd: Don't update domain info to dte entry  at iommu init stage Baoquan He <bhe@redhat.com> - 2016-09-21 12:30 +0200
        Re: [PATCH v5 7/8] iommu/amd: Don't update domain info to dte entry  at iommu init stage Baoquan He <bhe@redhat.com> - 2016-09-21 15:30 +0200
  [PATCH v5 2/8] iommu/amd: add early_enable_iommu() wrapper function Baoquan He <bhe@redhat.com> - 2016-09-15 17:10 +0200
  [PATCH v5 6/8] iommu/amd: Do not re-enable dev table entries in kdump Baoquan He <bhe@redhat.com> - 2016-09-15 17:10 +0200
    Re: [PATCH v5 6/8] iommu/amd: Do not re-enable dev table entries in  kdump Joerg Roedel <joro@8bytes.org> - 2016-09-20 14:50 +0200
      Re: [PATCH v5 6/8] iommu/amd: Do not re-enable dev table entries in  kdump Baoquan He <bhe@redhat.com> - 2016-09-21 12:30 +0200
  [PATCH v5 5/8] iommu/amd: copy old trans table from old kernel Baoquan He <bhe@redhat.com> - 2016-09-15 17:10 +0200
    Re: [PATCH v5 5/8] iommu/amd: copy old trans table from old kernel Joerg Roedel <joro@8bytes.org> - 2016-09-20 14:50 +0200
      Re: [PATCH v5 5/8] iommu/amd: copy old trans table from old kernel Baoquan He <bhe@redhat.com> - 2016-09-21 12:20 +0200
  [PATCH v5 1/8] iommu/amd: Detect pre enabled translation Baoquan He <bhe@redhat.com> - 2016-09-15 17:10 +0200

csiph-web