x86: fix dma_mapping_error for 32bit x86
Devices like b44 ethernet can't dma from addresses above 1GB. The driver handles this cases by falling back to GFP_DMA allocation. But for detecting the problem it needs to get an indication from dma_mapping_error. The bug is triggered by using a VMSPLIT option of 2G/2G. Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Acked-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
b627c8b17c
commit
7b1dedca42
1 changed files with 2 additions and 4 deletions
|
@ -71,15 +71,13 @@ static inline struct dma_mapping_ops *get_dma_ops(struct device *dev)
|
||||||
/* Make sure we keep the same behaviour */
|
/* Make sure we keep the same behaviour */
|
||||||
static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
|
static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_64
|
||||||
return 0;
|
|
||||||
#else
|
|
||||||
struct dma_mapping_ops *ops = get_dma_ops(dev);
|
struct dma_mapping_ops *ops = get_dma_ops(dev);
|
||||||
if (ops->mapping_error)
|
if (ops->mapping_error)
|
||||||
return ops->mapping_error(dev, dma_addr);
|
return ops->mapping_error(dev, dma_addr);
|
||||||
|
|
||||||
return (dma_addr == bad_dma_address);
|
|
||||||
#endif
|
#endif
|
||||||
|
return (dma_addr == bad_dma_address);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
|
#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
|
||||||
|
|
Loading…
Add table
Reference in a new issue