public inbox for llvm@lists.linux.dev
 help / color / mirror / Atom feed
* Re: [PATCH v5 3/6] mm: make alloc_contig_range work at pageblock granularity
       [not found] <20220211164135.1803616-4-zi.yan@sent.com>
@ 2022-02-11 23:06 ` kernel test robot
  2022-02-11 23:17 ` kernel test robot
  1 sibling, 0 replies; 2+ messages in thread
From: kernel test robot @ 2022-02-11 23:06 UTC (permalink / raw)
  To: Zi Yan; +Cc: llvm, kbuild-all

Hi Zi,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on hnaz-mm/master]
[also build test WARNING on powerpc/next linux/master linus/master v5.17-rc3 next-20220211]
[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]

url:    https://github.com/0day-ci/linux/commits/Zi-Yan/Use-pageblock_order-for-cma-and-alloc_contig_range-alignment/20220212-004358
base:   https://github.com/hnaz/linux-mm master
config: hexagon-randconfig-r045-20220211 (https://download.01.org/0day-ci/archive/20220212/202202120607.4dI5nqMH-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project f6685f774697c85d6a352dcea013f46a99f9fe31)
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/5aacb9dfc8abb1a0610b70226606408a96d0e997
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Zi-Yan/Use-pageblock_order-for-cma-and-alloc_contig_range-alignment/20220212-004358
        git checkout 5aacb9dfc8abb1a0610b70226606408a96d0e997
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash

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/page_alloc.c:3869:15: warning: no previous prototype for function 'should_fail_alloc_page' [-Wmissing-prototypes]
   noinline bool should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
                 ^
   mm/page_alloc.c:3869:10: note: declare 'static' if the function is not intended to be used outside of this translation unit
   noinline bool should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
            ^
            static 
>> mm/page_alloc.c:8988:5: warning: no previous prototype for function '__alloc_contig_migrate_range' [-Wmissing-prototypes]
   int __alloc_contig_migrate_range(struct compact_control *cc,
       ^
   mm/page_alloc.c:8988:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   int __alloc_contig_migrate_range(struct compact_control *cc,
   ^
   static 
   2 warnings generated.

Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for OMAP_GPMC
   Depends on MEMORY && OF_ADDRESS
   Selected by
   - MTD_NAND_OMAP2 && MTD && MTD_RAW_NAND && (ARCH_OMAP2PLUS || ARCH_KEYSTONE || ARCH_K3 || COMPILE_TEST && HAS_IOMEM


vim +/__alloc_contig_migrate_range +8988 mm/page_alloc.c

  8986	
  8987	/* [start, end) must belong to a single zone. */
> 8988	int __alloc_contig_migrate_range(struct compact_control *cc,
  8989						unsigned long start, unsigned long end)
  8990	{
  8991		/* This function is based on compact_zone() from compaction.c. */
  8992		unsigned int nr_reclaimed;
  8993		unsigned long pfn = start;
  8994		unsigned int tries = 0;
  8995		int ret = 0;
  8996		struct migration_target_control mtc = {
  8997			.nid = zone_to_nid(cc->zone),
  8998			.gfp_mask = GFP_USER | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL,
  8999		};
  9000	
  9001		lru_cache_disable();
  9002	
  9003		while (pfn < end || !list_empty(&cc->migratepages)) {
  9004			if (fatal_signal_pending(current)) {
  9005				ret = -EINTR;
  9006				break;
  9007			}
  9008	
  9009			if (list_empty(&cc->migratepages)) {
  9010				cc->nr_migratepages = 0;
  9011				ret = isolate_migratepages_range(cc, pfn, end);
  9012				if (ret && ret != -EAGAIN)
  9013					break;
  9014				pfn = cc->migrate_pfn;
  9015				tries = 0;
  9016			} else if (++tries == 5) {
  9017				ret = -EBUSY;
  9018				break;
  9019			}
  9020	
  9021			nr_reclaimed = reclaim_clean_pages_from_list(cc->zone,
  9022								&cc->migratepages);
  9023			cc->nr_migratepages -= nr_reclaimed;
  9024	
  9025			ret = migrate_pages(&cc->migratepages, alloc_migration_target,
  9026				NULL, (unsigned long)&mtc, cc->mode, MR_CONTIG_RANGE, NULL);
  9027	
  9028			/*
  9029			 * On -ENOMEM, migrate_pages() bails out right away. It is pointless
  9030			 * to retry again over this error, so do the same here.
  9031			 */
  9032			if (ret == -ENOMEM)
  9033				break;
  9034		}
  9035	
  9036		lru_cache_enable();
  9037		if (ret < 0) {
  9038			if (ret == -EBUSY)
  9039				alloc_contig_dump_pages(&cc->migratepages);
  9040			putback_movable_pages(&cc->migratepages);
  9041			return ret;
  9042		}
  9043		return 0;
  9044	}
  9045	

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

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH v5 3/6] mm: make alloc_contig_range work at pageblock granularity
       [not found] <20220211164135.1803616-4-zi.yan@sent.com>
  2022-02-11 23:06 ` [PATCH v5 3/6] mm: make alloc_contig_range work at pageblock granularity kernel test robot
@ 2022-02-11 23:17 ` kernel test robot
  1 sibling, 0 replies; 2+ messages in thread
From: kernel test robot @ 2022-02-11 23:17 UTC (permalink / raw)
  To: Zi Yan; +Cc: llvm, kbuild-all

Hi Zi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on hnaz-mm/master]
[also build test ERROR on powerpc/next linux/master linus/master v5.17-rc3 next-20220211]
[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]

url:    https://github.com/0day-ci/linux/commits/Zi-Yan/Use-pageblock_order-for-cma-and-alloc_contig_range-alignment/20220212-004358
base:   https://github.com/hnaz/linux-mm master
config: x86_64-randconfig-a012 (https://download.01.org/0day-ci/archive/20220212/202202120720.MfxEFq7T-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project f6685f774697c85d6a352dcea013f46a99f9fe31)
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/5aacb9dfc8abb1a0610b70226606408a96d0e997
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Zi-Yan/Use-pageblock_order-for-cma-and-alloc_contig_range-alignment/20220212-004358
        git checkout 5aacb9dfc8abb1a0610b70226606408a96d0e997
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash

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

All errors (new ones prefixed by >>):

>> mm/page_isolation.c:332:8: error: implicit declaration of function 'isolate_single_pageblock' [-Werror,-Wimplicit-function-declaration]
           ret = isolate_single_pageblock(isolate_start, gfp_flags, 0);
                 ^
   1 error generated.


vim +/isolate_single_pageblock +332 mm/page_isolation.c

   274	
   275	/**
   276	 * start_isolate_page_range() - make page-allocation-type of range of pages to
   277	 * be MIGRATE_ISOLATE.
   278	 * @start_pfn:		The lower PFN of the range to be isolated.
   279	 * @end_pfn:		The upper PFN of the range to be isolated.
   280	 * @migratetype:	Migrate type to set in error recovery.
   281	 * @flags:		The following flags are allowed (they can be combined in
   282	 *			a bit mask)
   283	 *			MEMORY_OFFLINE - isolate to offline (!allocate) memory
   284	 *					 e.g., skip over PageHWPoison() pages
   285	 *					 and PageOffline() pages.
   286	 *			REPORT_FAILURE - report details about the failure to
   287	 *			isolate the range
   288	 * @gfp_flags:		GFP flags used for migrating pages that sit across the
   289	 *			range boundaries.
   290	 *
   291	 * Making page-allocation-type to be MIGRATE_ISOLATE means free pages in
   292	 * the range will never be allocated. Any free pages and pages freed in the
   293	 * future will not be allocated again. If specified range includes migrate types
   294	 * other than MOVABLE or CMA, this will fail with -EBUSY. For isolating all
   295	 * pages in the range finally, the caller have to free all pages in the range.
   296	 * test_page_isolated() can be used for test it.
   297	 *
   298	 * The function first tries to isolate the pageblocks at the beginning and end
   299	 * of the range, since there might be pages across the range boundaries.
   300	 * Afterwards, it isolates the rest of the range.
   301	 *
   302	 * There is no high level synchronization mechanism that prevents two threads
   303	 * from trying to isolate overlapping ranges. If this happens, one thread
   304	 * will notice pageblocks in the overlapping range already set to isolate.
   305	 * This happens in set_migratetype_isolate, and set_migratetype_isolate
   306	 * returns an error. We then clean up by restoring the migration type on
   307	 * pageblocks we may have modified and return -EBUSY to caller. This
   308	 * prevents two threads from simultaneously working on overlapping ranges.
   309	 *
   310	 * Please note that there is no strong synchronization with the page allocator
   311	 * either. Pages might be freed while their page blocks are marked ISOLATED.
   312	 * A call to drain_all_pages() after isolation can flush most of them. However
   313	 * in some cases pages might still end up on pcp lists and that would allow
   314	 * for their allocation even when they are in fact isolated already. Depending
   315	 * on how strong of a guarantee the caller needs, zone_pcp_disable/enable()
   316	 * might be used to flush and disable pcplist before isolation and enable after
   317	 * unisolation.
   318	 *
   319	 * Return: 0 on success and -EBUSY if any part of range cannot be isolated.
   320	 */
   321	int start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn,
   322				     unsigned migratetype, int flags, gfp_t gfp_flags)
   323	{
   324		unsigned long pfn;
   325		struct page *page;
   326		/* isolation is done at page block granularity */
   327		unsigned long isolate_start = ALIGN_DOWN(start_pfn, pageblock_nr_pages);
   328		unsigned long isolate_end = ALIGN(end_pfn, pageblock_nr_pages);
   329		int ret;
   330	
   331		/* isolate [isolate_start, isolate_start + pageblock_nr_pages] pageblock */
 > 332		ret = isolate_single_pageblock(isolate_start, gfp_flags, 0);
   333		if (ret)
   334			return ret;
   335	
   336		/* isolate [isolate_end - pageblock_nr_pages, isolate_end] pageblock */
   337		ret = isolate_single_pageblock(isolate_end, gfp_flags, 1);
   338		if (ret) {
   339			unset_migratetype_isolate(pfn_to_page(isolate_start), migratetype);
   340			return ret;
   341		}
   342	
   343		/* skip isolated pageblocks at the beginning and end */
   344		for (pfn = isolate_start + pageblock_nr_pages;
   345		     pfn < isolate_end - pageblock_nr_pages;
   346		     pfn += pageblock_nr_pages) {
   347			page = __first_valid_page(pfn, pageblock_nr_pages);
   348			if (page && set_migratetype_isolate(page, migratetype, flags,
   349						start_pfn, end_pfn)) {
   350				undo_isolate_page_range(isolate_start, pfn, migratetype);
   351				unset_migratetype_isolate(
   352					pfn_to_page(isolate_end - pageblock_nr_pages),
   353					migratetype);
   354				return -EBUSY;
   355			}
   356		}
   357		return 0;
   358	}
   359	

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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-02-11 23:17 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20220211164135.1803616-4-zi.yan@sent.com>
2022-02-11 23:06 ` [PATCH v5 3/6] mm: make alloc_contig_range work at pageblock granularity kernel test robot
2022-02-11 23:17 ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox