When PCI device hotplug event happen, we need to update device to
static identity domain mapping relationship to maintain correct
device to domain mapping.

Signed-off-by: Jiang Liu <jiang....@linux.intel.com>
---
 drivers/iommu/intel-iommu.c |   17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 6a9a314..83e3ed4 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -3659,13 +3659,26 @@ static int device_notifier(struct notifier_block *nb,
                return 0;
 
        down_read(&dmar_global_lock);
-       if (action == BUS_NOTIFY_UNBOUND_DRIVER && !iommu_pass_through) {
-               domain_remove_one_dev_info(domain, pdev);
+       switch (action) {
+       case BUS_NOTIFY_ADD_DEVICE:
+               if (iommu_should_identity_map(pdev, 1))
+                       domain_add_dev_info(si_domain, pdev,
+                                           hw_pass_through ?
+                                           CONTEXT_TT_PASS_THROUGH :
+                                           CONTEXT_TT_MULTI_LEVEL);
+               break;
 
+       case BUS_NOTIFY_UNBOUND_DRIVER:
+               if (iommu_pass_through)
+                       break;
+               /* fall through */
+       case BUS_NOTIFY_DEL_DEVICE:
+               domain_remove_one_dev_info(domain, pdev);
                if (!(domain->flags & DOMAIN_FLAG_VIRTUAL_MACHINE) &&
                    !(domain->flags & DOMAIN_FLAG_STATIC_IDENTITY) &&
                    list_empty(&domain->devices))
                        domain_exit(domain);
+               break;
        }
        up_read(&dmar_global_lock);
 
-- 
1.7.10.4

--
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