All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH V3 4/4] mm/damon: Remove some no need func definitions in damon.h file
Date: Mon, 15 Nov 2021 22:52:46 +0800	[thread overview]
Message-ID: <202111152235.BacumBvt-lkp@intel.com> (raw)
In-Reply-To: <d66fa6d5d19d9a4e7ff814c729f96b9c2d443f40.1636732449.git.xhao@linux.alibaba.com>

[-- Attachment #1: Type: text/plain, Size: 14623 bytes --]

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: nios2-randconfig-r021-20211115 (attached as .config)
compiler: nios2-linux-gcc (GCC) 11.2.0
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=gcc-11.2.0 make.cross ARCH=nios2 

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

All warnings (new ones prefixed by >>):

>> mm/damon/vaddr.c:274:6: warning: no previous prototype for 'damon_va_init' [-Wmissing-prototypes]
     274 | void damon_va_init(struct damon_ctx *ctx)
         |      ^~~~~~~~~~~~~
>> mm/damon/vaddr.c:358:6: warning: no previous prototype for 'damon_va_update' [-Wmissing-prototypes]
     358 | void damon_va_update(struct damon_ctx *ctx)
         |      ^~~~~~~~~~~~~~~
>> mm/damon/vaddr.c:420:6: warning: no previous prototype for 'damon_va_prepare_access_checks' [-Wmissing-prototypes]
     420 | void damon_va_prepare_access_checks(struct damon_ctx *ctx)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> mm/damon/vaddr.c:541:14: warning: no previous prototype for 'damon_va_check_accesses' [-Wmissing-prototypes]
     541 | unsigned int damon_va_check_accesses(struct damon_ctx *ctx)
         |              ^~~~~~~~~~~~~~~~~~~~~~~
>> mm/damon/vaddr.c:605:5: warning: no previous prototype for 'damon_va_apply_scheme' [-Wmissing-prototypes]
     605 | int damon_va_apply_scheme(struct damon_ctx *ctx, struct damon_target *t,
         |     ^~~~~~~~~~~~~~~~~~~~~
>> mm/damon/vaddr.c:636:5: warning: no previous prototype for 'damon_va_scheme_score' [-Wmissing-prototypes]
     636 | int damon_va_scheme_score(struct damon_ctx *context, struct damon_target *t,
         |     ^~~~~~~~~~~~~~~~~~~~~


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(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 33361 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Xin Hao <xhao@linux.alibaba.com>, sjpark@amazon.de
Cc: kbuild-all@lists.01.org, xhao@linux.alibaba.com,
	akpm@linux-foundation.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH V3 4/4] mm/damon: Remove some no need func definitions in damon.h file
Date: Mon, 15 Nov 2021 22:52:46 +0800	[thread overview]
Message-ID: <202111152235.BacumBvt-lkp@intel.com> (raw)
In-Reply-To: <d66fa6d5d19d9a4e7ff814c729f96b9c2d443f40.1636732449.git.xhao@linux.alibaba.com>

[-- Attachment #1: Type: text/plain, Size: 14406 bytes --]

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: nios2-randconfig-r021-20211115 (attached as .config)
compiler: nios2-linux-gcc (GCC) 11.2.0
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=gcc-11.2.0 make.cross ARCH=nios2 

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

All warnings (new ones prefixed by >>):

>> mm/damon/vaddr.c:274:6: warning: no previous prototype for 'damon_va_init' [-Wmissing-prototypes]
     274 | void damon_va_init(struct damon_ctx *ctx)
         |      ^~~~~~~~~~~~~
>> mm/damon/vaddr.c:358:6: warning: no previous prototype for 'damon_va_update' [-Wmissing-prototypes]
     358 | void damon_va_update(struct damon_ctx *ctx)
         |      ^~~~~~~~~~~~~~~
>> mm/damon/vaddr.c:420:6: warning: no previous prototype for 'damon_va_prepare_access_checks' [-Wmissing-prototypes]
     420 | void damon_va_prepare_access_checks(struct damon_ctx *ctx)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> mm/damon/vaddr.c:541:14: warning: no previous prototype for 'damon_va_check_accesses' [-Wmissing-prototypes]
     541 | unsigned int damon_va_check_accesses(struct damon_ctx *ctx)
         |              ^~~~~~~~~~~~~~~~~~~~~~~
>> mm/damon/vaddr.c:605:5: warning: no previous prototype for 'damon_va_apply_scheme' [-Wmissing-prototypes]
     605 | int damon_va_apply_scheme(struct damon_ctx *ctx, struct damon_target *t,
         |     ^~~~~~~~~~~~~~~~~~~~~
>> mm/damon/vaddr.c:636:5: warning: no previous prototype for 'damon_va_scheme_score' [-Wmissing-prototypes]
     636 | int damon_va_scheme_score(struct damon_ctx *context, struct damon_target *t,
         |     ^~~~~~~~~~~~~~~~~~~~~


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@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 33361 bytes --]

  parent reply	other threads:[~2021-11-15 14:52 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-12 16:02 [PATCH V3 0/4] mm/damon: Do some small changes Xin Hao
2021-11-12 16:02 ` [PATCH V3 1/4] mm/damon: Unified access_check function naming rules Xin Hao
2021-11-12 16:02 ` [PATCH V3 2/4] mm/damon: Add 'age' of region tracepoint support Xin Hao
2021-11-12 16:02 ` [PATCH V3 3/4] mm/damon/core: Using function abs() instead of diff_of() Xin Hao
2021-11-13  2:46   ` Muchun Song
2021-11-12 16:02 ` [PATCH V3 4/4] mm/damon: Remove some no need func definitions in damon.h file Xin Hao
2021-11-15 10:23   ` kernel test robot
2021-11-15 10:23     ` kernel test robot
2021-11-15 14:52   ` kernel test robot [this message]
2021-11-15 14:52     ` kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202111152235.BacumBvt-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.