Hi Alistair, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on linux/master] [also build test WARNING on linus/master v5.16-rc1 next-20211115] [cannot apply to hnaz-mm/master] [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/Alistair-Popple/mm-migrate-c-Rework-migration_entry_wait-to-not-take-a-pageref/20211115-185444 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git debe436e77c72fcee804fb867f275e6d31aa999c config: i386-randconfig-r015-20211115 (attached as .config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project fbe72e41b99dc7994daac300d208a955be3e4a0a) 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/91a437ddc7606450e331059d80babe2d4c1163e0 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Alistair-Popple/mm-migrate-c-Rework-migration_entry_wait-to-not-take-a-pageref/20211115-185444 git checkout 91a437ddc7606450e331059d80babe2d4c1163e0 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=i386 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> All warnings (new ones prefixed by >>): >> mm/filemap.c:1447:6: warning: no previous prototype for function 'migration_entry_wait_on_locked' [-Wmissing-prototypes] void migration_entry_wait_on_locked(struct folio *folio, pte_t *ptep, ^ mm/filemap.c:1447:1: note: declare 'static' if the function is not intended to be used outside of this translation unit void migration_entry_wait_on_locked(struct folio *folio, pte_t *ptep, ^ static 1 warning generated. vim +/migration_entry_wait_on_locked +1447 mm/filemap.c 1428 1429 #ifdef CONFIG_MIGRATION 1430 /** 1431 * migration_entry_wait_on_locked - Wait for a migration entry to be removed 1432 * @page: page referenced by the migration entry. 1433 * @ptep: mapped pte pointer. This function will return with the ptep unmapped. 1434 * @ptl: already locked ptl. This function will drop the lock. 1435 * 1436 * Wait for a migration entry referencing the given page to be removed. This is 1437 * equivalent to put_and_wait_on_page_locked(page, TASK_UNINTERRUPTIBLE) except 1438 * this can be called without taking a reference on the page. Instead this 1439 * should be called while holding the ptl for the migration entry referencing 1440 * the page. 1441 * 1442 * Returns after unmapping and unlocking the pte/ptl with pte_unmap_unlock(). 1443 * 1444 * This follows the same logic as wait_on_page_bit_common() so see the comments 1445 * there. 1446 */ > 1447 void migration_entry_wait_on_locked(struct folio *folio, pte_t *ptep, 1448 spinlock_t *ptl) 1449 { 1450 struct wait_page_queue wait_page; 1451 wait_queue_entry_t *wait = &wait_page.wait; 1452 bool thrashing = false; 1453 bool delayacct = false; 1454 unsigned long pflags; 1455 wait_queue_head_t *q; 1456 1457 q = folio_waitqueue(folio); 1458 if (!folio_test_uptodate(folio) && folio_test_workingset(folio)) { 1459 if (!folio_test_swapbacked(folio)) { 1460 delayacct_thrashing_start(); 1461 delayacct = true; 1462 } 1463 psi_memstall_enter(&pflags); 1464 thrashing = true; 1465 } 1466 1467 init_wait(wait); 1468 wait->func = wake_page_function; 1469 wait_page.folio = folio; 1470 wait_page.bit_nr = PG_locked; 1471 wait->flags = 0; 1472 1473 spin_lock_irq(&q->lock); 1474 folio_set_waiters(folio); 1475 if (!folio_trylock_flag(folio, PG_locked, wait)) 1476 __add_wait_queue_entry_tail(q, wait); 1477 spin_unlock_irq(&q->lock); 1478 1479 /* 1480 * If a migration entry exists for the page the migration path must hold 1481 * a valid reference to the page, and it must take the ptl to remove the 1482 * migration entry. So the page is valid until the ptl is dropped. 1483 */ 1484 if (ptep) 1485 pte_unmap_unlock(ptep, ptl); 1486 else 1487 spin_unlock(ptl); 1488 1489 for (;;) { 1490 unsigned int flags; 1491 1492 set_current_state(TASK_UNINTERRUPTIBLE); 1493 1494 /* Loop until we've been woken or interrupted */ 1495 flags = smp_load_acquire(&wait->flags); 1496 if (!(flags & WQ_FLAG_WOKEN)) { 1497 if (signal_pending_state(TASK_UNINTERRUPTIBLE, current)) 1498 break; 1499 1500 io_schedule(); 1501 continue; 1502 } 1503 break; 1504 } 1505 1506 finish_wait(q, wait); 1507 1508 if (thrashing) { 1509 if (delayacct) 1510 delayacct_thrashing_end(); 1511 psi_memstall_leave(&pflags); 1512 } 1513 } 1514 #endif 1515 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip