linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [linux-next:master 6060/6439] mm/memory_hotplug.c:1811:33: error: implicit declaration of function 'unmap_posioned_folio'; did you mean 'unmap_poisoned_folio'?
@ 2024-08-25 16:48 kernel test robot
  2024-08-26  1:52 ` Kefeng Wang
  0 siblings, 1 reply; 3+ messages in thread
From: kernel test robot @ 2024-08-25 16:48 UTC (permalink / raw)
  To: Kefeng Wang; +Cc: oe-kbuild-all, Linux Memory Management List, Andrew Morton

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   c79c85875f1af04040fe4492ed94ce37ad729c4d
commit: fb3b45758493a2451a9fdcf7f8c034d614d85939 [6060/6439] mm: memory_hotplug: check hwpoisoned page firstly in do_migrate_range()
config: x86_64-rhel-8.3-ltp (https://download.01.org/0day-ci/archive/20240826/202408260054.ka3zWBLH-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240826/202408260054.ka3zWBLH-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/202408260054.ka3zWBLH-lkp@intel.com/

Note: the linux-next/master HEAD c79c85875f1af04040fe4492ed94ce37ad729c4d builds fine.
      It may have been fixed somewhere.

All errors (new ones prefixed by >>):

   mm/memory_hotplug.c: In function 'do_migrate_range':
>> mm/memory_hotplug.c:1811:33: error: implicit declaration of function 'unmap_posioned_folio'; did you mean 'unmap_poisoned_folio'? [-Werror=implicit-function-declaration]
    1811 |                                 unmap_posioned_folio(folio, TTU_IGNORE_MLOCK);
         |                                 ^~~~~~~~~~~~~~~~~~~~
         |                                 unmap_poisoned_folio
   cc1: some warnings being treated as errors


vim +1811 mm/memory_hotplug.c

  1772	
  1773	static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
  1774	{
  1775		unsigned long pfn;
  1776		struct page *page;
  1777		LIST_HEAD(source);
  1778		static DEFINE_RATELIMIT_STATE(migrate_rs, DEFAULT_RATELIMIT_INTERVAL,
  1779					      DEFAULT_RATELIMIT_BURST);
  1780	
  1781		for (pfn = start_pfn; pfn < end_pfn; pfn++) {
  1782			struct folio *folio;
  1783			bool isolated;
  1784	
  1785			if (!pfn_valid(pfn))
  1786				continue;
  1787			page = pfn_to_page(pfn);
  1788			folio = page_folio(page);
  1789	
  1790			/*
  1791			 * No reference or lock is held on the folio, so it might
  1792			 * be modified concurrently (e.g. split).  As such,
  1793			 * folio_nr_pages() may read garbage.  This is fine as the outer
  1794			 * loop will revisit the split folio later.
  1795			 */
  1796			if (folio_test_large(folio))
  1797				pfn = folio_pfn(folio) + folio_nr_pages(folio) - 1;
  1798	
  1799			/*
  1800			 * HWPoison pages have elevated reference counts so the migration would
  1801			 * fail on them. It also doesn't make any sense to migrate them in the
  1802			 * first place. Still try to unmap such a page in case it is still mapped
  1803			 * (e.g. current hwpoison implementation doesn't unmap KSM pages but keep
  1804			 * the unmap as the catch all safety net).
  1805			 */
  1806			if (folio_test_hwpoison(folio) ||
  1807			    (folio_test_large(folio) && folio_test_has_hwpoisoned(folio))) {
  1808				if (WARN_ON(folio_test_lru(folio)))
  1809					folio_isolate_lru(folio);
  1810				if (folio_mapped(folio))
> 1811					unmap_posioned_folio(folio, TTU_IGNORE_MLOCK);
  1812				continue;
  1813			}
  1814	
  1815			if (folio_test_hugetlb(folio)) {
  1816				isolate_hugetlb(folio, &source);
  1817				continue;
  1818			}
  1819	
  1820			if (!get_page_unless_zero(page))
  1821				continue;
  1822			/*
  1823			 * We can skip free pages. And we can deal with pages on
  1824			 * LRU and non-lru movable pages.
  1825			 */
  1826			if (PageLRU(page))
  1827				isolated = isolate_lru_page(page);
  1828			else
  1829				isolated = isolate_movable_page(page, ISOLATE_UNEVICTABLE);
  1830			if (isolated) {
  1831				list_add_tail(&page->lru, &source);
  1832				if (!__PageMovable(page))
  1833					inc_node_page_state(page, NR_ISOLATED_ANON +
  1834							    page_is_file_lru(page));
  1835	
  1836			} else {
  1837				if (__ratelimit(&migrate_rs)) {
  1838					pr_warn("failed to isolate pfn %lx\n", pfn);
  1839					dump_page(page, "isolation failed");
  1840				}
  1841			}
  1842			put_page(page);
  1843		}
  1844		if (!list_empty(&source)) {
  1845			nodemask_t nmask = node_states[N_MEMORY];
  1846			struct migration_target_control mtc = {
  1847				.nmask = &nmask,
  1848				.gfp_mask = GFP_USER | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL,
  1849				.reason = MR_MEMORY_HOTPLUG,
  1850			};
  1851			int ret;
  1852	
  1853			/*
  1854			 * We have checked that migration range is on a single zone so
  1855			 * we can use the nid of the first page to all the others.
  1856			 */
  1857			mtc.nid = page_to_nid(list_first_entry(&source, struct page, lru));
  1858	
  1859			/*
  1860			 * try to allocate from a different node but reuse this node
  1861			 * if there are no other online nodes to be used (e.g. we are
  1862			 * offlining a part of the only existing node)
  1863			 */
  1864			node_clear(mtc.nid, nmask);
  1865			if (nodes_empty(nmask))
  1866				node_set(mtc.nid, nmask);
  1867			ret = migrate_pages(&source, alloc_migration_target, NULL,
  1868				(unsigned long)&mtc, MIGRATE_SYNC, MR_MEMORY_HOTPLUG, NULL);
  1869			if (ret) {
  1870				list_for_each_entry(page, &source, lru) {
  1871					if (__ratelimit(&migrate_rs)) {
  1872						pr_warn("migrating pfn %lx failed ret:%d\n",
  1873							page_to_pfn(page), ret);
  1874						dump_page(page, "migration failure");
  1875					}
  1876				}
  1877				putback_movable_pages(&source);
  1878			}
  1879		}
  1880	}
  1881	

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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [linux-next:master 6060/6439] mm/memory_hotplug.c:1811:33: error: implicit declaration of function 'unmap_posioned_folio'; did you mean 'unmap_poisoned_folio'?
  2024-08-25 16:48 [linux-next:master 6060/6439] mm/memory_hotplug.c:1811:33: error: implicit declaration of function 'unmap_posioned_folio'; did you mean 'unmap_poisoned_folio'? kernel test robot
@ 2024-08-26  1:52 ` Kefeng Wang
  2024-08-28  2:37   ` Andrew Morton
  0 siblings, 1 reply; 3+ messages in thread
From: Kefeng Wang @ 2024-08-26  1:52 UTC (permalink / raw)
  To: kernel test robot
  Cc: oe-kbuild-all, Linux Memory Management List, Andrew Morton


Andrew has two typo fix, should I resend all patch with fix-patch squashed?

+ mm-memory-failure-add-unmap_posioned_folio-fix.patch added to 
mm-unstable branch
+ 
mm-memory_hotplug-check-hwpoisoned-page-firstly-in-do_migrate_range-fix.patch 
added to mm-unstable branch

On 2024/8/26 0:48, kernel test robot wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> head:   c79c85875f1af04040fe4492ed94ce37ad729c4d
> commit: fb3b45758493a2451a9fdcf7f8c034d614d85939 [6060/6439] mm: memory_hotplug: check hwpoisoned page firstly in do_migrate_range()
> config: x86_64-rhel-8.3-ltp (https://download.01.org/0day-ci/archive/20240826/202408260054.ka3zWBLH-lkp@intel.com/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240826/202408260054.ka3zWBLH-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/202408260054.ka3zWBLH-lkp@intel.com/
> 
> Note: the linux-next/master HEAD c79c85875f1af04040fe4492ed94ce37ad729c4d builds fine.
>        It may have been fixed somewhere.
> 
> All errors (new ones prefixed by >>):
> 
>     mm/memory_hotplug.c: In function 'do_migrate_range':
>>> mm/memory_hotplug.c:1811:33: error: implicit declaration of function 'unmap_posioned_folio'; did you mean 'unmap_poisoned_folio'? [-Werror=implicit-function-declaration]
>      1811 |                                 unmap_posioned_folio(folio, TTU_IGNORE_MLOCK);
>           |                                 ^~~~~~~~~~~~~~~~~~~~
>           |                                 unmap_poisoned_folio
>     cc1: some warnings being treated as errors
> 
> 
> vim +1811 mm/memory_hotplug.c
> 
>    1772	
>    1773	static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
>    1774	{
>    1775		unsigned long pfn;
>    1776		struct page *page;
>    1777		LIST_HEAD(source);
>    1778		static DEFINE_RATELIMIT_STATE(migrate_rs, DEFAULT_RATELIMIT_INTERVAL,
>    1779					      DEFAULT_RATELIMIT_BURST);
>    1780	
>    1781		for (pfn = start_pfn; pfn < end_pfn; pfn++) {
>    1782			struct folio *folio;
>    1783			bool isolated;
>    1784	
>    1785			if (!pfn_valid(pfn))
>    1786				continue;
>    1787			page = pfn_to_page(pfn);
>    1788			folio = page_folio(page);
>    1789	
>    1790			/*
>    1791			 * No reference or lock is held on the folio, so it might
>    1792			 * be modified concurrently (e.g. split).  As such,
>    1793			 * folio_nr_pages() may read garbage.  This is fine as the outer
>    1794			 * loop will revisit the split folio later.
>    1795			 */
>    1796			if (folio_test_large(folio))
>    1797				pfn = folio_pfn(folio) + folio_nr_pages(folio) - 1;
>    1798	
>    1799			/*
>    1800			 * HWPoison pages have elevated reference counts so the migration would
>    1801			 * fail on them. It also doesn't make any sense to migrate them in the
>    1802			 * first place. Still try to unmap such a page in case it is still mapped
>    1803			 * (e.g. current hwpoison implementation doesn't unmap KSM pages but keep
>    1804			 * the unmap as the catch all safety net).
>    1805			 */
>    1806			if (folio_test_hwpoison(folio) ||
>    1807			    (folio_test_large(folio) && folio_test_has_hwpoisoned(folio))) {
>    1808				if (WARN_ON(folio_test_lru(folio)))
>    1809					folio_isolate_lru(folio);
>    1810				if (folio_mapped(folio))
>> 1811					unmap_posioned_folio(folio, TTU_IGNORE_MLOCK);
>    1812				continue;
>    1813			}
>    1814	
>    1815			if (folio_test_hugetlb(folio)) {
>    1816				isolate_hugetlb(folio, &source);
>    1817				continue;
>    1818			}
>    1819	
>    1820			if (!get_page_unless_zero(page))
>    1821				continue;
>    1822			/*
>    1823			 * We can skip free pages. And we can deal with pages on
>    1824			 * LRU and non-lru movable pages.
>    1825			 */
>    1826			if (PageLRU(page))
>    1827				isolated = isolate_lru_page(page);
>    1828			else
>    1829				isolated = isolate_movable_page(page, ISOLATE_UNEVICTABLE);
>    1830			if (isolated) {
>    1831				list_add_tail(&page->lru, &source);
>    1832				if (!__PageMovable(page))
>    1833					inc_node_page_state(page, NR_ISOLATED_ANON +
>    1834							    page_is_file_lru(page));
>    1835	
>    1836			} else {
>    1837				if (__ratelimit(&migrate_rs)) {
>    1838					pr_warn("failed to isolate pfn %lx\n", pfn);
>    1839					dump_page(page, "isolation failed");
>    1840				}
>    1841			}
>    1842			put_page(page);
>    1843		}
>    1844		if (!list_empty(&source)) {
>    1845			nodemask_t nmask = node_states[N_MEMORY];
>    1846			struct migration_target_control mtc = {
>    1847				.nmask = &nmask,
>    1848				.gfp_mask = GFP_USER | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL,
>    1849				.reason = MR_MEMORY_HOTPLUG,
>    1850			};
>    1851			int ret;
>    1852	
>    1853			/*
>    1854			 * We have checked that migration range is on a single zone so
>    1855			 * we can use the nid of the first page to all the others.
>    1856			 */
>    1857			mtc.nid = page_to_nid(list_first_entry(&source, struct page, lru));
>    1858	
>    1859			/*
>    1860			 * try to allocate from a different node but reuse this node
>    1861			 * if there are no other online nodes to be used (e.g. we are
>    1862			 * offlining a part of the only existing node)
>    1863			 */
>    1864			node_clear(mtc.nid, nmask);
>    1865			if (nodes_empty(nmask))
>    1866				node_set(mtc.nid, nmask);
>    1867			ret = migrate_pages(&source, alloc_migration_target, NULL,
>    1868				(unsigned long)&mtc, MIGRATE_SYNC, MR_MEMORY_HOTPLUG, NULL);
>    1869			if (ret) {
>    1870				list_for_each_entry(page, &source, lru) {
>    1871					if (__ratelimit(&migrate_rs)) {
>    1872						pr_warn("migrating pfn %lx failed ret:%d\n",
>    1873							page_to_pfn(page), ret);
>    1874						dump_page(page, "migration failure");
>    1875					}
>    1876				}
>    1877				putback_movable_pages(&source);
>    1878			}
>    1879		}
>    1880	}
>    1881	
> 


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [linux-next:master 6060/6439] mm/memory_hotplug.c:1811:33: error: implicit declaration of function 'unmap_posioned_folio'; did you mean 'unmap_poisoned_folio'?
  2024-08-26  1:52 ` Kefeng Wang
@ 2024-08-28  2:37   ` Andrew Morton
  0 siblings, 0 replies; 3+ messages in thread
From: Andrew Morton @ 2024-08-28  2:37 UTC (permalink / raw)
  To: Kefeng Wang
  Cc: kernel test robot, oe-kbuild-all, Linux Memory Management List

On Mon, 26 Aug 2024 09:52:12 +0800 Kefeng Wang <wangkefeng.wang@huawei.com> wrote:

> Andrew has two typo fix, should I resend all patch with fix-patch squashed?
> 
> + mm-memory-failure-add-unmap_posioned_folio-fix.patch added to 
> mm-unstable branch
> + 
> mm-memory_hotplug-check-hwpoisoned-page-firstly-in-do_migrate_range-fix.patch 
> added to mm-unstable branch
> 

Please just send a patch which fixes the error.  I'll figure it out.


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-08-28  2:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-08-25 16:48 [linux-next:master 6060/6439] mm/memory_hotplug.c:1811:33: error: implicit declaration of function 'unmap_posioned_folio'; did you mean 'unmap_poisoned_folio'? kernel test robot
2024-08-26  1:52 ` Kefeng Wang
2024-08-28  2:37   ` Andrew Morton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox