Message ID | 20250116061657.227027-2-mawupeng1@huawei.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mm: memory_failure: unmap poisoned filio during migrate properly | expand |
Hi Wupeng, kernel test robot noticed the following build errors: [auto build test ERROR on akpm-mm/mm-everything] url: https://github.com/intel-lab-lkp/linux/commits/Wupeng-Ma/mm-memory-failure-update-ttu-flag-inside-unmap_poisoned_folio/20250116-142614 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20250116061657.227027-2-mawupeng1%40huawei.com patch subject: [PATCH v2 1/3] mm: memory-failure: update ttu flag inside unmap_poisoned_folio config: s390-randconfig-001-20250117 (https://download.01.org/0day-ci/archive/20250117/202501171300.SYkofFQ6-lkp@intel.com/config) compiler: s390-linux-gcc (GCC) 14.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250117/202501171300.SYkofFQ6-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/202501171300.SYkofFQ6-lkp@intel.com/ All error/warnings (new ones prefixed by >>): In file included from mm/page_isolation.c:13: >> mm/internal.h:1142:1: error: expected identifier or '(' before '{' token 1142 | { | ^ >> mm/internal.h:1141:19: warning: 'unmap_poisoned_folio' declared 'static' but never defined [-Wunused-function] 1141 | static inline int unmap_poisoned_folio(struct folio *folio, unsigned long pfn, bool must_kill); | ^~~~~~~~~~~~~~~~~~~~ -- In file included from mm/damon/paddr.c:19: >> mm/damon/../internal.h:1142:1: error: expected identifier or '(' before '{' token 1142 | { | ^ >> mm/damon/../internal.h:1141:19: warning: 'unmap_poisoned_folio' declared 'static' but never defined [-Wunused-function] 1141 | static inline int unmap_poisoned_folio(struct folio *folio, unsigned long pfn, bool must_kill); | ^~~~~~~~~~~~~~~~~~~~ vim +1142 mm/internal.h 31d3d3484f9bd2 Wu Fengguang 2009-12-16 1121 7c116f2b0dbac4 Wu Fengguang 2009-12-16 1122 extern u32 hwpoison_filter_dev_major; 7c116f2b0dbac4 Wu Fengguang 2009-12-16 1123 extern u32 hwpoison_filter_dev_minor; 478c5ffc0b5052 Wu Fengguang 2009-12-16 1124 extern u64 hwpoison_filter_flags_mask; 478c5ffc0b5052 Wu Fengguang 2009-12-16 1125 extern u64 hwpoison_filter_flags_value; 4fd466eb46a6a9 Andi Kleen 2009-12-16 1126 extern u64 hwpoison_filter_memcg; 1bfe5febe34d2b Haicheng Li 2009-12-16 1127 extern u32 hwpoison_filter_enable; 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1128 #define MAGIC_HWPOISON 0x48575053U /* HWPS */ 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1129 void SetPageHWPoisonTakenOff(struct page *page); 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1130 void ClearPageHWPoisonTakenOff(struct page *page); 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1131 bool take_page_off_buddy(struct page *page); 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1132 bool put_page_back_buddy(struct page *page); 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1133 struct task_struct *task_early_kill(struct task_struct *tsk, int force_early); 68158bfa3dbd4a Matthew Wilcox (Oracle 2024-10-05 1134) void add_to_kill_ksm(struct task_struct *tsk, const struct page *p, 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1135 struct vm_area_struct *vma, struct list_head *to_kill, 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1136 unsigned long ksm_addr); 68158bfa3dbd4a Matthew Wilcox (Oracle 2024-10-05 1137) unsigned long page_mapped_in_vma(const struct page *page, 68158bfa3dbd4a Matthew Wilcox (Oracle 2024-10-05 1138) struct vm_area_struct *vma); eb36c5873b96e8 Al Viro 2012-05-30 1139 16038c4fffd802 Kefeng Wang 2024-08-27 1140 #else 2b5df10a15dc74 Ma Wupeng 2025-01-16 @1141 static inline int unmap_poisoned_folio(struct folio *folio, unsigned long pfn, bool must_kill); 16038c4fffd802 Kefeng Wang 2024-08-27 @1142 { 2b5df10a15dc74 Ma Wupeng 2025-01-16 1143 return -EBUSY; 16038c4fffd802 Kefeng Wang 2024-08-27 1144 } 16038c4fffd802 Kefeng Wang 2024-08-27 1145 #endif 16038c4fffd802 Kefeng Wang 2024-08-27 1146
On 2025/1/17 11:57, kernel test robot wrote: > Hi Wupeng, > > kernel test robot noticed the following build errors: Thanks. Will be fixed later. > > [auto build test ERROR on akpm-mm/mm-everything] > > url: https://github.com/intel-lab-lkp/linux/commits/Wupeng-Ma/mm-memory-failure-update-ttu-flag-inside-unmap_poisoned_folio/20250116-142614 > base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything > patch link: https://lore.kernel.org/r/20250116061657.227027-2-mawupeng1%40huawei.com > patch subject: [PATCH v2 1/3] mm: memory-failure: update ttu flag inside unmap_poisoned_folio > config: s390-randconfig-001-20250117 (https://download.01.org/0day-ci/archive/20250117/202501171300.SYkofFQ6-lkp@intel.com/config) > compiler: s390-linux-gcc (GCC) 14.2.0 > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250117/202501171300.SYkofFQ6-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/202501171300.SYkofFQ6-lkp@intel.com/ > > All error/warnings (new ones prefixed by >>): > > In file included from mm/page_isolation.c:13: >>> mm/internal.h:1142:1: error: expected identifier or '(' before '{' token > 1142 | { > | ^ >>> mm/internal.h:1141:19: warning: 'unmap_poisoned_folio' declared 'static' but never defined [-Wunused-function] > 1141 | static inline int unmap_poisoned_folio(struct folio *folio, unsigned long pfn, bool must_kill); > | ^~~~~~~~~~~~~~~~~~~~ > -- > In file included from mm/damon/paddr.c:19: >>> mm/damon/../internal.h:1142:1: error: expected identifier or '(' before '{' token > 1142 | { > | ^ >>> mm/damon/../internal.h:1141:19: warning: 'unmap_poisoned_folio' declared 'static' but never defined [-Wunused-function] > 1141 | static inline int unmap_poisoned_folio(struct folio *folio, unsigned long pfn, bool must_kill); > | ^~~~~~~~~~~~~~~~~~~~ > > > vim +1142 mm/internal.h > > 31d3d3484f9bd2 Wu Fengguang 2009-12-16 1121 > 7c116f2b0dbac4 Wu Fengguang 2009-12-16 1122 extern u32 hwpoison_filter_dev_major; > 7c116f2b0dbac4 Wu Fengguang 2009-12-16 1123 extern u32 hwpoison_filter_dev_minor; > 478c5ffc0b5052 Wu Fengguang 2009-12-16 1124 extern u64 hwpoison_filter_flags_mask; > 478c5ffc0b5052 Wu Fengguang 2009-12-16 1125 extern u64 hwpoison_filter_flags_value; > 4fd466eb46a6a9 Andi Kleen 2009-12-16 1126 extern u64 hwpoison_filter_memcg; > 1bfe5febe34d2b Haicheng Li 2009-12-16 1127 extern u32 hwpoison_filter_enable; > 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1128 #define MAGIC_HWPOISON 0x48575053U /* HWPS */ > 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1129 void SetPageHWPoisonTakenOff(struct page *page); > 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1130 void ClearPageHWPoisonTakenOff(struct page *page); > 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1131 bool take_page_off_buddy(struct page *page); > 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1132 bool put_page_back_buddy(struct page *page); > 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1133 struct task_struct *task_early_kill(struct task_struct *tsk, int force_early); > 68158bfa3dbd4a Matthew Wilcox (Oracle 2024-10-05 1134) void add_to_kill_ksm(struct task_struct *tsk, const struct page *p, > 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1135 struct vm_area_struct *vma, struct list_head *to_kill, > 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1136 unsigned long ksm_addr); > 68158bfa3dbd4a Matthew Wilcox (Oracle 2024-10-05 1137) unsigned long page_mapped_in_vma(const struct page *page, > 68158bfa3dbd4a Matthew Wilcox (Oracle 2024-10-05 1138) struct vm_area_struct *vma); > eb36c5873b96e8 Al Viro 2012-05-30 1139 > 16038c4fffd802 Kefeng Wang 2024-08-27 1140 #else > 2b5df10a15dc74 Ma Wupeng 2025-01-16 @1141 static inline int unmap_poisoned_folio(struct folio *folio, unsigned long pfn, bool must_kill); > 16038c4fffd802 Kefeng Wang 2024-08-27 @1142 { > 2b5df10a15dc74 Ma Wupeng 2025-01-16 1143 return -EBUSY; > 16038c4fffd802 Kefeng Wang 2024-08-27 1144 } > 16038c4fffd802 Kefeng Wang 2024-08-27 1145 #endif > 16038c4fffd802 Kefeng Wang 2024-08-27 1146 >
Hi Wupeng, kernel test robot noticed the following build errors: [auto build test ERROR on akpm-mm/mm-everything] url: https://github.com/intel-lab-lkp/linux/commits/Wupeng-Ma/mm-memory-failure-update-ttu-flag-inside-unmap_poisoned_folio/20250116-142614 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20250116061657.227027-2-mawupeng1%40huawei.com patch subject: [PATCH v2 1/3] mm: memory-failure: update ttu flag inside unmap_poisoned_folio config: s390-randconfig-002-20250117 (https://download.01.org/0day-ci/archive/20250117/202501171201.GNMkmauO-lkp@intel.com/config) compiler: clang version 20.0.0git (https://github.com/llvm/llvm-project c23f2417dc5f6dc371afb07af5627ec2a9d373a0) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250117/202501171201.GNMkmauO-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/202501171201.GNMkmauO-lkp@intel.com/ All errors (new ones prefixed by >>): In file included from mm/mprotect.c:12: In file included from include/linux/pagewalk.h:5: In file included from include/linux/mm.h:2224: include/linux/vmstat.h:504:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 504 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 505 | item]; | ~~~~ include/linux/vmstat.h:511:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 511 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 512 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ include/linux/vmstat.h:524:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 524 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 525 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ In file included from mm/mprotect.c:30: include/linux/mm_inline.h:47:41: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 47 | __mod_lruvec_state(lruvec, NR_LRU_BASE + lru, nr_pages); | ~~~~~~~~~~~ ^ ~~~ include/linux/mm_inline.h:49:22: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 49 | NR_ZONE_LRU_BASE + lru, nr_pages); | ~~~~~~~~~~~~~~~~ ^ ~~~ In file included from mm/mprotect.c:41: >> mm/internal.h:1142:1: error: expected identifier or '(' 1142 | { | ^ 5 warnings and 1 error generated. -- In file included from mm/vmscan.c:15: In file included from include/linux/mm.h:2224: include/linux/vmstat.h:504:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 504 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 505 | item]; | ~~~~ include/linux/vmstat.h:511:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 511 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 512 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ include/linux/vmstat.h:524:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 524 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 525 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ In file included from mm/vmscan.c:30: include/linux/mm_inline.h:47:41: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 47 | __mod_lruvec_state(lruvec, NR_LRU_BASE + lru, nr_pages); | ~~~~~~~~~~~ ^ ~~~ include/linux/mm_inline.h:49:22: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 49 | NR_ZONE_LRU_BASE + lru, nr_pages); | ~~~~~~~~~~~~~~~~ ^ ~~~ In file included from mm/vmscan.c:68: >> mm/internal.h:1142:1: error: expected identifier or '(' 1142 | { | ^ mm/vmscan.c:409:51: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 409 | size += zone_page_state(zone, NR_ZONE_LRU_BASE + lru); | ~~~~~~~~~~~~~~~~ ^ ~~~ mm/vmscan.c:1770:4: warning: arithmetic between different enumeration types ('enum vm_event_item' and 'enum zone_type') [-Wenum-enum-conversion] 1770 | __count_zid_vm_events(PGSCAN_SKIP, zid, nr_skipped[zid]); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/vmstat.h:139:34: note: expanded from macro '__count_zid_vm_events' 139 | __count_vm_events(item##_NORMAL - ZONE_NORMAL + zid, delta) | ~~~~~~~~~~~~~ ^ ~~~~~~~~~~~ mm/vmscan.c:2276:51: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 2276 | inactive = lruvec_page_state(lruvec, NR_LRU_BASE + inactive_lru); | ~~~~~~~~~~~ ^ ~~~~~~~~~~~~ mm/vmscan.c:2277:49: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 2277 | active = lruvec_page_state(lruvec, NR_LRU_BASE + active_lru); | ~~~~~~~~~~~ ^ ~~~~~~~~~~ mm/vmscan.c:6292:3: warning: arithmetic between different enumeration types ('enum vm_event_item' and 'enum zone_type') [-Wenum-enum-conversion] 6292 | __count_zid_vm_events(ALLOCSTALL, sc->reclaim_idx, 1); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/vmstat.h:139:34: note: expanded from macro '__count_zid_vm_events' 139 | __count_vm_events(item##_NORMAL - ZONE_NORMAL + zid, delta) | ~~~~~~~~~~~~~ ^ ~~~~~~~~~~~ 10 warnings and 1 error generated. -- In file included from mm/page_alloc.c:19: In file included from include/linux/mm.h:2224: include/linux/vmstat.h:504:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 504 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 505 | item]; | ~~~~ include/linux/vmstat.h:511:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 511 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 512 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ include/linux/vmstat.h:524:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 524 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 525 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ In file included from mm/page_alloc.c:44: include/linux/mm_inline.h:47:41: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 47 | __mod_lruvec_state(lruvec, NR_LRU_BASE + lru, nr_pages); | ~~~~~~~~~~~ ^ ~~~ include/linux/mm_inline.h:49:22: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 49 | NR_ZONE_LRU_BASE + lru, nr_pages); | ~~~~~~~~~~~~~~~~ ^ ~~~ In file included from mm/page_alloc.c:59: >> mm/internal.h:1142:1: error: expected identifier or '(' 1142 | { | ^ mm/page_alloc.c:2933:2: warning: arithmetic between different enumeration types ('enum vm_event_item' and 'enum zone_type') [-Wenum-enum-conversion] 2933 | __count_zid_vm_events(PGALLOC, page_zonenum(page), 1 << order); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/vmstat.h:139:34: note: expanded from macro '__count_zid_vm_events' 139 | __count_vm_events(item##_NORMAL - ZONE_NORMAL + zid, delta) | ~~~~~~~~~~~~~ ^ ~~~~~~~~~~~ mm/page_alloc.c:3050:3: warning: arithmetic between different enumeration types ('enum vm_event_item' and 'enum zone_type') [-Wenum-enum-conversion] 3050 | __count_zid_vm_events(PGALLOC, page_zonenum(page), 1 << order); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/vmstat.h:139:34: note: expanded from macro '__count_zid_vm_events' 139 | __count_vm_events(item##_NORMAL - ZONE_NORMAL + zid, delta) | ~~~~~~~~~~~~~ ^ ~~~~~~~~~~~ mm/page_alloc.c:4683:2: warning: arithmetic between different enumeration types ('enum vm_event_item' and 'enum zone_type') [-Wenum-enum-conversion] 4683 | __count_zid_vm_events(PGALLOC, zone_idx(zone), nr_account); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/vmstat.h:139:34: note: expanded from macro '__count_zid_vm_events' 139 | __count_vm_events(item##_NORMAL - ZONE_NORMAL + zid, delta) | ~~~~~~~~~~~~~ ^ ~~~~~~~~~~~ 8 warnings and 1 error generated. vim +1142 mm/internal.h 31d3d3484f9bd2 Wu Fengguang 2009-12-16 1121 7c116f2b0dbac4 Wu Fengguang 2009-12-16 1122 extern u32 hwpoison_filter_dev_major; 7c116f2b0dbac4 Wu Fengguang 2009-12-16 1123 extern u32 hwpoison_filter_dev_minor; 478c5ffc0b5052 Wu Fengguang 2009-12-16 1124 extern u64 hwpoison_filter_flags_mask; 478c5ffc0b5052 Wu Fengguang 2009-12-16 1125 extern u64 hwpoison_filter_flags_value; 4fd466eb46a6a9 Andi Kleen 2009-12-16 1126 extern u64 hwpoison_filter_memcg; 1bfe5febe34d2b Haicheng Li 2009-12-16 1127 extern u32 hwpoison_filter_enable; 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1128 #define MAGIC_HWPOISON 0x48575053U /* HWPS */ 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1129 void SetPageHWPoisonTakenOff(struct page *page); 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1130 void ClearPageHWPoisonTakenOff(struct page *page); 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1131 bool take_page_off_buddy(struct page *page); 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1132 bool put_page_back_buddy(struct page *page); 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1133 struct task_struct *task_early_kill(struct task_struct *tsk, int force_early); 68158bfa3dbd4a Matthew Wilcox (Oracle 2024-10-05 1134) void add_to_kill_ksm(struct task_struct *tsk, const struct page *p, 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1135 struct vm_area_struct *vma, struct list_head *to_kill, 3a78f77fd1fb82 Miaohe Lin 2024-06-12 1136 unsigned long ksm_addr); 68158bfa3dbd4a Matthew Wilcox (Oracle 2024-10-05 1137) unsigned long page_mapped_in_vma(const struct page *page, 68158bfa3dbd4a Matthew Wilcox (Oracle 2024-10-05 1138) struct vm_area_struct *vma); eb36c5873b96e8 Al Viro 2012-05-30 1139 16038c4fffd802 Kefeng Wang 2024-08-27 1140 #else 2b5df10a15dc74 Ma Wupeng 2025-01-16 1141 static inline int unmap_poisoned_folio(struct folio *folio, unsigned long pfn, bool must_kill); 16038c4fffd802 Kefeng Wang 2024-08-27 @1142 { 2b5df10a15dc74 Ma Wupeng 2025-01-16 1143 return -EBUSY; 16038c4fffd802 Kefeng Wang 2024-08-27 1144 } 16038c4fffd802 Kefeng Wang 2024-08-27 1145 #endif 16038c4fffd802 Kefeng Wang 2024-08-27 1146
Hi Wupeng, kernel test robot noticed the following build warnings: [auto build test WARNING on akpm-mm/mm-everything] url: https://github.com/intel-lab-lkp/linux/commits/Wupeng-Ma/mm-memory-failure-update-ttu-flag-inside-unmap_poisoned_folio/20250116-142614 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20250116061657.227027-2-mawupeng1%40huawei.com patch subject: [PATCH v2 1/3] mm: memory-failure: update ttu flag inside unmap_poisoned_folio config: x86_64-buildonly-randconfig-002-20250117 (https://download.01.org/0day-ci/archive/20250117/202501171215.KLa8VDaS-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/20250117/202501171215.KLa8VDaS-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/202501171215.KLa8VDaS-lkp@intel.com/ All warnings (new ones prefixed by >>): In file included from mm/memory_hotplug.c:41: mm/internal.h:1142:1: error: expected identifier or '(' before '{' token 1142 | { | ^ >> mm/internal.h:1141:19: warning: 'unmap_poisoned_folio' used but never defined 1141 | static inline int unmap_poisoned_folio(struct folio *folio, unsigned long pfn, bool must_kill); | ^~~~~~~~~~~~~~~~~~~~ vim +/unmap_poisoned_folio +1141 mm/internal.h 1121 1122 extern u32 hwpoison_filter_dev_major; 1123 extern u32 hwpoison_filter_dev_minor; 1124 extern u64 hwpoison_filter_flags_mask; 1125 extern u64 hwpoison_filter_flags_value; 1126 extern u64 hwpoison_filter_memcg; 1127 extern u32 hwpoison_filter_enable; 1128 #define MAGIC_HWPOISON 0x48575053U /* HWPS */ 1129 void SetPageHWPoisonTakenOff(struct page *page); 1130 void ClearPageHWPoisonTakenOff(struct page *page); 1131 bool take_page_off_buddy(struct page *page); 1132 bool put_page_back_buddy(struct page *page); 1133 struct task_struct *task_early_kill(struct task_struct *tsk, int force_early); 1134 void add_to_kill_ksm(struct task_struct *tsk, const struct page *p, 1135 struct vm_area_struct *vma, struct list_head *to_kill, 1136 unsigned long ksm_addr); 1137 unsigned long page_mapped_in_vma(const struct page *page, 1138 struct vm_area_struct *vma); 1139 1140 #else > 1141 static inline int unmap_poisoned_folio(struct folio *folio, unsigned long pfn, bool must_kill); 1142 { 1143 return -EBUSY; 1144 } 1145 #endif 1146
diff --git a/mm/internal.h b/mm/internal.h index 9826f7dce607..3caee67c0abd 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -1102,7 +1102,7 @@ static inline int find_next_best_node(int node, nodemask_t *used_node_mask) * mm/memory-failure.c */ #ifdef CONFIG_MEMORY_FAILURE -void unmap_poisoned_folio(struct folio *folio, enum ttu_flags ttu); +int unmap_poisoned_folio(struct folio *folio, unsigned long pfn, bool must_kill); void shake_folio(struct folio *folio); extern int hwpoison_filter(struct page *p); @@ -1125,8 +1125,9 @@ unsigned long page_mapped_in_vma(const struct page *page, struct vm_area_struct *vma); #else -static inline void unmap_poisoned_folio(struct folio *folio, enum ttu_flags ttu) +static inline int unmap_poisoned_folio(struct folio *folio, unsigned long pfn, bool must_kill); { + return -EBUSY; } #endif diff --git a/mm/memory-failure.c b/mm/memory-failure.c index a7b8ccd29b6f..b5212b6e330a 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1556,8 +1556,34 @@ static int get_hwpoison_page(struct page *p, unsigned long flags) return ret; } -void unmap_poisoned_folio(struct folio *folio, enum ttu_flags ttu) +int unmap_poisoned_folio(struct folio *folio, unsigned long pfn, bool must_kill) { + enum ttu_flags ttu = TTU_IGNORE_MLOCK | TTU_SYNC | TTU_HWPOISON; + struct address_space *mapping; + + if (folio_test_swapcache(folio)) { + pr_err("%#lx: keeping poisoned page in swap cache\n", pfn); + ttu &= ~TTU_HWPOISON; + } + + /* + * Propagate the dirty bit from PTEs to struct page first, because we + * need this to decide if we should kill or just drop the page. + * XXX: the dirty test could be racy: set_page_dirty() may not always + * be called inside page lock (it's recommended but not enforced). + */ + mapping = folio_mapping(folio); + if (!must_kill && !folio_test_dirty(folio) && mapping && + mapping_can_writeback(mapping)) { + if (folio_mkclean(folio)) { + folio_set_dirty(folio); + } else { + ttu &= ~TTU_HWPOISON; + pr_info("%#lx: corrupted page was clean: dropped without side effects\n", + pfn); + } + } + if (folio_test_hugetlb(folio) && !folio_test_anon(folio)) { struct address_space *mapping; @@ -1572,7 +1598,7 @@ void unmap_poisoned_folio(struct folio *folio, enum ttu_flags ttu) if (!mapping) { pr_info("%#lx: could not lock mapping for mapped hugetlb folio\n", folio_pfn(folio)); - return; + return -EBUSY; } try_to_unmap(folio, ttu|TTU_RMAP_LOCKED); @@ -1580,6 +1606,8 @@ void unmap_poisoned_folio(struct folio *folio, enum ttu_flags ttu) } else { try_to_unmap(folio, ttu); } + + return folio_mapped(folio) ? -EBUSY : 0; } /* @@ -1589,8 +1617,6 @@ void unmap_poisoned_folio(struct folio *folio, enum ttu_flags ttu) static bool hwpoison_user_mappings(struct folio *folio, struct page *p, unsigned long pfn, int flags) { - enum ttu_flags ttu = TTU_IGNORE_MLOCK | TTU_SYNC | TTU_HWPOISON; - struct address_space *mapping; LIST_HEAD(tokill); bool unmap_success; int forcekill; @@ -1613,29 +1639,6 @@ static bool hwpoison_user_mappings(struct folio *folio, struct page *p, if (!folio_mapped(folio)) return true; - if (folio_test_swapcache(folio)) { - pr_err("%#lx: keeping poisoned page in swap cache\n", pfn); - ttu &= ~TTU_HWPOISON; - } - - /* - * Propagate the dirty bit from PTEs to struct page first, because we - * need this to decide if we should kill or just drop the page. - * XXX: the dirty test could be racy: set_page_dirty() may not always - * be called inside page lock (it's recommended but not enforced). - */ - mapping = folio_mapping(folio); - if (!(flags & MF_MUST_KILL) && !folio_test_dirty(folio) && mapping && - mapping_can_writeback(mapping)) { - if (folio_mkclean(folio)) { - folio_set_dirty(folio); - } else { - ttu &= ~TTU_HWPOISON; - pr_info("%#lx: corrupted page was clean: dropped without side effects\n", - pfn); - } - } - /* * First collect all the processes that have the page * mapped in dirty form. This has to be done before try_to_unmap, @@ -1643,9 +1646,7 @@ static bool hwpoison_user_mappings(struct folio *folio, struct page *p, */ collect_procs(folio, p, &tokill, flags & MF_ACTION_REQUIRED); - unmap_poisoned_folio(folio, ttu); - - unmap_success = !folio_mapped(folio); + unmap_success = !unmap_poisoned_folio(folio, pfn, flags & MF_MUST_KILL); if (!unmap_success) pr_err("%#lx: failed to unmap page (folio mapcount=%d)\n", pfn, folio_mapcount(folio)); diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index c43b4e7fb298..3de661e57e92 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1806,7 +1806,8 @@ static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn) if (WARN_ON(folio_test_lru(folio))) folio_isolate_lru(folio); if (folio_mapped(folio)) - unmap_poisoned_folio(folio, TTU_IGNORE_MLOCK); + unmap_poisoned_folio(folio, pfn, false); + continue; }