[v2,5/7] mm: vmalloc: Use trace_purge_vmap_area_lazy event

Message ID 20221018181053.434508-6-urezki@gmail.com
State New
Headers
Series Add basic trace events for vmap/vmalloc (v2) |

Commit Message

Uladzislau Rezki Oct. 18, 2022, 6:10 p.m. UTC
  This is for debug purpose and is called when all outstanding
areas are removed back to the vmap space. It gives some extra
information about:
- a start:end range where set of vmap ares were freed;
- a number of purged areas which were backed off.

Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
---
 mm/vmalloc.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
  

Comments

Christoph Hellwig Oct. 20, 2022, 11:25 a.m. UTC | #1
> +	return num_purged_areas > 0 ? true:false;

The formatting here is a bit off due to the lack of whitespaces around
the :.  But as boolean expression propagate to boolean values this
can be simplified to:

	return num_purged_areas > 0;

anyway.

Otherwise looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>
  
Uladzislau Rezki Oct. 20, 2022, 12:55 p.m. UTC | #2
> > +	return num_purged_areas > 0 ? true:false;
> 
> The formatting here is a bit off due to the lack of whitespaces around
> the :.  But as boolean expression propagate to boolean values this
> can be simplified to:
> 
> 	return num_purged_areas > 0;
> 
Good point! Indeed it is odd.

--
Uladzislau Rezki
  
kernel test robot Oct. 23, 2022, 10:51 p.m. UTC | #3
Hi Uladzislau,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on akpm-mm/mm-everything]
[also build test WARNING on linus/master v6.1-rc1]
[cannot apply to next-20221021]
[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/Uladzislau-Rezki-Sony/Add-basic-trace-events-for-vmap-vmalloc-v2/20221019-021918
base:   https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link:    https://lore.kernel.org/r/20221018181053.434508-6-urezki%40gmail.com
patch subject: [PATCH v2 5/7] mm: vmalloc: Use trace_purge_vmap_area_lazy event
config: sparc-randconfig-c031-20221023
compiler: sparc64-linux-gcc (GCC) 12.1.0

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>

cocci warnings: (new ones prefixed by >>)
>> mm/vmalloc.c:1789:36-41: WARNING: conversion to bool not needed here
  
Uladzislau Rezki Oct. 24, 2022, 12:48 p.m. UTC | #4
Hello, Andrew.

> Hi Uladzislau,
> 
> Thank you for the patch! Perhaps something to improve:
> 
> [auto build test WARNING on akpm-mm/mm-everything]
> [also build test WARNING on linus/master v6.1-rc1]
> [cannot apply to next-20221021]
> [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/Uladzislau-Rezki-Sony/Add-basic-trace-events-for-vmap-vmalloc-v2/20221019-021918
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
> patch link:    https://lore.kernel.org/r/20221018181053.434508-6-urezki%40gmail.com
> patch subject: [PATCH v2 5/7] mm: vmalloc: Use trace_purge_vmap_area_lazy event
> config: sparc-randconfig-c031-20221023
> compiler: sparc64-linux-gcc (GCC) 12.1.0
> 
> If you fix the issue, kindly add following tag where applicable
> | Reported-by: kernel test robot <lkp@intel.com>
> 
> cocci warnings: (new ones prefixed by >>)
> >> mm/vmalloc.c:1789:36-41: WARNING: conversion to bool not needed here
> 
I think it should be fixed by the:

https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/mm-vmalloc-use-trace_purge_vmap_area_lazy-event-fix.patch

Thanks!

--
Uladzislau Rezki
  

Patch

diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index aa86f21bfad0..4292f44ae670 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -1731,6 +1731,7 @@  static void purge_fragmented_blocks_allcpus(void);
 static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end)
 {
 	unsigned long resched_threshold;
+	unsigned int num_purged_areas = 0;
 	struct list_head local_purge_list;
 	struct vmap_area *va, *n_va;
 
@@ -1742,7 +1743,7 @@  static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end)
 	spin_unlock(&purge_vmap_area_lock);
 
 	if (unlikely(list_empty(&local_purge_list)))
-		return false;
+		goto out;
 
 	start = min(start,
 		list_first_entry(&local_purge_list,
@@ -1777,12 +1778,16 @@  static bool __purge_vmap_area_lazy(unsigned long start, unsigned long end)
 					      va->va_start, va->va_end);
 
 		atomic_long_sub(nr, &vmap_lazy_nr);
+		num_purged_areas++;
 
 		if (atomic_long_read(&vmap_lazy_nr) < resched_threshold)
 			cond_resched_lock(&free_vmap_area_lock);
 	}
 	spin_unlock(&free_vmap_area_lock);
-	return true;
+
+out:
+	trace_purge_vmap_area_lazy(start, end, num_purged_areas);
+	return num_purged_areas > 0 ? true:false;
 }
 
 /*