dmaengine: mv_xor: Fix incorrect offset in dma_map_page()
Upon booting, I occasionally spotted some BUGs triggered by the internal DMA test routine executed upon driver probing. This was detected by SLUB_DEBUG ("Freechain corrupt" or "Redzone overwritten"). Tracking this down located a problem in passing 0 as offset in dma_map_page(). As kmalloc, especially when used with SLUB_DEBUG, may return a non page aligned address. This patch fixes this issue by passing the correct offset in dma_map_page(). Tested on a custom Armada XP board. Signed-off-by: Stefan Roese <sr@denx.de> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Cc: Gregory CLEMENT <gregory.clement@free-electrons.com> Cc: Marcin Wojtas <mw@semihalf.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:
Родитель
9295c41d77
Коммит
5156463588
|
@ -703,8 +703,9 @@ static int mv_chan_memcpy_self_test(struct mv_xor_chan *mv_chan)
|
|||
goto free_resources;
|
||||
}
|
||||
|
||||
src_dma = dma_map_page(dma_chan->device->dev, virt_to_page(src), 0,
|
||||
PAGE_SIZE, DMA_TO_DEVICE);
|
||||
src_dma = dma_map_page(dma_chan->device->dev, virt_to_page(src),
|
||||
(size_t)src & ~PAGE_MASK, PAGE_SIZE,
|
||||
DMA_TO_DEVICE);
|
||||
unmap->addr[0] = src_dma;
|
||||
|
||||
ret = dma_mapping_error(dma_chan->device->dev, src_dma);
|
||||
|
@ -714,8 +715,9 @@ static int mv_chan_memcpy_self_test(struct mv_xor_chan *mv_chan)
|
|||
}
|
||||
unmap->to_cnt = 1;
|
||||
|
||||
dest_dma = dma_map_page(dma_chan->device->dev, virt_to_page(dest), 0,
|
||||
PAGE_SIZE, DMA_FROM_DEVICE);
|
||||
dest_dma = dma_map_page(dma_chan->device->dev, virt_to_page(dest),
|
||||
(size_t)dest & ~PAGE_MASK, PAGE_SIZE,
|
||||
DMA_FROM_DEVICE);
|
||||
unmap->addr[1] = dest_dma;
|
||||
|
||||
ret = dma_mapping_error(dma_chan->device->dev, dest_dma);
|
||||
|
|
Загрузка…
Ссылка в новой задаче