When a device driver issues the first dma_map command for a
device, we assign a new and empty page-table, thus removing all
mappings from the old kernel for the device.

Signed-off-by: Li, Zhen-Hua <zhen-h...@hp.com>
---
 drivers/iommu/intel-iommu.c | 27 ++++++++++++++++++++-------
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 4837ce5..f11a9b1 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -3200,15 +3200,28 @@ static struct dmar_domain 
*__get_valid_domain_for_dev(struct device *dev)
        }
 
        /* make sure context mapping is ok */
-       if (unlikely(!domain_context_mapped(dev))) {
-               ret = domain_context_mapping(domain, dev, 
CONTEXT_TT_MULTI_LEVEL);
-               if (ret) {
-                       printk(KERN_ERR "Domain context map for %s failed",
-                              dev_name(dev));
-                       return NULL;
-               }
+       if (likely(domain_context_mapped(dev))) {
+#ifdef CONFIG_CRASH_DUMP
+               if (is_kdump_kernel()) {
+                       domain_exit(domain);
+                       domain = get_domain_for_dev(dev,
+                               DEFAULT_DOMAIN_ADDRESS_WIDTH);
+                       if (!domain) {
+                               pr_err("Allocating domain for %s failed",
+                                      dev_name(dev));
+                               return NULL;
+                       }
+               } else
+#endif
+                       return domain;
        }
 
+       ret = domain_context_mapping(domain, dev, CONTEXT_TT_MULTI_LEVEL);
+       if (ret) {
+               pr_err("Domain context map for %s failed",
+                      dev_name(dev));
+               return NULL;
+       }
        return domain;
 }
 
-- 
2.0.0-rc0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to