Re: [PATCH v2 1/2] powerpc/book3s64/radix: make tlb_single_page_flush_ceiling a debugfs entry
From: Daniel Axtens <hidden>
Date: 2021-08-13 07:40:30
"Aneesh Kumar K.V" [off-list ref] writes:
quoted hunk ↗ jump to hunk
Similar to x86/s390 add a debugfs file to tune tlb_single_page_flush_ceiling. Also add a debugfs entry for tlb_local_single_page_flush_ceiling. Signed-off-by: Aneesh Kumar K.V <redacted> --- Changes from v1: * switch to debugfs_create_u32 arch/powerpc/mm/book3s64/radix_tlb.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)diff --git a/arch/powerpc/mm/book3s64/radix_tlb.c b/arch/powerpc/mm/book3s64/radix_tlb.c index aefc100d79a7..1fa2bc6a969e 100644 --- a/arch/powerpc/mm/book3s64/radix_tlb.c +++ b/arch/powerpc/mm/book3s64/radix_tlb.c@@ -17,6 +17,7 @@ #include <asm/trace.h> #include <asm/cputhreads.h> #include <asm/plpar_wrappers.h> +#include <asm/debugfs.h> #include "internal.h"@@ -1106,8 +1107,8 @@ EXPORT_SYMBOL(radix__flush_tlb_kernel_range); * invalidating a full PID, so it has a far lower threshold to change from * individual page flushes to full-pid flushes. */ -static unsigned long tlb_single_page_flush_ceiling __read_mostly = 33; -static unsigned long tlb_local_single_page_flush_ceiling __read_mostly = POWER9_TLB_SETS_RADIX * 2; +static u32 tlb_single_page_flush_ceiling __read_mostly = 33; +static u32 tlb_local_single_page_flush_ceiling __read_mostly = POWER9_TLB_SETS_RADIX * 2; static inline void __radix__flush_tlb_range(struct mm_struct *mm, unsigned long start, unsigned long end)@@ -1524,3 +1525,14 @@ void do_h_rpt_invalidate_prt(unsigned long pid, unsigned long lpid, EXPORT_SYMBOL_GPL(do_h_rpt_invalidate_prt); #endif /* CONFIG_KVM_BOOK3S_HV_POSSIBLE */ + +static int __init create_tlb_single_page_flush_ceiling(void) +{ + debugfs_create_u32("tlb_single_page_flush_ceiling", 0600, + powerpc_debugfs_root, &tlb_single_page_flush_ceiling); + debugfs_create_u32("tlb_local_single_page_flush_ceiling", 0600, + powerpc_debugfs_root, &tlb_local_single_page_flush_ceiling); + return 0; +} +late_initcall(create_tlb_single_page_flush_ceiling);
This patch seems to do what the commit message says, and it does seem to make sense to have these parameters as tunables. I was briefly concerned that switching from an unsigned long to a u32 might lead to suboptimal code generation in older gcc versions, but it doesn't seem to be a case where a single instruction is going to make a huge impact. I also wondered what the C integer promotion rules would do with a the nr_pages > tlb*flush_ceiling comparisons, but if we are trying to flush more than 4 billion pages we might have other, bigger problems! (Also, if I understand the C integer rules correctly the u32 will get promoted to an unsigned long anyway.) All in all this seems good to me. Reviewed-by: Daniel Axtens <redacted> Kind regards, Daniel
+ -- 2.31.1