Re: [PATCH V3 4/4] mm/damon: Remove some no need func definitions in damon.h file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Xin,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on hnaz-mm/master]

url:    https://github.com/0day-ci/linux/commits/Xin-Hao/mm-damon-Do-some-small-changes/20211113-000614
base:   https://github.com/hnaz/linux-mm master
config: hexagon-randconfig-r041-20211115 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project fbe72e41b99dc7994daac300d208a955be3e4a0a)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/c9ed99dc122a1b52e3d9591ed817ccc826b08de0
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Xin-Hao/mm-damon-Do-some-small-changes/20211113-000614
        git checkout c9ed99dc122a1b52e3d9591ed817ccc826b08de0
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=hexagon 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

>> mm/damon/vaddr.c:274:6: warning: no previous prototype for function 'damon_va_init' [-Wmissing-prototypes]
   void damon_va_init(struct damon_ctx *ctx)
        ^
   mm/damon/vaddr.c:274:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   void damon_va_init(struct damon_ctx *ctx)
   ^
   static 
>> mm/damon/vaddr.c:358:6: warning: no previous prototype for function 'damon_va_update' [-Wmissing-prototypes]
   void damon_va_update(struct damon_ctx *ctx)
        ^
   mm/damon/vaddr.c:358:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   void damon_va_update(struct damon_ctx *ctx)
   ^
   static 
>> mm/damon/vaddr.c:420:6: warning: no previous prototype for function 'damon_va_prepare_access_checks' [-Wmissing-prototypes]
   void damon_va_prepare_access_checks(struct damon_ctx *ctx)
        ^
   mm/damon/vaddr.c:420:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   void damon_va_prepare_access_checks(struct damon_ctx *ctx)
   ^
   static 
>> mm/damon/vaddr.c:541:14: warning: no previous prototype for function 'damon_va_check_accesses' [-Wmissing-prototypes]
   unsigned int damon_va_check_accesses(struct damon_ctx *ctx)
                ^
   mm/damon/vaddr.c:541:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   unsigned int damon_va_check_accesses(struct damon_ctx *ctx)
   ^
   static 
