From: Enrico Scholz <enrico.scholz@xxxxxxxxxxxxxxxxx> v8_flush_dcache_range() and v8_inv_dcache_range() are implemented under the assumption that their 'end' parameter points *after* the range. Fix callers to use it in this way. This fixes e.g. spurious corruptions in the last octet when sending 129 bytes over ethernet. Signed-off-by: Enrico Scholz <enrico.scholz@xxxxxxxxxxxxxxxxx> --- arch/arm/cpu/dma_64.c | 2 +- arch/arm/cpu/mmu_64.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/arm/cpu/dma_64.c b/arch/arm/cpu/dma_64.c index 74d7167860c2..b50572f5e601 100644 --- a/arch/arm/cpu/dma_64.c +++ b/arch/arm/cpu/dma_64.c @@ -6,7 +6,7 @@ void arch_sync_dma_for_device(void *vaddr, size_t size, enum dma_data_direction dir) { unsigned long start = (unsigned long)vaddr; - unsigned long end = start + size - 1; + unsigned long end = start + size; if (dir == DMA_FROM_DEVICE) v8_inv_dcache_range(start, end); diff --git a/arch/arm/cpu/mmu_64.c b/arch/arm/cpu/mmu_64.c index 12cd644de0c7..b48e4732b86d 100644 --- a/arch/arm/cpu/mmu_64.c +++ b/arch/arm/cpu/mmu_64.c @@ -282,7 +282,7 @@ void mmu_disable(void) void dma_inv_range(void *ptr, size_t size) { unsigned long start = (unsigned long)ptr; - unsigned long end = start + size - 1; + unsigned long end = start + size; v8_inv_dcache_range(start, end); } @@ -290,7 +290,7 @@ void dma_inv_range(void *ptr, size_t size) void dma_flush_range(void *ptr, size_t size) { unsigned long start = (unsigned long)ptr; - unsigned long end = start + size - 1; + unsigned long end = start + size; v8_flush_dcache_range(start, end); } -- 2.44.0