iommu/vt-d: Allocate si_domain in init_dmars()
This seperates the allocation of the si_domain from its assignment to devices. It makes sure that the iommu=pt case still works in the kdump kernel, when we have to defer the assignment of devices to domains to device driver initialization time. Tested-by: ZhenHua Li <zhen-hual@hp.com> Tested-by: Baoquan He <bhe@redhat.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
cf484d0e69
commit
86080ccc22
|
@ -2763,10 +2763,6 @@ static int __init iommu_prepare_static_identity_mapping(int hw)
|
|||
int i;
|
||||
int ret = 0;
|
||||
|
||||
ret = si_domain_init(hw);
|
||||
if (ret)
|
||||
return -EFAULT;
|
||||
|
||||
for_each_pci_dev(pdev) {
|
||||
ret = dev_prepare_static_identity_mapping(&pdev->dev, hw);
|
||||
if (ret)
|
||||
|
@ -2780,7 +2776,7 @@ static int __init iommu_prepare_static_identity_mapping(int hw)
|
|||
|
||||
if (dev->bus != &acpi_bus_type)
|
||||
continue;
|
||||
|
||||
|
||||
adev= to_acpi_device(dev);
|
||||
mutex_lock(&adev->physical_node_lock);
|
||||
list_for_each_entry(pn, &adev->physical_node_list, node) {
|
||||
|
@ -3114,6 +3110,12 @@ static int __init init_dmars(void)
|
|||
iommu_identity_mapping |= IDENTMAP_GFX;
|
||||
#endif
|
||||
|
||||
if (iommu_identity_mapping) {
|
||||
ret = si_domain_init(hw_pass_through);
|
||||
if (ret)
|
||||
goto free_iommu;
|
||||
}
|
||||
|
||||
check_tylersburg_isoch();
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue