All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Zi Yan <zi.yan@sent.com>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org
Subject: Re: [PATCH v5 3/6] mm: make alloc_contig_range work at pageblock granularity
Date: Sat, 12 Feb 2022 07:17:03 +0800	[thread overview]
Message-ID: <202202120720.MfxEFq7T-lkp@intel.com> (raw)
In-Reply-To: <20220211164135.1803616-4-zi.yan@sent.com>

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

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH v5 3/6] mm: make alloc_contig_range work at pageblock granularity
Date: Sat, 12 Feb 2022 07:17:03 +0800	[thread overview]
Message-ID: <202202120720.MfxEFq7T-lkp@intel.com> (raw)
In-Reply-To: <20220211164135.1803616-4-zi.yan@sent.com>

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

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(a)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

  parent reply	other threads:[~2022-02-11 23:17 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-11 16:41 [PATCH v5 0/6] Use pageblock_order for cma and alloc_contig_range alignment Zi Yan
2022-02-11 16:41 ` Zi Yan
2022-02-11 16:41 ` Zi Yan
2022-02-11 16:41 ` [PATCH v5 1/6] mm: page_isolation: move has_unmovable_pages() to mm/page_isolation.c Zi Yan
2022-02-11 16:41   ` Zi Yan
2022-02-11 16:41   ` Zi Yan
2022-02-14 10:44   ` Mike Rapoport
2022-02-14 10:44     ` Mike Rapoport
2022-02-14 10:44     ` Mike Rapoport
2022-02-11 16:41 ` [PATCH v5 2/6] mm: page_isolation: check specified range for unmovable pages Zi Yan
2022-02-11 16:41   ` Zi Yan
2022-02-11 16:41   ` Zi Yan
2022-02-11 16:41 ` [PATCH v5 3/6] mm: make alloc_contig_range work at pageblock granularity Zi Yan
2022-02-11 16:41   ` Zi Yan
2022-02-11 16:41   ` Zi Yan
2022-02-11 23:06   ` kernel test robot
2022-02-11 23:06     ` kernel test robot
2022-02-11 23:06   ` kernel test robot
2022-02-11 23:17   ` kernel test robot [this message]
2022-02-11 23:17     ` kernel test robot
2022-02-14  7:26   ` Christoph Hellwig
2022-02-14  7:26     ` Christoph Hellwig
2022-02-14  7:26     ` Christoph Hellwig
2022-02-14  7:26     ` Christoph Hellwig
2022-02-14 15:46     ` Zi Yan via iommu
2022-02-14 15:46       ` Zi Yan
2022-02-14 15:46       ` Zi Yan
2022-02-14  7:59   ` Christophe Leroy
2022-02-14  7:59     ` Christophe Leroy
2022-02-14  7:59     ` Christophe Leroy
2022-02-14 16:03     ` Zi Yan via iommu
2022-02-14 16:03       ` Zi Yan
2022-02-14 16:03       ` Zi Yan
2022-02-11 16:41 ` [PATCH v5 4/6] mm: cma: use pageblock_order as the single alignment Zi Yan
2022-02-11 16:41   ` Zi Yan
2022-02-11 16:41   ` Zi Yan
2022-02-11 16:41 ` [PATCH v5 5/6] drivers: virtio_mem: use pageblock size as the minimum virtio_mem size Zi Yan
2022-02-11 16:41   ` Zi Yan
2022-02-11 16:41   ` Zi Yan
2022-02-11 16:41 ` [PATCH v5 6/6] arch: powerpc: adjust fadump alignment to be pageblock aligned Zi Yan
2022-02-11 16:41   ` Zi Yan
2022-02-11 16:41   ` Zi Yan

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=202202120720.MfxEFq7T-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    --cc=llvm@lists.linux.dev \
    --cc=zi.yan@sent.com \
    /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.