On 10/25/2012 10:56 PM, Linus Torvalds wrote:
Guess what? If you want to optimize the function to not do remote TLB flushes, then just do that! None of the garbage. Just change the flush_tlb_page(vma, address); line to __flush_tlb_one(address);
That may not even be needed. Apparently Intel chips automatically flush an entry from the TLB when it causes a page fault. I assume AMD chips do the same, because flush_tlb_fix_spurious_fault evaluates to nothing on x86.
and it should damn well work. Because everything I see about "flush_remote" looks just wrong, wrong, wrong.
Are there architectures where we do need to flush remote TLBs on upgrading the permissions on a PTE? Because that is what the implementation in pgtable-generic.c seems to be doing as well...
And if there really is some reason for that whole flush_remote braindamage, then we have much bigger problems, namely the fact that we've broken the documented semantics of that function, and we're doing various other things that are completely and utterly invalid unless the above semantics hold.
Want to just remove the TLB flush entirely and see if anything breaks in 3.8-rc1? From reading the code again, it looks like things should indeed work ok. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>