Re: tlb flushing on Power
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2012-02-08 21:04:24
You can look at https://lkml.org/lkml/2012/1/9/389 in zsmalloc-main.c, zs_[un]map_object() functions for the currently uses of set_pte() and __flush_tlb_one().quoted
set_pte() is long gone on all archs really (or if it's still there it's not meant to be used as is), use set_pte_at().Problem with set_pte_at() for us is that we don't have an mm_struct to pass because the mapping is not for a userspace process but for the kernel itself.
Then use init_mm
However, I do think this is the portable function we need to be using. Just need to figure out what to pass in for the mm_struct param.quoted
__flush_tlb_one() doesn't mean anything as an arch independent functionality. We have a local_flush_tlb_page() that -might- do what you want but why in hell is that patch not using proper existing interfaces ?flush_tlb_page() is the portable function we should be using. However, again, it requires a vma_area_struct. I'm not sure what we should be passing there.
Do you need this to be CPU local flush or global ? In the later, flush_tlb_kernel_range() is the right API. If you want per-cpu, we'll have to add a new arch hook. Cheers, Ben.