>> mm/damon/vaddr.c:605:5: warning: no previous prototype for function 'damon_va_apply_scheme' [-Wmissing-prototypes]
   int damon_va_apply_scheme(struct damon_ctx *ctx, struct damon_target *t,
       ^
   mm/damon/vaddr.c:605:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   int damon_va_apply_scheme(struct damon_ctx *ctx, struct damon_target *t,
   ^
   static 
>> mm/damon/vaddr.c:636:5: warning: no previous prototype for function 'damon_va_scheme_score' [-Wmissing-prototypes]
   int damon_va_scheme_score(struct damon_ctx *context, struct damon_target *t,
       ^
   mm/damon/vaddr.c:636:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   int damon_va_scheme_score(struct damon_ctx *context, struct damon_target *t,
   ^
   static 
   6 warnings generated.


vim +/damon_va_init +274 mm/damon/vaddr.c

3f49584b262cf8 SeongJae Park    2021-09-07  272  
3f49584b262cf8 SeongJae Park    2021-09-07  273  /* Initialize '->regions_list' of every target (task) */
3f49584b262cf8 SeongJae Park    2021-09-07 @274  void damon_va_init(struct damon_ctx *ctx)
3f49584b262cf8 SeongJae Park    2021-09-07  275  {
3f49584b262cf8 SeongJae Park    2021-09-07  276  	struct damon_target *t;
3f49584b262cf8 SeongJae Park    2021-09-07  277  
3f49584b262cf8 SeongJae Park    2021-09-07  278  	damon_for_each_target(t, ctx) {
3f49584b262cf8 SeongJae Park    2021-09-07  279  		/* the user may set the target regions as they want */
3f49584b262cf8 SeongJae Park    2021-09-07  280  		if (!damon_nr_regions(t))
3f49584b262cf8 SeongJae Park    2021-09-07  281  			__damon_va_init_regions(ctx, t);
3f49584b262cf8 SeongJae Park    2021-09-07  282  	}
3f49584b262cf8 SeongJae Park    2021-09-07  283  }
3f49584b262cf8 SeongJae Park    2021-09-07  284  
3f49584b262cf8 SeongJae Park    2021-09-07  285  /*
3f49584b262cf8 SeongJae Park    2021-09-07  286   * Functions for the dynamic monitoring target regions update
3f49584b262cf8 SeongJae Park    2021-09-07  287   */
3f49584b262cf8 SeongJae Park    2021-09-07  288  
3f49584b262cf8 SeongJae Park    2021-09-07  289  /*
3f49584b262cf8 SeongJae Park    2021-09-07  290   * Check whether a region is intersecting an address range
3f49584b262cf8 SeongJae Park    2021-09-07  291   *
3f49584b262cf8 SeongJae Park    2021-09-07  292   * Returns true if it is.
3f49584b262cf8 SeongJae Park    2021-09-07  293   */
3f49584b262cf8 SeongJae Park    2021-09-07  294  static bool damon_intersect(struct damon_region *r, struct damon_addr_range *re)
3f49584b262cf8 SeongJae Park    2021-09-07  295  {
3f49584b262cf8 SeongJae Park    2021-09-07  296  	return !(r->ar.end <= re->start || re->end <= r->ar.start);
3f49584b262cf8 SeongJae Park    2021-09-07  297  }
3f49584b262cf8 SeongJae Park    2021-09-07  298  
3f49584b262cf8 SeongJae Park    2021-09-07  299  /*
3f49584b262cf8 SeongJae Park    2021-09-07  300   * Update damon regions for the three big regions of the given target
3f49584b262cf8 SeongJae Park    2021-09-07  301   *
3f49584b262cf8 SeongJae Park    2021-09-07  302   * t		the given target
3f49584b262cf8 SeongJae Park    2021-09-07  303   * bregions	the three big regions of the target
3f49584b262cf8 SeongJae Park    2021-09-07  304   */
3f49584b262cf8 SeongJae Park    2021-09-07  305  static void damon_va_apply_three_regions(struct damon_target *t,
3f49584b262cf8 SeongJae Park    2021-09-07  306  		struct damon_addr_range bregions[3])
3f49584b262cf8 SeongJae Park    2021-09-07  307  {
3f49584b262cf8 SeongJae Park    2021-09-07  308  	struct damon_region *r, *next;
966a1baa2355c1 Xin Hao          2021-10-28  309  	unsigned int i;
3f49584b262cf8 SeongJae Park    2021-09-07  310  
3f49584b262cf8 SeongJae Park    2021-09-07  311  	/* Remove regions which are not in the three big regions now */
3f49584b262cf8 SeongJae Park    2021-09-07  312  	damon_for_each_region_safe(r, next, t) {
3f49584b262cf8 SeongJae Park    2021-09-07  313  		for (i = 0; i < 3; i++) {
3f49584b262cf8 SeongJae Park    2021-09-07  314  			if (damon_intersect(r, &bregions[i]))
3f49584b262cf8 SeongJae Park    2021-09-07  315  				break;
3f49584b262cf8 SeongJae Park    2021-09-07  316  		}
3f49584b262cf8 SeongJae Park    2021-09-07  317  		if (i == 3)
3f49584b262cf8 SeongJae Park    2021-09-07  318  			damon_destroy_region(r, t);
3f49584b262cf8 SeongJae Park    2021-09-07  319  	}
3f49584b262cf8 SeongJae Park    2021-09-07  320  
3f49584b262cf8 SeongJae Park    2021-09-07  321  	/* Adjust intersecting regions to fit with the three big regions */
3f49584b262cf8 SeongJae Park    2021-09-07  322  	for (i = 0; i < 3; i++) {
3f49584b262cf8 SeongJae Park    2021-09-07  323  		struct damon_region *first = NULL, *last;
3f49584b262cf8 SeongJae Park    2021-09-07  324  		struct damon_region *newr;
3f49584b262cf8 SeongJae Park    2021-09-07  325  		struct damon_addr_range *br;
3f49584b262cf8 SeongJae Park    2021-09-07  326  
3f49584b262cf8 SeongJae Park    2021-09-07  327  		br = &bregions[i];
3f49584b262cf8 SeongJae Park    2021-09-07  328  		/* Get the first and last regions which intersects with br */
3f49584b262cf8 SeongJae Park    2021-09-07  329  		damon_for_each_region(r, t) {
3f49584b262cf8 SeongJae Park    2021-09-07  330  			if (damon_intersect(r, br)) {
3f49584b262cf8 SeongJae Park    2021-09-07  331  				if (!first)
3f49584b262cf8 SeongJae Park    2021-09-07  332  					first = r;
3f49584b262cf8 SeongJae Park    2021-09-07  333  				last = r;
3f49584b262cf8 SeongJae Park    2021-09-07  334  			}
3f49584b262cf8 SeongJae Park    2021-09-07  335  			if (r->ar.start >= br->end)
3f49584b262cf8 SeongJae Park    2021-09-07  336  				break;
3f49584b262cf8 SeongJae Park    2021-09-07  337  		}
3f49584b262cf8 SeongJae Park    2021-09-07  338  		if (!first) {
3f49584b262cf8 SeongJae Park    2021-09-07  339  			/* no damon_region intersects with this big region */
3f49584b262cf8 SeongJae Park    2021-09-07  340  			newr = damon_new_region(
3f49584b262cf8 SeongJae Park    2021-09-07  341  					ALIGN_DOWN(br->start,
3f49584b262cf8 SeongJae Park    2021-09-07  342  						DAMON_MIN_REGION),
3f49584b262cf8 SeongJae Park    2021-09-07  343  					ALIGN(br->end, DAMON_MIN_REGION));
3f49584b262cf8 SeongJae Park    2021-09-07  344  			if (!newr)
3f49584b262cf8 SeongJae Park    2021-09-07  345  				continue;
3f49584b262cf8 SeongJae Park    2021-09-07  346  			damon_insert_region(newr, damon_prev_region(r), r, t);
3f49584b262cf8 SeongJae Park    2021-09-07  347  		} else {
3f49584b262cf8 SeongJae Park    2021-09-07  348  			first->ar.start = ALIGN_DOWN(br->start,
3f49584b262cf8 SeongJae Park    2021-09-07  349  					DAMON_MIN_REGION);
3f49584b262cf8 SeongJae Park    2021-09-07  350  			last->ar.end = ALIGN(br->end, DAMON_MIN_REGION);
3f49584b262cf8 SeongJae Park    2021-09-07  351  		}
3f49584b262cf8 SeongJae Park    2021-09-07  352  	}
3f49584b262cf8 SeongJae Park    2021-09-07  353  }
3f49584b262cf8 SeongJae Park    2021-09-07  354  
3f49584b262cf8 SeongJae Park    2021-09-07  355  /*
3f49584b262cf8 SeongJae Park    2021-09-07  356   * Update regions for current memory mappings
3f49584b262cf8 SeongJae Park    2021-09-07  357   */
3f49584b262cf8 SeongJae Park    2021-09-07 @358  void damon_va_update(struct damon_ctx *ctx)
3f49584b262cf8 SeongJae Park    2021-09-07  359  {
3f49584b262cf8 SeongJae Park    2021-09-07  360  	struct damon_addr_range three_regions[3];
3f49584b262cf8 SeongJae Park    2021-09-07  361  	struct damon_target *t;
3f49584b262cf8 SeongJae Park    2021-09-07  362  
3f49584b262cf8 SeongJae Park    2021-09-07  363  	damon_for_each_target(t, ctx) {
3f49584b262cf8 SeongJae Park    2021-09-07  364  		if (damon_va_three_regions(t, three_regions))
3f49584b262cf8 SeongJae Park    2021-09-07  365  			continue;
3f49584b262cf8 SeongJae Park    2021-09-07  366  		damon_va_apply_three_regions(t, three_regions);
3f49584b262cf8 SeongJae Park    2021-09-07  367  	}
3f49584b262cf8 SeongJae Park    2021-09-07  368  }
3f49584b262cf8 SeongJae Park    2021-09-07  369  
3f49584b262cf8 SeongJae Park    2021-09-07  370  static int damon_mkold_pmd_entry(pmd_t *pmd, unsigned long addr,
3f49584b262cf8 SeongJae Park    2021-09-07  371  		unsigned long next, struct mm_walk *walk)
3f49584b262cf8 SeongJae Park    2021-09-07  372  {
3f49584b262cf8 SeongJae Park    2021-09-07  373  	pte_t *pte;
3f49584b262cf8 SeongJae Park    2021-09-07  374  	spinlock_t *ptl;
3f49584b262cf8 SeongJae Park    2021-09-07  375  
3f49584b262cf8 SeongJae Park    2021-09-07  376  	if (pmd_huge(*pmd)) {
3f49584b262cf8 SeongJae Park    2021-09-07  377  		ptl = pmd_lock(walk->mm, pmd);
3f49584b262cf8 SeongJae Park    2021-09-07  378  		if (pmd_huge(*pmd)) {
3f49584b262cf8 SeongJae Park    2021-09-07  379  			damon_pmdp_mkold(pmd, walk->mm, addr);
3f49584b262cf8 SeongJae Park    2021-09-07  380  			spin_unlock(ptl);
3f49584b262cf8 SeongJae Park    2021-09-07  381  			return 0;
3f49584b262cf8 SeongJae Park    2021-09-07  382  		}
3f49584b262cf8 SeongJae Park    2021-09-07  383  		spin_unlock(ptl);
3f49584b262cf8 SeongJae Park    2021-09-07  384  	}
3f49584b262cf8 SeongJae Park    2021-09-07  385  
3f49584b262cf8 SeongJae Park    2021-09-07  386  	if (pmd_none(*pmd) || unlikely(pmd_bad(*pmd)))
3f49584b262cf8 SeongJae Park    2021-09-07  387  		return 0;
3f49584b262cf8 SeongJae Park    2021-09-07  388  	pte = pte_offset_map_lock(walk->mm, pmd, addr, &ptl);
3f49584b262cf8 SeongJae Park    2021-09-07  389  	if (!pte_present(*pte))
3f49584b262cf8 SeongJae Park    2021-09-07  390  		goto out;
3f49584b262cf8 SeongJae Park    2021-09-07  391  	damon_ptep_mkold(pte, walk->mm, addr);
3f49584b262cf8 SeongJae Park    2021-09-07  392  out:
3f49584b262cf8 SeongJae Park    2021-09-07  393  	pte_unmap_unlock(pte, ptl);
3f49584b262cf8 SeongJae Park    2021-09-07  394  	return 0;
3f49584b262cf8 SeongJae Park    2021-09-07  395  }
3f49584b262cf8 SeongJae Park    2021-09-07  396  
aafaf6b3b9b77a Rikard Falkeborn 2021-10-28  397  static const struct mm_walk_ops damon_mkold_ops = {
3f49584b262cf8 SeongJae Park    2021-09-07  398  	.pmd_entry = damon_mkold_pmd_entry,
3f49584b262cf8 SeongJae Park    2021-09-07  399  };
3f49584b262cf8 SeongJae Park    2021-09-07  400  
3f49584b262cf8 SeongJae Park    2021-09-07  401  static void damon_va_mkold(struct mm_struct *mm, unsigned long addr)
3f49584b262cf8 SeongJae Park    2021-09-07  402  {
3f49584b262cf8 SeongJae Park    2021-09-07  403  	mmap_read_lock(mm);
3f49584b262cf8 SeongJae Park    2021-09-07  404  	walk_page_range(mm, addr, addr + 1, &damon_mkold_ops, NULL);
3f49584b262cf8 SeongJae Park    2021-09-07  405  	mmap_read_unlock(mm);
3f49584b262cf8 SeongJae Park    2021-09-07  406  }
3f49584b262cf8 SeongJae Park    2021-09-07  407  
3f49584b262cf8 SeongJae Park    2021-09-07  408  /*
3f49584b262cf8 SeongJae Park    2021-09-07  409   * Functions for the access checking of the regions
3f49584b262cf8 SeongJae Park    2021-09-07  410   */
3f49584b262cf8 SeongJae Park    2021-09-07  411  
a7c7432ffce91f Xin Hao          2021-11-13  412  static void __damon_va_prepare_access_check(struct damon_ctx *ctx,
3f49584b262cf8 SeongJae Park    2021-09-07  413  			struct mm_struct *mm, struct damon_region *r)
3f49584b262cf8 SeongJae Park    2021-09-07  414  {
3f49584b262cf8 SeongJae Park    2021-09-07  415  	r->sampling_addr = damon_rand(r->ar.start, r->ar.end);
3f49584b262cf8 SeongJae Park    2021-09-07  416  
3f49584b262cf8 SeongJae Park    2021-09-07  417  	damon_va_mkold(mm, r->sampling_addr);
3f49584b262cf8 SeongJae Park    2021-09-07  418  }
3f49584b262cf8 SeongJae Park    2021-09-07  419  
3f49584b262cf8 SeongJae Park    2021-09-07 @420  void damon_va_prepare_access_checks(struct damon_ctx *ctx)
3f49584b262cf8 SeongJae Park    2021-09-07  421  {
3f49584b262cf8 SeongJae Park    2021-09-07  422  	struct damon_target *t;
3f49584b262cf8 SeongJae Park    2021-09-07  423  	struct mm_struct *mm;
3f49584b262cf8 SeongJae Park    2021-09-07  424  	struct damon_region *r;
3f49584b262cf8 SeongJae Park    2021-09-07  425  
3f49584b262cf8 SeongJae Park    2021-09-07  426  	damon_for_each_target(t, ctx) {
3f49584b262cf8 SeongJae Park    2021-09-07  427  		mm = damon_get_mm(t);
3f49584b262cf8 SeongJae Park    2021-09-07  428  		if (!mm)
3f49584b262cf8 SeongJae Park    2021-09-07  429  			continue;
3f49584b262cf8 SeongJae Park    2021-09-07  430  		damon_for_each_region(r, t)
a7c7432ffce91f Xin Hao          2021-11-13  431  			__damon_va_prepare_access_check(ctx, mm, r);
3f49584b262cf8 SeongJae Park    2021-09-07  432  		mmput(mm);
3f49584b262cf8 SeongJae Park    2021-09-07  433  	}
3f49584b262cf8 SeongJae Park    2021-09-07  434  }
3f49584b262cf8 SeongJae Park    2021-09-07  435  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux