All of lore.kernel.org
 help / color / mirror / Atom feed
* [davidhildenbrand:migration 10/16] mm/migrate.c:191: warning: Function parameter or struct member 'dst' not described in 'migrate_non_folio_page'
@ 2025-04-14  1:47 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-04-14  1:47 UTC (permalink / raw)
  To: David Hildenbrand; +Cc: oe-kbuild-all

tree:   https://github.com/davidhildenbrand/linux migration
head:   07b1b56f4f50e3b2ce6818d9ca0fbdbcd138d66f
commit: a3d0a56997669e386379c8b016a041fa5264fcae [10/16] mm/migrate: factor out non-folio page handling into migrate_non_folio_page()
config: arc-randconfig-001-20250414 (https://download.01.org/0day-ci/archive/20250414/202504140956.XfOvdbF7-lkp@intel.com/config)
compiler: arc-linux-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250414/202504140956.XfOvdbF7-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202504140956.XfOvdbF7-lkp@intel.com/

All warnings (new ones prefixed by >>):

   mm/migrate.c:68: warning: Function parameter or struct member 'mode' not described in 'isolate_non_folio_page'
>> mm/migrate.c:191: warning: Function parameter or struct member 'dst' not described in 'migrate_non_folio_page'
>> mm/migrate.c:191: warning: Function parameter or struct member 'src' not described in 'migrate_non_folio_page'
>> mm/migrate.c:191: warning: Function parameter or struct member 'mode' not described in 'migrate_non_folio_page'
>> mm/migrate.c:191: warning: Excess function parameter 'page' description in 'migrate_non_folio_page'


vim +191 mm/migrate.c

    53	
    54	/**
    55	 * isolate_non_folio_page - isolate a non-folio page for migration
    56	 * @page: The page.
    57	 *
    58	 * Try to isolate a non-folio page for migration. Will fail if the page is
    59	 * not a non-folio page that is movable, including if the page is already
    60	 * isolated or just was released by its owner.
    61	 *
    62	 * Once isolated, the page cannot get freed until it is either putback
    63	 * or migrated.
    64	 *
    65	 * Returns true if isolation succeeded, otherwise false.
    66	 */
    67	bool isolate_non_folio_page(struct page *page, isolate_mode_t mode)
  > 68	{
    69		/*
    70		 * TODO: these pages will not be folios in the future. All
    71		 * folio dependencies will have to be removed.
    72		 */
    73		struct folio *folio = folio_get_nontail_page(page);
    74		const struct movable_operations *mops;
    75	
    76		/*
    77		 * Avoid burning cycles with pages that are yet under __free_pages(),
    78		 * or just got freed under us.
    79		 *
    80		 * In case we 'win' a race for a movable page being freed under us and
    81		 * raise its refcount preventing __free_pages() from doing its job
    82		 * the put_page() at the end of this block will take care of
    83		 * release this page, thus avoiding a nasty leakage.
    84		 */
    85		if (!folio)
    86			goto out;
    87	
    88		/*
    89		 * Check movable flag before taking the page lock because
    90		 * we use non-atomic bitops on newly allocated page flags so
    91		 * unconditionally grabbing the lock ruins page's owner side.
    92		 */
    93		if (unlikely(!__PageMovable(page)))
    94			goto out_putfolio;
    95	
    96		/*
    97		 * As movable pages are not isolated from LRU lists, concurrent
    98		 * compaction threads can race against page migration functions
    99		 * as well as race against the releasing a page.
   100		 *
   101		 * In order to avoid having an already isolated movable page
   102		 * being (wrongly) re-isolated while it is under migration,
   103		 * or to avoid attempting to isolate pages being released,
   104		 * lets be sure we have the page lock
   105		 * before proceeding with the movable page isolation steps.
   106		 */
   107		if (unlikely(!folio_trylock(folio)))
   108			goto out_putfolio;
   109	
   110		if (!PageMovable(page) || PageIsolated(page))
   111			goto out_no_isolated;
   112	
   113		mops = page_movable_ops(page);
   114		if (WARN_ON_ONCE(!mops))
   115			goto out_no_isolated;
   116	
   117		if (!mops->isolate_page(page, mode))
   118			goto out_no_isolated;
   119	
   120		/* Driver shouldn't use the isolated flag */
   121		VM_WARN_ON_ONCE_PAGE(PageIsolated(page), page);
   122		SetPageIsolated(page);
   123		folio_unlock(folio);
   124	
   125		return true;
   126	
   127	out_no_isolated:
   128		folio_unlock(folio);
   129	out_putfolio:
   130		folio_put(folio);
   131	out:
   132		return false;
   133	}
   134	
   135	/**
   136	 * putback_non_folio_page - putback a non-folio page
   137	 * @page: The page.
   138	 *
   139	 * Putback a non-folio page that was previously isolated
   140	 * with isolated_non_folio_page().
   141	 *
   142	 * After the page was putback, it might get freed at any time and must no
   143	 * longer be touched by the caller.
   144	 */
   145	static void putback_non_folio_page(struct page *page)
   146	{
   147		/*
   148		 * TODO: these pages will not be folios in the future. All
   149		 * folio dependencies will have to be removed.
   150		 */
   151		struct folio *folio = page_folio(page);
   152	
   153		VM_WARN_ON_ONCE_PAGE(!PageIsolated(page), page);
   154		folio_lock(folio);
   155		/* If the page was released by it's owner, there is nothing to do. */
   156		if (PageMovable(page))
   157			page_movable_ops(page)->putback_page(page);
   158		ClearPageIsolated(page);
   159		folio_unlock(folio);
   160		folio_put(folio);
   161	}
   162	
   163	/**
   164	 * migrate_non_folio_page - migrate a non-folio page
   165	 * @page: The page.
   166	 *
   167	 * Migrate a non-folio page that was previously isolated with
   168	 * isolated_non_folio_page().
   169	 *
   170	 * If the src page was already released by its owner, the src page is
   171	 * un-isolated and migration succeeds; the migration core will be the
   172	 * owner of both pages.
   173	 *
   174	 * If the src page was not released by its owner and the migration was
   175	 * successful, the owner of the src page and the dst page are swapped and
   176	 * the src page is un-isolated.
   177	 *
   178	 * If migration fails, the ownership stays unmodified and the src page
   179	 * remains isolated: migration may be retried later or the page can be putback.
   180	 *
   181	 * TODO: migration core will treat both pages as folios and lock them before
   182	 * this call to unlock them after this call. Further, the folio refcounts on
   183	 * src and dst are also released by migration core. These pages will not be
   184	 * folios in the future, so that must be reworked.
   185	 *
   186	 * Returns MIGRATEPAGE_SUCCESS on success, otherwise a negative error
   187	 * code.
   188	 */
   189	static int migrate_non_folio_page(struct page *dst, struct page *src,
   190			enum migrate_mode mode)
 > 191	{
   192		int rc = MIGRATEPAGE_SUCCESS;
   193	
   194		VM_WARN_ON_ONCE(!PageIsolated(src));
   195		/* If the page was released by it's owner, there is nothing to do. */
   196		if (PageMovable(src))
   197			rc = page_movable_ops(src)->migrate_page(dst, src, mode);
   198		if (rc == MIGRATEPAGE_SUCCESS)
   199			ClearPageIsolated(src);
   200		return rc;
   201	}
   202	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-04-14  1:47 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-14  1:47 [davidhildenbrand:migration 10/16] mm/migrate.c:191: warning: Function parameter or struct member 'dst' not described in 'migrate_non_folio_page' kernel test robot

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.