mm/migrate.c:1406:5: warning: stack frame size of 2096 bytes in function 'migrate_pages'

From: kernel test robot
Date: Sun May 30 2021 - 05:52:00 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: b90e90f40b4ff23c753126008bf4713a42353af6
commit: dd4ae78a21fc05d91d841e499dddd057ad64a4df mm: migrate: simplify the logic for handling permanent failure
date: 6 months ago
config: powerpc-randconfig-r034-20210530 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project bc6799f2f79f0ae87e9f1ebf9d25ba799fbd25a9)
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
# install powerpc cross compiling tool for clang build
# apt-get install binutils-powerpc-linux-gnu
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dd4ae78a21fc05d91d841e499dddd057ad64a4df
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout dd4ae78a21fc05d91d841e499dddd057ad64a4df
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc

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

All warnings (new ones prefixed by >>):

In file included from mm/migrate.c:16:
In file included from include/linux/migrate.h:5:
In file included from include/linux/mm.h:9:
In file included from include/linux/mmdebug.h:5:
In file included from include/linux/bug.h:5:
In file included from arch/powerpc/include/asm/bug.h:109:
In file included from include/asm-generic/bug.h:20:
In file included from include/linux/kernel.h:12:
In file included from include/linux/bitops.h:29:
In file included from arch/powerpc/include/asm/bitops.h:62:
arch/powerpc/include/asm/barrier.h:49:9: warning: '__lwsync' macro redefined [-Wmacro-redefined]
#define __lwsync() __asm__ __volatile__ (stringify_in_c(LWSYNC) : : :"memory")
^
<built-in>:309:9: note: previous definition is here
#define __lwsync __builtin_ppc_lwsync
^
>> mm/migrate.c:1406:5: warning: stack frame size of 2096 bytes in function 'migrate_pages' [-Wframe-larger-than=]
int migrate_pages(struct list_head *from, new_page_t get_new_page,
^
2 warnings generated.


vim +/migrate_pages +1406 mm/migrate.c

290408d4a25002 Naoya Horiguchi 2010-09-08 1384
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1385 /*
c73e5c9c59a0f7 Srivatsa S. Bhat 2013-04-29 1386 * migrate_pages - migrate the pages specified in a list, to the free pages
c73e5c9c59a0f7 Srivatsa S. Bhat 2013-04-29 1387 * supplied as the target for the page migration
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1388 *
c73e5c9c59a0f7 Srivatsa S. Bhat 2013-04-29 1389 * @from: The list of pages to be migrated.
c73e5c9c59a0f7 Srivatsa S. Bhat 2013-04-29 1390 * @get_new_page: The function used to allocate free pages to be used
c73e5c9c59a0f7 Srivatsa S. Bhat 2013-04-29 1391 * as the target of the page migration.
68711a746345c4 David Rientjes 2014-06-04 1392 * @put_new_page: The function used to free target pages if migration
68711a746345c4 David Rientjes 2014-06-04 1393 * fails, or NULL if no special handling is necessary.
c73e5c9c59a0f7 Srivatsa S. Bhat 2013-04-29 1394 * @private: Private data to be passed on to get_new_page()
c73e5c9c59a0f7 Srivatsa S. Bhat 2013-04-29 1395 * @mode: The migration mode that specifies the constraints for
c73e5c9c59a0f7 Srivatsa S. Bhat 2013-04-29 1396 * page migration, if any.
c73e5c9c59a0f7 Srivatsa S. Bhat 2013-04-29 1397 * @reason: The reason for page migration.
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1398 *
c73e5c9c59a0f7 Srivatsa S. Bhat 2013-04-29 1399 * The function returns after 10 attempts or if no pages are movable any more
c73e5c9c59a0f7 Srivatsa S. Bhat 2013-04-29 1400 * because the list has become empty or no retryable pages exist any more.
dd4ae78a21fc05 Yang Shi 2020-12-14 1401 * It is caller's responsibility to call putback_movable_pages() to return pages
dd4ae78a21fc05 Yang Shi 2020-12-14 1402 * to the LRU or free list only if ret != 0.
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1403 *
c73e5c9c59a0f7 Srivatsa S. Bhat 2013-04-29 1404 * Returns the number of pages that were not migrated, or an error code.
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1405 */
9c620e2bc5aa42 Hugh Dickins 2013-02-22 @1406 int migrate_pages(struct list_head *from, new_page_t get_new_page,
68711a746345c4 David Rientjes 2014-06-04 1407 free_page_t put_new_page, unsigned long private,
68711a746345c4 David Rientjes 2014-06-04 1408 enum migrate_mode mode, int reason)
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1409 {
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1410 int retry = 1;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1411 int thp_retry = 1;
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1412 int nr_failed = 0;
5647bc293ab15f Mel Gorman 2012-10-19 1413 int nr_succeeded = 0;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1414 int nr_thp_succeeded = 0;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1415 int nr_thp_failed = 0;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1416 int nr_thp_split = 0;
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1417 int pass = 0;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1418 bool is_thp = false;
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1419 struct page *page;
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1420 struct page *page2;
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1421 int swapwrite = current->flags & PF_SWAPWRITE;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1422 int rc, nr_subpages;
dd4ae78a21fc05 Yang Shi 2020-12-14 1423 LIST_HEAD(ret_pages);
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1424
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1425 if (!swapwrite)
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1426 current->flags |= PF_SWAPWRITE;
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1427
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1428 for (pass = 0; pass < 10 && (retry || thp_retry); pass++) {
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1429 retry = 0;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1430 thp_retry = 0;
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1431
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1432 list_for_each_entry_safe(page, page2, from, lru) {
94723aafb9e764 Michal Hocko 2018-04-10 1433 retry:
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1434 /*
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1435 * THP statistics is based on the source huge page.
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1436 * Capture required information that might get lost
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1437 * during migration.
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1438 */
6c5c7b9f335272 Zi Yan 2020-09-25 1439 is_thp = PageTransHuge(page) && !PageHuge(page);
6c357848b44b40 Matthew Wilcox (Oracle 2020-08-14 1440) nr_subpages = thp_nr_pages(page);
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1441 cond_resched();
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1442
31caf665e666b5 Naoya Horiguchi 2013-09-11 1443 if (PageHuge(page))
31caf665e666b5 Naoya Horiguchi 2013-09-11 1444 rc = unmap_and_move_huge_page(get_new_page,
68711a746345c4 David Rientjes 2014-06-04 1445 put_new_page, private, page,
dd4ae78a21fc05 Yang Shi 2020-12-14 1446 pass > 2, mode, reason,
dd4ae78a21fc05 Yang Shi 2020-12-14 1447 &ret_pages);
31caf665e666b5 Naoya Horiguchi 2013-09-11 1448 else
68711a746345c4 David Rientjes 2014-06-04 1449 rc = unmap_and_move(get_new_page, put_new_page,
add05cecef803f Naoya Horiguchi 2015-06-24 1450 private, page, pass > 2, mode,
dd4ae78a21fc05 Yang Shi 2020-12-14 1451 reason, &ret_pages);
dd4ae78a21fc05 Yang Shi 2020-12-14 1452 /*
dd4ae78a21fc05 Yang Shi 2020-12-14 1453 * The rules are:
dd4ae78a21fc05 Yang Shi 2020-12-14 1454 * Success: non hugetlb page will be freed, hugetlb
dd4ae78a21fc05 Yang Shi 2020-12-14 1455 * page will be put back
dd4ae78a21fc05 Yang Shi 2020-12-14 1456 * -EAGAIN: stay on the from list
dd4ae78a21fc05 Yang Shi 2020-12-14 1457 * -ENOMEM: stay on the from list
dd4ae78a21fc05 Yang Shi 2020-12-14 1458 * Other errno: put on ret_pages list then splice to
dd4ae78a21fc05 Yang Shi 2020-12-14 1459 * from list
dd4ae78a21fc05 Yang Shi 2020-12-14 1460 */
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1461 switch(rc) {
95a402c3847cc1 Christoph Lameter 2006-06-23 1462 case -ENOMEM:
94723aafb9e764 Michal Hocko 2018-04-10 1463 /*
94723aafb9e764 Michal Hocko 2018-04-10 1464 * THP migration might be unsupported or the
94723aafb9e764 Michal Hocko 2018-04-10 1465 * allocation could've failed so we should
94723aafb9e764 Michal Hocko 2018-04-10 1466 * retry on the same page with the THP split
94723aafb9e764 Michal Hocko 2018-04-10 1467 * to base pages.
94723aafb9e764 Michal Hocko 2018-04-10 1468 *
94723aafb9e764 Michal Hocko 2018-04-10 1469 * Head page is retried immediately and tail
94723aafb9e764 Michal Hocko 2018-04-10 1470 * pages are added to the tail of the list so
94723aafb9e764 Michal Hocko 2018-04-10 1471 * we encounter them after the rest of the list
94723aafb9e764 Michal Hocko 2018-04-10 1472 * is processed.
94723aafb9e764 Michal Hocko 2018-04-10 1473 */
6c5c7b9f335272 Zi Yan 2020-09-25 1474 if (is_thp) {
94723aafb9e764 Michal Hocko 2018-04-10 1475 lock_page(page);
94723aafb9e764 Michal Hocko 2018-04-10 1476 rc = split_huge_page_to_list(page, from);
94723aafb9e764 Michal Hocko 2018-04-10 1477 unlock_page(page);
94723aafb9e764 Michal Hocko 2018-04-10 1478 if (!rc) {
94723aafb9e764 Michal Hocko 2018-04-10 1479 list_safe_reset_next(page, page2, lru);
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1480 nr_thp_split++;
94723aafb9e764 Michal Hocko 2018-04-10 1481 goto retry;
94723aafb9e764 Michal Hocko 2018-04-10 1482 }
6c5c7b9f335272 Zi Yan 2020-09-25 1483
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1484 nr_thp_failed++;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1485 nr_failed += nr_subpages;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1486 goto out;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1487 }
dfef2ef4027b13 David Rientjes 2016-05-20 1488 nr_failed++;
95a402c3847cc1 Christoph Lameter 2006-06-23 1489 goto out;
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1490 case -EAGAIN:
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1491 if (is_thp) {
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1492 thp_retry++;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1493 break;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1494 }
b20a35035f983f Christoph Lameter 2006-03-22 1495 retry++;
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1496 break;
78bd52097d0420 Rafael Aquini 2012-12-11 1497 case MIGRATEPAGE_SUCCESS:
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1498 if (is_thp) {
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1499 nr_thp_succeeded++;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1500 nr_succeeded += nr_subpages;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1501 break;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1502 }
5647bc293ab15f Mel Gorman 2012-10-19 1503 nr_succeeded++;
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1504 break;
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1505 default:
354a3363363724 Naoya Horiguchi 2014-01-21 1506 /*
354a3363363724 Naoya Horiguchi 2014-01-21 1507 * Permanent failure (-EBUSY, -ENOSYS, etc.):
354a3363363724 Naoya Horiguchi 2014-01-21 1508 * unlike -EAGAIN case, the failed page is
354a3363363724 Naoya Horiguchi 2014-01-21 1509 * removed from migration page list and not
354a3363363724 Naoya Horiguchi 2014-01-21 1510 * retried in the next outer loop.
354a3363363724 Naoya Horiguchi 2014-01-21 1511 */
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1512 if (is_thp) {
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1513 nr_thp_failed++;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1514 nr_failed += nr_subpages;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1515 break;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1516 }
b20a35035f983f Christoph Lameter 2006-03-22 1517 nr_failed++;
e24f0b8f76cc3d Christoph Lameter 2006-06-23 1518 break;
2d1db3b1170db4 Christoph Lameter 2006-06-23 1519 }
b20a35035f983f Christoph Lameter 2006-03-22 1520 }
b20a35035f983f Christoph Lameter 2006-03-22 1521 }
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1522 nr_failed += retry + thp_retry;
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1523 nr_thp_failed += thp_retry;
f2f81fb2b72b83 Vlastimil Babka 2015-11-05 1524 rc = nr_failed;
95a402c3847cc1 Christoph Lameter 2006-06-23 1525 out:
dd4ae78a21fc05 Yang Shi 2020-12-14 1526 /*
dd4ae78a21fc05 Yang Shi 2020-12-14 1527 * Put the permanent failure page back to migration list, they
dd4ae78a21fc05 Yang Shi 2020-12-14 1528 * will be put back to the right list by the caller.
dd4ae78a21fc05 Yang Shi 2020-12-14 1529 */
dd4ae78a21fc05 Yang Shi 2020-12-14 1530 list_splice(&ret_pages, from);
dd4ae78a21fc05 Yang Shi 2020-12-14 1531
5647bc293ab15f Mel Gorman 2012-10-19 1532 count_vm_events(PGMIGRATE_SUCCESS, nr_succeeded);
5647bc293ab15f Mel Gorman 2012-10-19 1533 count_vm_events(PGMIGRATE_FAIL, nr_failed);
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1534 count_vm_events(THP_MIGRATION_SUCCESS, nr_thp_succeeded);
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1535 count_vm_events(THP_MIGRATION_FAIL, nr_thp_failed);
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1536 count_vm_events(THP_MIGRATION_SPLIT, nr_thp_split);
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1537 trace_mm_migrate_pages(nr_succeeded, nr_failed, nr_thp_succeeded,
1a5bae25e3cf95 Anshuman Khandual 2020-08-11 1538 nr_thp_failed, nr_thp_split, mode, reason);
7b2a2d4a18fffa Mel Gorman 2012-10-19 1539
b20a35035f983f Christoph Lameter 2006-03-22 1540 if (!swapwrite)
b20a35035f983f Christoph Lameter 2006-03-22 1541 current->flags &= ~PF_SWAPWRITE;
b20a35035f983f Christoph Lameter 2006-03-22 1542
95a402c3847cc1 Christoph Lameter 2006-06-23 1543 return rc;
b20a35035f983f Christoph Lameter 2006-03-22 1544 }
b20a35035f983f Christoph Lameter 2006-03-22 1545

:::::: The code at line 1406 was first introduced by commit
:::::: 9c620e2bc5aa4256c102ada34e6c76204ed5898b mm: remove offlining arg to migrate_pages

:::::: TO: Hugh Dickins <hughd@xxxxxxxxxx>
:::::: CC: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>

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

Attachment: .config.gz
Description: application/gzip