Commit fb1b6955 authored by Joerg Roedel's avatar Joerg Roedel

iommu/amd: Unexport get_dev_data()

This function is internal to the AMD IOMMU driver and only exported
because the amd_iommu_v2 modules calls it. But the reason it is called
from there could better be handled by amd_iommu_is_attach_deferred().
So unexport get_dev_data() and use amd_iommu_is_attach_deferred()
instead.
Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
Reviewed-by: default avatarSuravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Link: https://lore.kernel.org/r/20200527115313.7426-3-joro@8bytes.org
parent 4c201d58
...@@ -280,11 +280,10 @@ static struct iommu_dev_data *find_dev_data(u16 devid) ...@@ -280,11 +280,10 @@ static struct iommu_dev_data *find_dev_data(u16 devid)
return dev_data; return dev_data;
} }
struct iommu_dev_data *get_dev_data(struct device *dev) static struct iommu_dev_data *get_dev_data(struct device *dev)
{ {
return dev->archdata.iommu; return dev->archdata.iommu;
} }
EXPORT_SYMBOL(get_dev_data);
/* /*
* Find or create an IOMMU group for a acpihid device. * Find or create an IOMMU group for a acpihid device.
...@@ -2706,12 +2705,14 @@ static void amd_iommu_get_resv_regions(struct device *dev, ...@@ -2706,12 +2705,14 @@ static void amd_iommu_get_resv_regions(struct device *dev,
list_add_tail(&region->list, head); list_add_tail(&region->list, head);
} }
static bool amd_iommu_is_attach_deferred(struct iommu_domain *domain, bool amd_iommu_is_attach_deferred(struct iommu_domain *domain,
struct device *dev) struct device *dev)
{ {
struct iommu_dev_data *dev_data = dev->archdata.iommu; struct iommu_dev_data *dev_data = dev->archdata.iommu;
return dev_data->defer_attach; return dev_data->defer_attach;
} }
EXPORT_SYMBOL_GPL(amd_iommu_is_attach_deferred);
static void amd_iommu_flush_iotlb_all(struct iommu_domain *domain) static void amd_iommu_flush_iotlb_all(struct iommu_domain *domain)
{ {
......
...@@ -92,5 +92,6 @@ static inline void *iommu_phys_to_virt(unsigned long paddr) ...@@ -92,5 +92,6 @@ static inline void *iommu_phys_to_virt(unsigned long paddr)
} }
extern bool translation_pre_enabled(struct amd_iommu *iommu); extern bool translation_pre_enabled(struct amd_iommu *iommu);
extern struct iommu_dev_data *get_dev_data(struct device *dev); extern bool amd_iommu_is_attach_deferred(struct iommu_domain *domain,
struct device *dev);
#endif /* _ASM_X86_AMD_IOMMU_PROTO_H */ #endif /* _ASM_X86_AMD_IOMMU_PROTO_H */
...@@ -517,13 +517,12 @@ static int ppr_notifier(struct notifier_block *nb, unsigned long e, void *data) ...@@ -517,13 +517,12 @@ static int ppr_notifier(struct notifier_block *nb, unsigned long e, void *data)
struct amd_iommu_fault *iommu_fault; struct amd_iommu_fault *iommu_fault;
struct pasid_state *pasid_state; struct pasid_state *pasid_state;
struct device_state *dev_state; struct device_state *dev_state;
struct pci_dev *pdev = NULL;
unsigned long flags; unsigned long flags;
struct fault *fault; struct fault *fault;
bool finish; bool finish;
u16 tag, devid; u16 tag, devid;
int ret; int ret;
struct iommu_dev_data *dev_data;
struct pci_dev *pdev = NULL;
iommu_fault = data; iommu_fault = data;
tag = iommu_fault->tag & 0x1ff; tag = iommu_fault->tag & 0x1ff;
...@@ -534,12 +533,11 @@ static int ppr_notifier(struct notifier_block *nb, unsigned long e, void *data) ...@@ -534,12 +533,11 @@ static int ppr_notifier(struct notifier_block *nb, unsigned long e, void *data)
devid & 0xff); devid & 0xff);
if (!pdev) if (!pdev)
return -ENODEV; return -ENODEV;
dev_data = get_dev_data(&pdev->dev);
/* In kdump kernel pci dev is not initialized yet -> send INVALID */
ret = NOTIFY_DONE; ret = NOTIFY_DONE;
if (translation_pre_enabled(amd_iommu_rlookup_table[devid])
&& dev_data->defer_attach) { /* In kdump kernel pci dev is not initialized yet -> send INVALID */
if (amd_iommu_is_attach_deferred(NULL, &pdev->dev)) {
amd_iommu_complete_ppr(pdev, iommu_fault->pasid, amd_iommu_complete_ppr(pdev, iommu_fault->pasid,
PPR_INVALID, tag); PPR_INVALID, tag);
goto out; goto out;
......
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