Commit e6eb4fdf authored by Alan Douglas's avatar Alan Douglas Committed by Greg Kroah-Hartman

xtensa: fix address checks in dma_{alloc,free}_coherent

commit 1ca49463 upstream.

Virtual address is translated to the XCHAL_KSEG_CACHED region in the
dma_free_coherent, but is checked to be in the 0...XCHAL_KSEG_SIZE
range.

Change check for end of the range from 'addr >= X' to 'addr > X - 1' to
handle the case of X == 0.

Replace 'if (C) BUG();' construct with 'BUG_ON(C);'.
Signed-off-by: default avatarAlan Douglas <adouglas@cadence.com>
Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 2f0871ed
...@@ -49,9 +49,8 @@ dma_alloc_coherent(struct device *dev,size_t size,dma_addr_t *handle,gfp_t flag) ...@@ -49,9 +49,8 @@ dma_alloc_coherent(struct device *dev,size_t size,dma_addr_t *handle,gfp_t flag)
/* We currently don't support coherent memory outside KSEG */ /* We currently don't support coherent memory outside KSEG */
if (ret < XCHAL_KSEG_CACHED_VADDR BUG_ON(ret < XCHAL_KSEG_CACHED_VADDR ||
|| ret >= XCHAL_KSEG_CACHED_VADDR + XCHAL_KSEG_SIZE) ret > XCHAL_KSEG_CACHED_VADDR + XCHAL_KSEG_SIZE - 1);
BUG();
if (ret != 0) { if (ret != 0) {
...@@ -68,10 +67,11 @@ EXPORT_SYMBOL(dma_alloc_coherent); ...@@ -68,10 +67,11 @@ EXPORT_SYMBOL(dma_alloc_coherent);
void dma_free_coherent(struct device *hwdev, size_t size, void dma_free_coherent(struct device *hwdev, size_t size,
void *vaddr, dma_addr_t dma_handle) void *vaddr, dma_addr_t dma_handle)
{ {
long addr=(long)vaddr+XCHAL_KSEG_CACHED_VADDR-XCHAL_KSEG_BYPASS_VADDR; unsigned long addr = (unsigned long)vaddr +
XCHAL_KSEG_CACHED_VADDR - XCHAL_KSEG_BYPASS_VADDR;
if (addr < 0 || addr >= XCHAL_KSEG_SIZE) BUG_ON(addr < XCHAL_KSEG_CACHED_VADDR ||
BUG(); addr > XCHAL_KSEG_CACHED_VADDR + XCHAL_KSEG_SIZE - 1);
free_pages(addr, get_order(size)); free_pages(addr, get_order(size));
} }
......
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