iommu: Move report_iommu_fault() to iommu.c
The function is in no fast-path, there is no need for it to be static inline in a header file. This also removes the need to include iommu trace-points in iommu.h. Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
e8245c1b1a
commit
207c6e36f1
|
@ -1655,6 +1655,48 @@ void iommu_domain_window_disable(struct iommu_domain *domain, u32 wnd_nr)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(iommu_domain_window_disable);
|
EXPORT_SYMBOL_GPL(iommu_domain_window_disable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* report_iommu_fault() - report about an IOMMU fault to the IOMMU framework
|
||||||
|
* @domain: the iommu domain where the fault has happened
|
||||||
|
* @dev: the device where the fault has happened
|
||||||
|
* @iova: the faulting address
|
||||||
|
* @flags: mmu fault flags (e.g. IOMMU_FAULT_READ/IOMMU_FAULT_WRITE/...)
|
||||||
|
*
|
||||||
|
* This function should be called by the low-level IOMMU implementations
|
||||||
|
* whenever IOMMU faults happen, to allow high-level users, that are
|
||||||
|
* interested in such events, to know about them.
|
||||||
|
*
|
||||||
|
* This event may be useful for several possible use cases:
|
||||||
|
* - mere logging of the event
|
||||||
|
* - dynamic TLB/PTE loading
|
||||||
|
* - if restarting of the faulting device is required
|
||||||
|
*
|
||||||
|
* Returns 0 on success and an appropriate error code otherwise (if dynamic
|
||||||
|
* PTE/TLB loading will one day be supported, implementations will be able
|
||||||
|
* to tell whether it succeeded or not according to this return value).
|
||||||
|
*
|
||||||
|
* Specifically, -ENOSYS is returned if a fault handler isn't installed
|
||||||
|
* (though fault handlers can also return -ENOSYS, in case they want to
|
||||||
|
* elicit the default behavior of the IOMMU drivers).
|
||||||
|
*/
|
||||||
|
int report_iommu_fault(struct iommu_domain *domain, struct device *dev,
|
||||||
|
unsigned long iova, int flags)
|
||||||
|
{
|
||||||
|
int ret = -ENOSYS;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* if upper layers showed interest and installed a fault handler,
|
||||||
|
* invoke it.
|
||||||
|
*/
|
||||||
|
if (domain->handler)
|
||||||
|
ret = domain->handler(domain, dev, iova, flags,
|
||||||
|
domain->handler_token);
|
||||||
|
|
||||||
|
trace_io_page_fault(dev, iova, flags);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(report_iommu_fault);
|
||||||
|
|
||||||
static int __init iommu_init(void)
|
static int __init iommu_init(void)
|
||||||
{
|
{
|
||||||
iommu_group_kset = kset_create_and_add("iommu_groups",
|
iommu_group_kset = kset_create_and_add("iommu_groups",
|
||||||
|
|
|
@ -330,46 +330,9 @@ extern int iommu_domain_window_enable(struct iommu_domain *domain, u32 wnd_nr,
|
||||||
phys_addr_t offset, u64 size,
|
phys_addr_t offset, u64 size,
|
||||||
int prot);
|
int prot);
|
||||||
extern void iommu_domain_window_disable(struct iommu_domain *domain, u32 wnd_nr);
|
extern void iommu_domain_window_disable(struct iommu_domain *domain, u32 wnd_nr);
|
||||||
/**
|
|
||||||
* report_iommu_fault() - report about an IOMMU fault to the IOMMU framework
|
|
||||||
* @domain: the iommu domain where the fault has happened
|
|
||||||
* @dev: the device where the fault has happened
|
|
||||||
* @iova: the faulting address
|
|
||||||
* @flags: mmu fault flags (e.g. IOMMU_FAULT_READ/IOMMU_FAULT_WRITE/...)
|
|
||||||
*
|
|
||||||
* This function should be called by the low-level IOMMU implementations
|
|
||||||
* whenever IOMMU faults happen, to allow high-level users, that are
|
|
||||||
* interested in such events, to know about them.
|
|
||||||
*
|
|
||||||
* This event may be useful for several possible use cases:
|
|
||||||
* - mere logging of the event
|
|
||||||
* - dynamic TLB/PTE loading
|
|
||||||
* - if restarting of the faulting device is required
|
|
||||||
*
|
|
||||||
* Returns 0 on success and an appropriate error code otherwise (if dynamic
|
|
||||||
* PTE/TLB loading will one day be supported, implementations will be able
|
|
||||||
* to tell whether it succeeded or not according to this return value).
|
|
||||||
*
|
|
||||||
* Specifically, -ENOSYS is returned if a fault handler isn't installed
|
|
||||||
* (though fault handlers can also return -ENOSYS, in case they want to
|
|
||||||
* elicit the default behavior of the IOMMU drivers).
|
|
||||||
*/
|
|
||||||
static inline int report_iommu_fault(struct iommu_domain *domain,
|
|
||||||
struct device *dev, unsigned long iova, int flags)
|
|
||||||
{
|
|
||||||
int ret = -ENOSYS;
|
|
||||||
|
|
||||||
/*
|
extern int report_iommu_fault(struct iommu_domain *domain, struct device *dev,
|
||||||
* if upper layers showed interest and installed a fault handler,
|
unsigned long iova, int flags);
|
||||||
* invoke it.
|
|
||||||
*/
|
|
||||||
if (domain->handler)
|
|
||||||
ret = domain->handler(domain, dev, iova, flags,
|
|
||||||
domain->handler_token);
|
|
||||||
|
|
||||||
trace_io_page_fault(dev, iova, flags);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline size_t iommu_map_sg(struct iommu_domain *domain,
|
static inline size_t iommu_map_sg(struct iommu_domain *domain,
|
||||||
unsigned long iova, struct scatterlist *sg,
|
unsigned long iova, struct scatterlist *sg,
|
||||||
|
|
Loading…
Reference in New Issue