Message ID | 20210810045307.11892-1-aneesh.kumar@linux.ibm.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | powerpc/book3s64/radix: make tlb_single_page_flush_ceiling a debugfs entry | expand |
Related | show |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/github-powerpc_selftests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_ppctests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_sparse | success | Successfully ran 4 jobs. |
snowpatch_ozlabs/github-powerpc_kernel_qemu | success | Successfully ran 25 jobs. |
snowpatch_ozlabs/github-powerpc_clang | success | Successfully ran 8 jobs. |
Le 10/08/2021 à 06:53, Aneesh Kumar K.V a écrit : > Similar to x86/s390 add a debugfs file to tune tlb_single_page_flush_ceiling. > > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> > --- > arch/powerpc/mm/book3s64/radix_tlb.c | 48 ++++++++++++++++++++++++++++ > 1 file changed, 48 insertions(+) > > diff --git a/arch/powerpc/mm/book3s64/radix_tlb.c b/arch/powerpc/mm/book3s64/radix_tlb.c > index aefc100d79a7..5cca0fe130e7 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" > > @@ -1524,3 +1525,50 @@ 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 ssize_t tlbflush_read_file(struct file *file, char __user *user_buf, > + size_t count, loff_t *ppos) > +{ > + char buf[32]; > + unsigned int len; > + > + len = sprintf(buf, "%ld\n", tlb_single_page_flush_ceiling); > + return simple_read_from_buffer(user_buf, count, ppos, buf, len); > +} > + > +static ssize_t tlbflush_write_file(struct file *file, > + const char __user *user_buf, size_t count, loff_t *ppos) > +{ > + char buf[32]; > + ssize_t len; > + int ceiling; > + > + len = min(count, sizeof(buf) - 1); > + if (copy_from_user(buf, user_buf, len)) > + return -EFAULT; > + > + buf[len] = '\0'; > + if (kstrtoint(buf, 0, &ceiling)) > + return -EINVAL; > + > + if (ceiling < 0) > + return -EINVAL; > + > + tlb_single_page_flush_ceiling = ceiling; > + return count; > +} > + > +static const struct file_operations fops_tlbflush = { > + .read = tlbflush_read_file, > + .write = tlbflush_write_file, > + .llseek = default_llseek, > +}; > + > +static int __init create_tlb_single_page_flush_ceiling(void) > +{ > + debugfs_create_file("tlb_single_page_flush_ceiling", S_IRUSR | S_IWUSR, > + powerpc_debugfs_root, NULL, &fops_tlbflush); Could you just use debugfs_create_u32() instead of re-implementing simple read and write ? Or at least use DEFINE_DEBUGFS_ATTRIBUTE() if you need something a bit more elaborated ? > + return 0; > +} > +late_initcall(create_tlb_single_page_flush_ceiling); > + >
Christophe Leroy <christophe.leroy@csgroup.eu> writes: > Le 10/08/2021 à 06:53, Aneesh Kumar K.V a écrit : >> Similar to x86/s390 add a debugfs file to tune tlb_single_page_flush_ceiling. >> >> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> >> --- >> arch/powerpc/mm/book3s64/radix_tlb.c | 48 ++++++++++++++++++++++++++++ >> 1 file changed, 48 insertions(+) >> >> diff --git a/arch/powerpc/mm/book3s64/radix_tlb.c b/arch/powerpc/mm/book3s64/radix_tlb.c >> index aefc100d79a7..5cca0fe130e7 100644 >> --- a/arch/powerpc/mm/book3s64/radix_tlb.c >> +++ b/arch/powerpc/mm/book3s64/radix_tlb.c >> @@ -17,6 +17,7 @@ ... >> + >> +static int __init create_tlb_single_page_flush_ceiling(void) >> +{ >> + debugfs_create_file("tlb_single_page_flush_ceiling", S_IRUSR | S_IWUSR, >> + powerpc_debugfs_root, NULL, &fops_tlbflush); > > Could you just use debugfs_create_u32() instead of re-implementing simple read and write ? Yeah AFAICS that should work fine. It could probably even be a u16? cheers
On 8/12/21 12:58 PM, Michael Ellerman wrote: > Christophe Leroy <christophe.leroy@csgroup.eu> writes: >> Le 10/08/2021 à 06:53, Aneesh Kumar K.V a écrit : >>> Similar to x86/s390 add a debugfs file to tune tlb_single_page_flush_ceiling. >>> >>> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> >>> --- >>> arch/powerpc/mm/book3s64/radix_tlb.c | 48 ++++++++++++++++++++++++++++ >>> 1 file changed, 48 insertions(+) >>> >>> diff --git a/arch/powerpc/mm/book3s64/radix_tlb.c b/arch/powerpc/mm/book3s64/radix_tlb.c >>> index aefc100d79a7..5cca0fe130e7 100644 >>> --- a/arch/powerpc/mm/book3s64/radix_tlb.c >>> +++ b/arch/powerpc/mm/book3s64/radix_tlb.c >>> @@ -17,6 +17,7 @@ > ... >>> + >>> +static int __init create_tlb_single_page_flush_ceiling(void) >>> +{ >>> + debugfs_create_file("tlb_single_page_flush_ceiling", S_IRUSR | S_IWUSR, >>> + powerpc_debugfs_root, NULL, &fops_tlbflush); >> >> Could you just use debugfs_create_u32() instead of re-implementing simple read and write ? > > Yeah AFAICS that should work fine. > > It could probably even be a u16? > I was looking at switching all that to u64. Should i fallback to u16, considering a tlb_signle_page_flush_ceiling value larger that 2**16 doesn't make sense? -aneesh
"Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> writes: > On 8/12/21 12:58 PM, Michael Ellerman wrote: >> Christophe Leroy <christophe.leroy@csgroup.eu> writes: >>> Le 10/08/2021 à 06:53, Aneesh Kumar K.V a écrit : >>>> Similar to x86/s390 add a debugfs file to tune tlb_single_page_flush_ceiling. >>>> >>>> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> >>>> --- >>>> arch/powerpc/mm/book3s64/radix_tlb.c | 48 ++++++++++++++++++++++++++++ >>>> 1 file changed, 48 insertions(+) >>>> >>>> diff --git a/arch/powerpc/mm/book3s64/radix_tlb.c b/arch/powerpc/mm/book3s64/radix_tlb.c >>>> index aefc100d79a7..5cca0fe130e7 100644 >>>> --- a/arch/powerpc/mm/book3s64/radix_tlb.c >>>> +++ b/arch/powerpc/mm/book3s64/radix_tlb.c >>>> @@ -17,6 +17,7 @@ >> ... >>>> + >>>> +static int __init create_tlb_single_page_flush_ceiling(void) >>>> +{ >>>> + debugfs_create_file("tlb_single_page_flush_ceiling", S_IRUSR | S_IWUSR, >>>> + powerpc_debugfs_root, NULL, &fops_tlbflush); >>> >>> Could you just use debugfs_create_u32() instead of re-implementing simple read and write ? >> >> Yeah AFAICS that should work fine. >> >> It could probably even be a u16? > > I was looking at switching all that to u64. Should i fallback to u16, > considering a tlb_signle_page_flush_ceiling value larger that 2**16 > doesn't make sense? Hmm, if we make it u16 and someone writes a value >= 2^16 it just truncates the value to 0, which is a bit unfortunate. So maybe just make it u32, that way if someone writes a stupidly large value it stays large. cheers
diff --git a/arch/powerpc/mm/book3s64/radix_tlb.c b/arch/powerpc/mm/book3s64/radix_tlb.c index aefc100d79a7..5cca0fe130e7 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" @@ -1524,3 +1525,50 @@ 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 ssize_t tlbflush_read_file(struct file *file, char __user *user_buf, + size_t count, loff_t *ppos) +{ + char buf[32]; + unsigned int len; + + len = sprintf(buf, "%ld\n", tlb_single_page_flush_ceiling); + return simple_read_from_buffer(user_buf, count, ppos, buf, len); +} + +static ssize_t tlbflush_write_file(struct file *file, + const char __user *user_buf, size_t count, loff_t *ppos) +{ + char buf[32]; + ssize_t len; + int ceiling; + + len = min(count, sizeof(buf) - 1); + if (copy_from_user(buf, user_buf, len)) + return -EFAULT; + + buf[len] = '\0'; + if (kstrtoint(buf, 0, &ceiling)) + return -EINVAL; + + if (ceiling < 0) + return -EINVAL; + + tlb_single_page_flush_ceiling = ceiling; + return count; +} + +static const struct file_operations fops_tlbflush = { + .read = tlbflush_read_file, + .write = tlbflush_write_file, + .llseek = default_llseek, +}; + +static int __init create_tlb_single_page_flush_ceiling(void) +{ + debugfs_create_file("tlb_single_page_flush_ceiling", S_IRUSR | S_IWUSR, + powerpc_debugfs_root, NULL, &fops_tlbflush); + return 0; +} +late_initcall(create_tlb_single_page_flush_ceiling); +
Similar to x86/s390 add a debugfs file to tune tlb_single_page_flush_ceiling. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> --- arch/powerpc/mm/book3s64/radix_tlb.c | 48 ++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+)