Commit c2a2876e authored by Joerg Roedel's avatar Joerg Roedel
Browse files

iommu/amd: Make sure dma_ops are set for hotplug devices

There is a bug introduced with commit 27c2127a

 that causes
devices which are hot unplugged and then hot-replugged to
not have per-device dma_ops set. This causes these devices
to not function correctly. Fixed with this patch.

Reported-by: default avatarAndreas Degert <>
Signed-off-by: default avatarJoerg Roedel <>
parent 4fdc7824
...@@ -2466,18 +2466,16 @@ static int device_change_notifier(struct notifier_block *nb, ...@@ -2466,18 +2466,16 @@ static int device_change_notifier(struct notifier_block *nb,
/* allocate a protection domain if a device is added */ /* allocate a protection domain if a device is added */
dma_domain = find_protection_domain(devid); dma_domain = find_protection_domain(devid);
if (dma_domain) if (!dma_domain) {
goto out; dma_domain = dma_ops_domain_alloc();
dma_domain = dma_ops_domain_alloc(); if (!dma_domain)
if (!dma_domain) goto out;
goto out; dma_domain->target_dev = devid;
dma_domain->target_dev = devid;
spin_lock_irqsave(&iommu_pd_list_lock, flags);
spin_lock_irqsave(&iommu_pd_list_lock, flags); list_add_tail(&dma_domain->list, &iommu_pd_list);
list_add_tail(&dma_domain->list, &iommu_pd_list); spin_unlock_irqrestore(&iommu_pd_list_lock, flags);
spin_unlock_irqrestore(&iommu_pd_list_lock, flags); }
dev_data = get_dev_data(dev);
dev->archdata.dma_ops = &amd_iommu_dma_ops; dev->archdata.dma_ops = &amd_iommu_dma_ops;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment