Re: [PATCH v2 1/3] zsmalloc: support zsmalloc to ARM, MIPS, SUPERH
From: Minchan Kim <minchan@kernel.org>
Date: 2012-05-17 08:03:49
Also in:
lkml
On 05/17/2012 09:56 AM, Guan Xuetao wrote:
On Thu, 2012-05-17 at 09:07 +0900, Minchan Kim wrote:quoted
On 05/16/2012 04:28 PM, Guan Xuetao wrote:quoted
On Wed, 2012-05-16 at 11:05 +0900, Minchan Kim wrote:quoted
zsmalloc uses set_pte and __flush_tlb_one for performance but many architecture don't support it. so this patch removes set_pte and __flush_tlb_one which are x86 dependency. Instead of it, use local_flush_tlb_kernel_range which are available by more architectures. It would be better than supporting only x86 and last patch in series will enable again with supporting local_flush_tlb_kernel_range in x86. About local_flush_tlb_kernel_range, If architecture is very smart, it could flush only tlb entries related to vaddr. If architecture is smart, it could flush only tlb entries related to a CPU. If architecture is _NOT_ smart, it could flush all entries of all CPUs. So, it would be best to support both portability and performance. Cc: Russell King <redacted> Cc: Ralf Baechle <redacted> Cc: Paul Mundt <redacted> Cc: Guan Xuetao <redacted> Cc: Chen Liqin <redacted> Signed-off-by: Minchan Kim <minchan@kernel.org> --- Need double check about supporting local_flush_tlb_kernel_range in ARM, MIPS, SUPERH maintainers. And I will Ccing unicore32 and score maintainers because arch directory in those arch have local_flush_tlb_kernel_range, too but I'm very unfamiliar with those architecture so pass it to maintainers. I didn't coded up dumb local_flush_tlb_kernel_range which flush all cpus. I expect someone need ZSMALLOC will implement it easily in future. Seth might support it in PowerPC. :) drivers/staging/zsmalloc/Kconfig | 6 ++--- drivers/staging/zsmalloc/zsmalloc-main.c | 36 +++++++++++++++++++++--------- drivers/staging/zsmalloc/zsmalloc_int.h | 1 - 3 files changed, 29 insertions(+), 14 deletions(-)diff --git a/drivers/staging/zsmalloc/Kconfig b/drivers/staging/zsmalloc/Kconfig index a5ab720..def2483 100644 --- a/drivers/staging/zsmalloc/Kconfig +++ b/drivers/staging/zsmalloc/Kconfig@@ -1,9 +1,9 @@ config ZSMALLOC tristate "Memory allocator for compressed pages" - # X86 dependency is because of the use of __flush_tlb_one and set_pte + # arch dependency is because of the use of local_unmap_kernel_range # in zsmalloc-main.c. - # TODO: convert these to portable functions - depends on X86 + # TODO: implement local_unmap_kernel_range in all architecture. + depends on (ARM || MIPS || SUPERH)I suggest removing above line, so if I want to use zsmalloc, I could enable this configuration easily.I don't get it. What do you mean? If I remove above line, compile error will happen if arch doesn't support local_unmap_kernel_range.If I want to use zsmalloc, I will verify local_unmap_kernel_range function. In fact, only local_flush_tlb_kernel_range need to be considered. So, just keeping the default option 'n' is enough.
I don't think so. It's terrible experience if all users have to look up local_flush_tlb_kernel_range of arch for using zsmalloc. BTW, does unicore32 support that function? If so, I would like to add unicore32 in Kconfig. -- Kind regards, Minchan Kim -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>