Messages in this thread Patch in this message | | | From | Jiang Liu <> | Subject | [Patch Part2 V1 13/14] iommu/vt-d: update device to static identity domain mapping for PCI hotplug | Date | Tue, 7 Jan 2014 17:00:33 +0800 |
| |
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(-)
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
| |