@@ -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);
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.liu@linux.intel.com> --- drivers/iommu/intel-iommu.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-)