Commit 5860acc1 authored by Christoph Hellwig's avatar Christoph Hellwig
Browse files

x86: remove arch specific dma_supported implementation



And instead wire it up as method for all the dma_map_ops instances.

Note that this also means the arch specific check will be fully instead
of partially applied in the AMD iommu driver.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 418a7a7e
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -33,9 +33,6 @@ static inline const struct dma_map_ops *get_arch_dma_ops(struct bus_type *bus)
bool arch_dma_alloc_attrs(struct device **dev, gfp_t *gfp);
#define arch_dma_alloc_attrs arch_dma_alloc_attrs

#define HAVE_ARCH_DMA_SUPPORTED 1
extern int dma_supported(struct device *hwdev, u64 mask);

extern void *dma_generic_alloc_coherent(struct device *dev, size_t size,
					dma_addr_t *dma_addr, gfp_t flag,
					unsigned long attrs);
+2 −0
Original line number Diff line number Diff line
@@ -6,6 +6,8 @@ extern int force_iommu, no_iommu;
extern int iommu_detected;
extern int iommu_pass_through;

int x86_dma_supported(struct device *dev, u64 mask);

/* 10 seconds */
#define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000)

+1 −0
Original line number Diff line number Diff line
@@ -704,6 +704,7 @@ static const struct dma_map_ops gart_dma_ops = {
	.alloc				= gart_alloc_coherent,
	.free				= gart_free_coherent,
	.mapping_error			= gart_mapping_error,
	.dma_supported			= x86_dma_supported,
};

static void gart_iommu_shutdown(void)
+1 −0
Original line number Diff line number Diff line
@@ -493,6 +493,7 @@ static const struct dma_map_ops calgary_dma_ops = {
	.map_page = calgary_map_page,
	.unmap_page = calgary_unmap_page,
	.mapping_error = calgary_mapping_error,
	.dma_supported = x86_dma_supported,
};

static inline void __iomem * busno_to_bbar(unsigned char num)
+1 −7
Original line number Diff line number Diff line
@@ -213,10 +213,8 @@ static __init int iommu_setup(char *p)
}
early_param("iommu", iommu_setup);

int dma_supported(struct device *dev, u64 mask)
int x86_dma_supported(struct device *dev, u64 mask)
{
	const struct dma_map_ops *ops = get_dma_ops(dev);

#ifdef CONFIG_PCI
	if (mask > 0xffffffff && forbid_dac > 0) {
		dev_info(dev, "PCI: Disallowing DAC for device\n");
@@ -224,9 +222,6 @@ int dma_supported(struct device *dev, u64 mask)
	}
#endif

	if (ops->dma_supported)
		return ops->dma_supported(dev, mask);

	/* Copied from i386. Doesn't make much sense, because it will
	   only work for pci_alloc_coherent.
	   The caller just has to use GFP_DMA in this case. */
@@ -252,7 +247,6 @@ int dma_supported(struct device *dev, u64 mask)

	return 1;
}
EXPORT_SYMBOL(dma_supported);

static int __init pci_iommu_init(void)
{
Loading