mirror of https://gitee.com/openkylin/linux.git
x86/amd-iommu: Fix PCI hotplug with passthrough mode
The device change notifier is initialized in the dma_ops initialization path. But this path is never executed for iommu=pt. Move the notifier initialization to IOMMU hardware init code to fix this. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
This commit is contained in:
parent
b7cc9554bc
commit
8638c4914f
|
@ -30,6 +30,7 @@ extern void amd_iommu_apply_erratum_63(u16 devid);
|
|||
extern void amd_iommu_reset_cmd_buffer(struct amd_iommu *iommu);
|
||||
extern int amd_iommu_init_devices(void);
|
||||
extern void amd_iommu_uninit_devices(void);
|
||||
extern void amd_iommu_init_notifier(void);
|
||||
#ifndef CONFIG_AMD_IOMMU_STATS
|
||||
|
||||
static inline void amd_iommu_stats_init(void) { }
|
||||
|
|
|
@ -1624,6 +1624,11 @@ static struct notifier_block device_nb = {
|
|||
.notifier_call = device_change_notifier,
|
||||
};
|
||||
|
||||
void amd_iommu_init_notifier(void)
|
||||
{
|
||||
bus_register_notifier(&pci_bus_type, &device_nb);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* The next functions belong to the dma_ops mapping/unmapping code.
|
||||
|
@ -2250,8 +2255,6 @@ int __init amd_iommu_init_dma_ops(void)
|
|||
|
||||
register_iommu(&amd_iommu_ops);
|
||||
|
||||
bus_register_notifier(&pci_bus_type, &device_nb);
|
||||
|
||||
amd_iommu_stats_init();
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -1285,6 +1285,8 @@ static int __init amd_iommu_init(void)
|
|||
if (ret)
|
||||
goto free;
|
||||
|
||||
amd_iommu_init_notifier();
|
||||
|
||||
enable_iommus();
|
||||
|
||||
if (iommu_pass_through)
|
||||
|
|
Loading…
Reference in New Issue