Message ID | 20231120084300.4368-5-osalvador@suse.de (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | page_owner: print stacks and their counter | expand |
Hi Oscar, kernel test robot noticed the following build warnings: [auto build test WARNING on akpm-mm/mm-everything] [also build test WARNING on linus/master v6.7-rc2 next-20231120] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Oscar-Salvador/lib-stackdepot-Add-a-refcount-field-in-stack_record/20231120-164913 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20231120084300.4368-5-osalvador%40suse.de patch subject: [PATCH v6 4/4] mm,page_owner: Filter out stacks by a threshold counter config: arm-randconfig-001-20231120 (https://download.01.org/0day-ci/archive/20231120/202311202220.b6pHpn7J-lkp@intel.com/config) compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231120/202311202220.b6pHpn7J-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202311202220.b6pHpn7J-lkp@intel.com/ All warnings (new ones prefixed by >>): >> mm/page_owner.c:819:5: warning: no previous prototype for function 'page_owner_threshold_get' [-Wmissing-prototypes] 819 | int page_owner_threshold_get(void *data, u64 *val) | ^ mm/page_owner.c:819:1: note: declare 'static' if the function is not intended to be used outside of this translation unit 819 | int page_owner_threshold_get(void *data, u64 *val) | ^ | static >> mm/page_owner.c:825:5: warning: no previous prototype for function 'page_owner_threshold_set' [-Wmissing-prototypes] 825 | int page_owner_threshold_set(void *data, u64 val) | ^ mm/page_owner.c:825:1: note: declare 'static' if the function is not intended to be used outside of this translation unit 825 | int page_owner_threshold_set(void *data, u64 val) | ^ | static 2 warnings generated. vim +/page_owner_threshold_get +819 mm/page_owner.c 818 > 819 int page_owner_threshold_get(void *data, u64 *val) 820 { 821 *val = page_owner_stack_threshold; 822 return 0; 823 } 824 > 825 int page_owner_threshold_set(void *data, u64 val) 826 { 827 page_owner_stack_threshold = val; 828 return 0; 829 } 830
Hi Oscar, kernel test robot noticed the following build warnings: [auto build test WARNING on akpm-mm/mm-everything] [also build test WARNING on linus/master v6.7-rc2 next-20231120] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Oscar-Salvador/lib-stackdepot-Add-a-refcount-field-in-stack_record/20231120-164913 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20231120084300.4368-5-osalvador%40suse.de patch subject: [PATCH v6 4/4] mm,page_owner: Filter out stacks by a threshold counter config: arc-allmodconfig (https://download.01.org/0day-ci/archive/20231121/202311210354.BwQoLzVO-lkp@intel.com/config) compiler: arceb-elf-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231121/202311210354.BwQoLzVO-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202311210354.BwQoLzVO-lkp@intel.com/ All warnings (new ones prefixed by >>): >> mm/page_owner.c:819:5: warning: no previous prototype for 'page_owner_threshold_get' [-Wmissing-prototypes] 819 | int page_owner_threshold_get(void *data, u64 *val) | ^~~~~~~~~~~~~~~~~~~~~~~~ >> mm/page_owner.c:825:5: warning: no previous prototype for 'page_owner_threshold_set' [-Wmissing-prototypes] 825 | int page_owner_threshold_set(void *data, u64 val) | ^~~~~~~~~~~~~~~~~~~~~~~~ vim +/page_owner_threshold_get +819 mm/page_owner.c 818 > 819 int page_owner_threshold_get(void *data, u64 *val) 820 { 821 *val = page_owner_stack_threshold; 822 return 0; 823 } 824 > 825 int page_owner_threshold_set(void *data, u64 val) 826 { 827 page_owner_stack_threshold = val; 828 return 0; 829 } 830
diff --git a/mm/page_owner.c b/mm/page_owner.c index 509c11e506db..6ee345dafd01 100644 --- a/mm/page_owner.c +++ b/mm/page_owner.c @@ -41,6 +41,8 @@ static depot_stack_handle_t dummy_handle; static depot_stack_handle_t failure_handle; static depot_stack_handle_t early_handle; +static unsigned long page_owner_stack_threshold; + static void init_early_allocated_pages(void); static int __init early_page_owner_param(char *buf) @@ -763,6 +765,9 @@ static int stack_print(struct seq_file *m, void *v) int ret = 0; struct stack_record *stack = (struct stack_record *)v; + if (refcount_read(&stack->count) < page_owner_stack_threshold) + return 0; + buf = kzalloc(PAGE_SIZE, GFP_KERNEL); ret += stack_depot_get_stack_info(stack, buf); @@ -804,6 +809,21 @@ const struct file_operations page_owner_stack_operations = { .release = seq_release, }; +int page_owner_threshold_get(void *data, u64 *val) +{ + *val = page_owner_stack_threshold; + return 0; +} + +int page_owner_threshold_set(void *data, u64 val) +{ + page_owner_stack_threshold = val; + return 0; +} + +DEFINE_SIMPLE_ATTRIBUTE(proc_page_owner_threshold, &page_owner_threshold_get, + &page_owner_threshold_set, "%llu"); + static int __init pageowner_init(void) { if (!static_branch_unlikely(&page_owner_inited)) { @@ -815,6 +835,8 @@ static int __init pageowner_init(void) &proc_page_owner_operations); debugfs_create_file("page_owner_stacks", 0400, NULL, NULL, &page_owner_stack_operations); + debugfs_create_file("page_owner_threshold", 0600, NULL, NULL, + &proc_page_owner_threshold); return 0; }
We want to be able to filter out the output based on a certain threshold, so we can leave out stacks with a low counter of outstanding allocations. We can control the threshold value by a new file called 'page_owner_threshold', which is 0 by default. Signed-off-by: Oscar Salvador <osalvador@suse.de> --- mm/page_owner.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)