On 01/13/2014 02:36 PM, Gavin Shan wrote: > Some devices, for example PCI root port, don't have IOMMU table and > group. We needn't detach them from their IOMMU group. Otherwise, it > potentially incurs kernel crash because of referring NULL IOMMU group > as following backtrace indicates: > > .iommu_group_remove_device+0x74/0x1b0 > .iommu_bus_notifier+0x94/0xb4 > .notifier_call_chain+0x78/0xe8 > .__blocking_notifier_call_chain+0x7c/0xbc > .blocking_notifier_call_chain+0x38/0x48 > .device_del+0x50/0x234 > .pci_remove_bus_device+0x88/0x138 > .pci_stop_and_remove_bus_device+0x2c/0x40 > .pcibios_remove_pci_devices+0xcc/0xfc > .pcibios_remove_pci_devices+0x3c/0xfc > > Signed-off-by: Gavin Shan <[email protected]>
Thanks! I never tested the unplug case... Reviewed-by: Alexey Kardashevskiy <[email protected]> > --- > arch/powerpc/kernel/iommu.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c > index 572bb5b..8a49424 100644 > --- a/arch/powerpc/kernel/iommu.c > +++ b/arch/powerpc/kernel/iommu.c > @@ -1137,6 +1137,17 @@ static int iommu_add_device(struct device *dev) > > static void iommu_del_device(struct device *dev) > { > + /* > + * Some devices might not have IOMMU table and group > + * and we needn't detach them from the associated > + * IOMMU groups > + */ > + if (!dev->iommu_group) { > + pr_debug("iommu_tce: skipping device %s with no tbl\n", > + dev_name(dev)); > + return; > + } > + > iommu_group_remove_device(dev); > } > > -- Alexey _______________________________________________ Linuxppc-dev mailing list [email protected] https://lists.ozlabs.org/listinfo/linuxppc-dev
