forked from mirrors/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>
This commit is contained in:
		
							parent
							
								
									5a2ffca3c2
								
							
						
					
					
						commit
						5d1fd5dc87
					
				
					 3 changed files with 8 additions and 1 deletions
				
			
		|  | @ -3064,6 +3064,7 @@ enum mf_action_page_type { | ||||||
| 	MF_MSG_BUDDY, | 	MF_MSG_BUDDY, | ||||||
| 	MF_MSG_BUDDY_2ND, | 	MF_MSG_BUDDY_2ND, | ||||||
| 	MF_MSG_DAX, | 	MF_MSG_DAX, | ||||||
|  | 	MF_MSG_UNSPLIT_THP, | ||||||
| 	MF_MSG_UNKNOWN, | 	MF_MSG_UNKNOWN, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -361,6 +361,7 @@ TRACE_EVENT(aer_event, | ||||||
| 	EM ( MF_MSG_POISONED_HUGE, "huge page already hardware poisoned" )	\ | 	EM ( MF_MSG_POISONED_HUGE, "huge page already hardware poisoned" )	\ | ||||||
| 	EM ( MF_MSG_HUGE, "huge page" )					\ | 	EM ( MF_MSG_HUGE, "huge page" )					\ | ||||||
| 	EM ( MF_MSG_FREE_HUGE, "free huge page" )			\ | 	EM ( MF_MSG_FREE_HUGE, "free huge page" )			\ | ||||||
|  | 	EM ( MF_MSG_NON_PMD_HUGE, "non-pmd-sized huge page" )		\ | ||||||
| 	EM ( MF_MSG_UNMAP_FAILED, "unmapping failed page" )		\ | 	EM ( MF_MSG_UNMAP_FAILED, "unmapping failed page" )		\ | ||||||
| 	EM ( MF_MSG_DIRTY_SWAPCACHE, "dirty swapcache page" )		\ | 	EM ( MF_MSG_DIRTY_SWAPCACHE, "dirty swapcache page" )		\ | ||||||
| 	EM ( MF_MSG_CLEAN_SWAPCACHE, "clean swapcache page" )		\ | 	EM ( MF_MSG_CLEAN_SWAPCACHE, "clean swapcache page" )		\ | ||||||
|  | @ -373,6 +374,8 @@ TRACE_EVENT(aer_event, | ||||||
| 	EM ( MF_MSG_TRUNCATED_LRU, "already truncated LRU page" )	\ | 	EM ( MF_MSG_TRUNCATED_LRU, "already truncated LRU page" )	\ | ||||||
| 	EM ( MF_MSG_BUDDY, "free buddy page" )				\ | 	EM ( MF_MSG_BUDDY, "free buddy page" )				\ | ||||||
| 	EM ( MF_MSG_BUDDY_2ND, "free buddy page (2nd try)" )		\ | 	EM ( MF_MSG_BUDDY_2ND, "free buddy page (2nd try)" )		\ | ||||||
|  | 	EM ( MF_MSG_DAX, "dax page" )					\ | ||||||
|  | 	EM ( MF_MSG_UNSPLIT_THP, "unsplit thp" )			\ | ||||||
| 	EMe ( MF_MSG_UNKNOWN, "unknown page" ) | 	EMe ( MF_MSG_UNKNOWN, "unknown page" ) | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  |  | ||||||
|  | @ -582,6 +582,7 @@ static const char * const action_page_types[] = { | ||||||
| 	[MF_MSG_BUDDY]			= "free buddy page", | 	[MF_MSG_BUDDY]			= "free buddy page", | ||||||
| 	[MF_MSG_BUDDY_2ND]		= "free buddy page (2nd try)", | 	[MF_MSG_BUDDY_2ND]		= "free buddy page (2nd try)", | ||||||
| 	[MF_MSG_DAX]			= "dax page", | 	[MF_MSG_DAX]			= "dax page", | ||||||
|  | 	[MF_MSG_UNSPLIT_THP]		= "unsplit thp", | ||||||
| 	[MF_MSG_UNKNOWN]		= "unknown page", | 	[MF_MSG_UNKNOWN]		= "unknown page", | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -1370,8 +1371,10 @@ int memory_failure(unsigned long pfn, int flags) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (PageTransHuge(hpage)) { | 	if (PageTransHuge(hpage)) { | ||||||
| 		if (try_to_split_thp_page(p, "Memory Failure") < 0) | 		if (try_to_split_thp_page(p, "Memory Failure") < 0) { | ||||||
|  | 			action_result(pfn, MF_MSG_UNSPLIT_THP, MF_IGNORED); | ||||||
| 			return -EBUSY; | 			return -EBUSY; | ||||||
|  | 		} | ||||||
| 		VM_BUG_ON_PAGE(!page_count(p), p); | 		VM_BUG_ON_PAGE(!page_count(p), p); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Naoya Horiguchi
						Naoya Horiguchi