Messages in this thread | | | Subject | Re: [PATCH 02/20] dma-mapping: provide a generic dma-noncoherent implementation | From | Helge Deller <> | Date | Fri, 18 May 2018 22:05:51 +0200 |
| |
On 18.05.2018 15:03, Alexey Brodkin wrote: > But the real fix of my problem is: > ---------------------------------------->8------------------------------------ > --- a/lib/dma-noncoherent.c > +++ b/lib/dma-noncoherent.c > @@ -35,7 +35,7 @@ static dma_addr_t dma_noncoherent_map_page(struct device *dev, struct page *page > > addr = dma_direct_map_page(dev, page, offset, size, dir, attrs); > if (!dma_mapping_error(dev, addr) && !(attrs & DMA_ATTR_SKIP_CPU_SYNC)) > - arch_sync_dma_for_device(dev, page_to_phys(page), size, dir); > + arch_sync_dma_for_device(dev, page_to_phys(page) + offset, size, dir); > return addr; > } > ---------------------------------------->8------------------------------------ > > You seem to lost an offset in the page so if we happen to have a buffer not aligned to > a page boundary then we were obviously corrupting data outside our data :)
Good. This patch seems to fix the dma issues I faced on my 32bit B160L parisc box.
So it leaves only one open issue on parisc: Now every 32 bit parisc system is unnecessarily non-coherent.
Helge
| |