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
next prev 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.