Hi Rabin, > Rabin Vincent <rabin@xxxxxx> hat am 14. April 2017 um 09:41 geschrieben: > > > On Thu, Apr 13, 2017 at 11:29:15PM +0100, Russell King - ARM Linux wrote: > > > 00a19f3e25c0c40e0ec77f52d4841d23ad269169 is the first bad commit > > > commit 00a19f3e25c0c40e0ec77f52d4841d23ad269169 > > > Author: Rabin Vincent <rabinv@xxxxxxxx> > > > Date: Tue Nov 8 09:21:19 2016 +0100 > > > > > > ARM: 8627/1: avoid cache flushing in flush_dcache_page() > > > > > > When the data cache is PIPT or VIPT non-aliasing, and cache operations > > > are broadcast by the hardware, we can always postpone the flush in > > > flush_dcache_page(). A similar change was done for ARM64 in commit > > > b5b6c9e9149d ("arm64: Avoid cache flushing in flush_dcache_page()"). > > > > > > Reviewed-by: Catalin Marinas <catalin.marinas@xxxxxxx> > > > Signed-off-by: Rabin Vincent <rabinv@xxxxxxxx> > > > Signed-off-by: Russell King <rmk+kernel@xxxxxxxxxxxxxxxx> > > > > > > It seems that staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm > > > relies on the behavior of flush_dcache_page before this patch get > > > applied. Any advices to fix this issues are appreciated. > > > > Any ideas why this causes a problem for this driver? From what I can see, > > it doesn't make use of flush_dcache_page(). > > The driver's create_pagelist() uses get_free_pages(), and > get_free_pages() calls flush_dcache_page(). i think you mean get_user_pages(). > > The problem is that the driver fails to flush the pages which it > acquires via get_free_pages(). It's clear that the driver needs to do > it, since there is a flush in the is_vmalloc_addr() path in the same > function. The driver probably worked earlier because of the unecessary > flush in flush_dcache_page() which existed before this patch, but the > purpose of that flush was not DMA coherency and it was never guaranteed > that it would flush all the way to the point that devices could see the > data. > > See radeon_ttm_tt_pin_userptr() in drivers/gpu/drm/radeon/radeon_ttm.c > for an example of how a driver can ensure cache coherency using the DMA > mapping API if it intends to DMA from/to pages acquired by > get_free_pages(). Thanks for your explanation and the example, but i can't see the relevant difference. So i think i'm not the right person to fix this issue, but i will test any patches regarding to this issue. > > The rest of the driver should also be converted to the DMA mapping API > instead of abusing the API's private functions (dmac_map_area etc.) I will add this to the TODO file of the driver. Regards Stefan _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel