Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mm,hwpoison: introduce MF_MSG_UNSPLIT_THP

memory_failure() is supposed to call action_result() when it handles a
memory error event, but there's one missing case. So let's add it.

I find that include/ras/ras_event.h has some other MF_MSG_* undefined, so
this patch also adds them.

Signed-off-by: Naoya Horiguchi <naoya.horiguchi@nec.com>
Signed-off-by: Oscar Salvador <osalvador@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Cc: Aristeu Rozanski <aris@ruivo.org>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Dmitry Yakunin <zeil@yandex-team.ru>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Mike Kravetz <mike.kravetz@oracle.com>
Cc: Oscar Salvador <osalvador@suse.com>
Cc: Qian Cai <cai@lca.pw>
Cc: Tony Luck <tony.luck@intel.com>
Link: https://lkml.kernel.org/r/20200922135650.1634-13-osalvador@suse.de
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Naoya Horiguchi and committed by
Linus Torvalds
5d1fd5dc 5a2ffca3

+8 -1
+1
include/linux/mm.h
··· 3064 3064 MF_MSG_BUDDY, 3065 3065 MF_MSG_BUDDY_2ND, 3066 3066 MF_MSG_DAX, 3067 + MF_MSG_UNSPLIT_THP, 3067 3068 MF_MSG_UNKNOWN, 3068 3069 }; 3069 3070
+3
include/ras/ras_event.h
··· 361 361 EM ( MF_MSG_POISONED_HUGE, "huge page already hardware poisoned" ) \ 362 362 EM ( MF_MSG_HUGE, "huge page" ) \ 363 363 EM ( MF_MSG_FREE_HUGE, "free huge page" ) \ 364 + EM ( MF_MSG_NON_PMD_HUGE, "non-pmd-sized huge page" ) \ 364 365 EM ( MF_MSG_UNMAP_FAILED, "unmapping failed page" ) \ 365 366 EM ( MF_MSG_DIRTY_SWAPCACHE, "dirty swapcache page" ) \ 366 367 EM ( MF_MSG_CLEAN_SWAPCACHE, "clean swapcache page" ) \ ··· 374 373 EM ( MF_MSG_TRUNCATED_LRU, "already truncated LRU page" ) \ 375 374 EM ( MF_MSG_BUDDY, "free buddy page" ) \ 376 375 EM ( MF_MSG_BUDDY_2ND, "free buddy page (2nd try)" ) \ 376 + EM ( MF_MSG_DAX, "dax page" ) \ 377 + EM ( MF_MSG_UNSPLIT_THP, "unsplit thp" ) \ 377 378 EMe ( MF_MSG_UNKNOWN, "unknown page" ) 378 379 379 380 /*
+4 -1
mm/memory-failure.c
··· 582 582 [MF_MSG_BUDDY] = "free buddy page", 583 583 [MF_MSG_BUDDY_2ND] = "free buddy page (2nd try)", 584 584 [MF_MSG_DAX] = "dax page", 585 + [MF_MSG_UNSPLIT_THP] = "unsplit thp", 585 586 [MF_MSG_UNKNOWN] = "unknown page", 586 587 }; 587 588 ··· 1371 1370 } 1372 1371 1373 1372 if (PageTransHuge(hpage)) { 1374 - if (try_to_split_thp_page(p, "Memory Failure") < 0) 1373 + if (try_to_split_thp_page(p, "Memory Failure") < 0) { 1374 + action_result(pfn, MF_MSG_UNSPLIT_THP, MF_IGNORED); 1375 1375 return -EBUSY; 1376 + } 1376 1377 VM_BUG_ON_PAGE(!page_count(p), p); 1377 1378 } 1378 1379