On Fri, 2010-02-26 at 21:49 +0000, Benjamin Herrenschmidt wrote: > > > > On ARM11MPCore we flush the caches in flush_dcache_page() because the > > > > cache maintenance operations weren't visible to the other CPUs. > > > > > > I'm not even sure that's going to be 100% correct. Don't you also need > > > to flush the remote icaches when you are dealing with instructions (such > > > as swap) anyways ? > > > > I don't think we tried swap but for pages that have been mapped for the > > first time, the I-cache would be clean. > > > > At mm switching, if a thread > > migrates to a new CPU we invalidate the cache at that point. > > That sounds fragile. What about a multithread app with one thread on > each core hitting the pages at the same time ? Sounds racy to me... Interestingly, until commit 826cbdaff29 (< 2 years ago), we didn't have any I-cache flushing in update_mmu_cache() and it was working fine. I added it for correctness reasons rather than to fix something. My theory is that it was working because a page cache page tends to keep the same physical address, especially if we don't swap pages, and a 16KB PIPT cache cannot hold enough lines to show any issues (lines are replaced frequently). I suspect that's one of the reasons why only invalidating the whole I-cache when switching the mm to a new CPU seems to suffice. Once we enable some form of swapping, it may show the problem. -- Catalin -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html