mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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