mirror of https://github.com/torvalds/linux.git
mm/memory-failure: remove the selection of RAS
commit 97f0b13452 ("tracing: add trace event for
memory-failure") introduces the selection of RAS in memory-failure. This
commit is just a tracing feature; in reality, there is no dependency
between memory-failure and RAS. RAS increases the size of the bzImage
image by 8k, which is very valuable for embedded devices.
Move the memory-failure traceing code from ras_event.h to
memory-failure.h and remove the selection of RAS.
Link: https://lkml.kernel.org/r/20251119095943.67125-1-xieyuanbin1@huawei.com
Signed-off-by: Xie Yuanbin <xieyuanbin1@huawei.com>
Acked-by: David Hildenbrand (Red Hat) <david@kernel.org>
Acked-by: Miaohe Lin <linmiaohe@huawei.com>
Cc: Borislav Petkov <bp@alien8.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
519912bdae
commit
31807483d3
|
|
@ -11560,6 +11560,7 @@ R: Naoya Horiguchi <nao.horiguchi@gmail.com>
|
|||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
F: include/linux/memory-failure.h
|
||||
F: include/trace/events/memory-failure.h
|
||||
F: mm/hwpoison-inject.c
|
||||
F: mm/memory-failure.c
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@
|
|||
#include <linux/pci.h>
|
||||
#include <linux/aer.h>
|
||||
#include <linux/cper.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
/*
|
||||
* MCE Extended Error Log trace event
|
||||
|
|
@ -339,92 +338,6 @@ TRACE_EVENT(aer_event,
|
|||
"Not available")
|
||||
);
|
||||
#endif /* CONFIG_PCIEAER */
|
||||
|
||||
/*
|
||||
* memory-failure recovery action result event
|
||||
*
|
||||
* unsigned long pfn - Page Frame Number of the corrupted page
|
||||
* int type - Page types of the corrupted page
|
||||
* int result - Result of recovery action
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_MEMORY_FAILURE
|
||||
#define MF_ACTION_RESULT \
|
||||
EM ( MF_IGNORED, "Ignored" ) \
|
||||
EM ( MF_FAILED, "Failed" ) \
|
||||
EM ( MF_DELAYED, "Delayed" ) \
|
||||
EMe ( MF_RECOVERED, "Recovered" )
|
||||
|
||||
#define MF_PAGE_TYPE \
|
||||
EM ( MF_MSG_KERNEL, "reserved kernel page" ) \
|
||||
EM ( MF_MSG_KERNEL_HIGH_ORDER, "high-order kernel page" ) \
|
||||
EM ( MF_MSG_HUGE, "huge page" ) \
|
||||
EM ( MF_MSG_FREE_HUGE, "free huge page" ) \
|
||||
EM ( MF_MSG_GET_HWPOISON, "get hwpoison page" ) \
|
||||
EM ( MF_MSG_UNMAP_FAILED, "unmapping failed page" ) \
|
||||
EM ( MF_MSG_DIRTY_SWAPCACHE, "dirty swapcache page" ) \
|
||||
EM ( MF_MSG_CLEAN_SWAPCACHE, "clean swapcache page" ) \
|
||||
EM ( MF_MSG_DIRTY_MLOCKED_LRU, "dirty mlocked LRU page" ) \
|
||||
EM ( MF_MSG_CLEAN_MLOCKED_LRU, "clean mlocked LRU page" ) \
|
||||
EM ( MF_MSG_DIRTY_UNEVICTABLE_LRU, "dirty unevictable LRU page" ) \
|
||||
EM ( MF_MSG_CLEAN_UNEVICTABLE_LRU, "clean unevictable LRU page" ) \
|
||||
EM ( MF_MSG_DIRTY_LRU, "dirty LRU page" ) \
|
||||
EM ( MF_MSG_CLEAN_LRU, "clean LRU page" ) \
|
||||
EM ( MF_MSG_TRUNCATED_LRU, "already truncated LRU page" ) \
|
||||
EM ( MF_MSG_BUDDY, "free buddy page" ) \
|
||||
EM ( MF_MSG_DAX, "dax page" ) \
|
||||
EM ( MF_MSG_UNSPLIT_THP, "unsplit thp" ) \
|
||||
EM ( MF_MSG_ALREADY_POISONED, "already poisoned" ) \
|
||||
EM ( MF_MSG_PFN_MAP, "non struct page pfn" ) \
|
||||
EMe ( MF_MSG_UNKNOWN, "unknown page" )
|
||||
|
||||
/*
|
||||
* First define the enums in MM_ACTION_RESULT to be exported to userspace
|
||||
* via TRACE_DEFINE_ENUM().
|
||||
*/
|
||||
#undef EM
|
||||
#undef EMe
|
||||
#define EM(a, b) TRACE_DEFINE_ENUM(a);
|
||||
#define EMe(a, b) TRACE_DEFINE_ENUM(a);
|
||||
|
||||
MF_ACTION_RESULT
|
||||
MF_PAGE_TYPE
|
||||
|
||||
/*
|
||||
* Now redefine the EM() and EMe() macros to map the enums to the strings
|
||||
* that will be printed in the output.
|
||||
*/
|
||||
#undef EM
|
||||
#undef EMe
|
||||
#define EM(a, b) { a, b },
|
||||
#define EMe(a, b) { a, b }
|
||||
|
||||
TRACE_EVENT(memory_failure_event,
|
||||
TP_PROTO(unsigned long pfn,
|
||||
int type,
|
||||
int result),
|
||||
|
||||
TP_ARGS(pfn, type, result),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned long, pfn)
|
||||
__field(int, type)
|
||||
__field(int, result)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->pfn = pfn;
|
||||
__entry->type = type;
|
||||
__entry->result = result;
|
||||
),
|
||||
|
||||
TP_printk("pfn %#lx: recovery action for %s: %s",
|
||||
__entry->pfn,
|
||||
__print_symbolic(__entry->type, MF_PAGE_TYPE),
|
||||
__print_symbolic(__entry->result, MF_ACTION_RESULT)
|
||||
)
|
||||
);
|
||||
#endif /* CONFIG_MEMORY_FAILURE */
|
||||
#endif /* _TRACE_HW_EVENT_MC_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
|
|
|||
|
|
@ -0,0 +1,98 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM memory_failure
|
||||
#define TRACE_INCLUDE_FILE memory-failure
|
||||
|
||||
#if !defined(_TRACE_MEMORY_FAILURE_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_MEMORY_FAILURE_H
|
||||
|
||||
#include <linux/tracepoint.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
/*
|
||||
* memory-failure recovery action result event
|
||||
*
|
||||
* unsigned long pfn - Page Frame Number of the corrupted page
|
||||
* int type - Page types of the corrupted page
|
||||
* int result - Result of recovery action
|
||||
*/
|
||||
|
||||
#define MF_ACTION_RESULT \
|
||||
EM ( MF_IGNORED, "Ignored" ) \
|
||||
EM ( MF_FAILED, "Failed" ) \
|
||||
EM ( MF_DELAYED, "Delayed" ) \
|
||||
EMe ( MF_RECOVERED, "Recovered" )
|
||||
|
||||
#define MF_PAGE_TYPE \
|
||||
EM ( MF_MSG_KERNEL, "reserved kernel page" ) \
|
||||
EM ( MF_MSG_KERNEL_HIGH_ORDER, "high-order kernel page" ) \
|
||||
EM ( MF_MSG_HUGE, "huge page" ) \
|
||||
EM ( MF_MSG_FREE_HUGE, "free huge page" ) \
|
||||
EM ( MF_MSG_GET_HWPOISON, "get hwpoison page" ) \
|
||||
EM ( MF_MSG_UNMAP_FAILED, "unmapping failed page" ) \
|
||||
EM ( MF_MSG_DIRTY_SWAPCACHE, "dirty swapcache page" ) \
|
||||
EM ( MF_MSG_CLEAN_SWAPCACHE, "clean swapcache page" ) \
|
||||
EM ( MF_MSG_DIRTY_MLOCKED_LRU, "dirty mlocked LRU page" ) \
|
||||
EM ( MF_MSG_CLEAN_MLOCKED_LRU, "clean mlocked LRU page" ) \
|
||||
EM ( MF_MSG_DIRTY_UNEVICTABLE_LRU, "dirty unevictable LRU page" ) \
|
||||
EM ( MF_MSG_CLEAN_UNEVICTABLE_LRU, "clean unevictable LRU page" ) \
|
||||
EM ( MF_MSG_DIRTY_LRU, "dirty LRU page" ) \
|
||||
EM ( MF_MSG_CLEAN_LRU, "clean LRU page" ) \
|
||||
EM ( MF_MSG_TRUNCATED_LRU, "already truncated LRU page" ) \
|
||||
EM ( MF_MSG_BUDDY, "free buddy page" ) \
|
||||
EM ( MF_MSG_DAX, "dax page" ) \
|
||||
EM ( MF_MSG_UNSPLIT_THP, "unsplit thp" ) \
|
||||
EM ( MF_MSG_ALREADY_POISONED, "already poisoned" ) \
|
||||
EM ( MF_MSG_PFN_MAP, "non struct page pfn" ) \
|
||||
EMe ( MF_MSG_UNKNOWN, "unknown page" )
|
||||
|
||||
/*
|
||||
* First define the enums in MM_ACTION_RESULT to be exported to userspace
|
||||
* via TRACE_DEFINE_ENUM().
|
||||
*/
|
||||
#undef EM
|
||||
#undef EMe
|
||||
#define EM(a, b) TRACE_DEFINE_ENUM(a);
|
||||
#define EMe(a, b) TRACE_DEFINE_ENUM(a);
|
||||
|
||||
MF_ACTION_RESULT
|
||||
MF_PAGE_TYPE
|
||||
|
||||
/*
|
||||
* Now redefine the EM() and EMe() macros to map the enums to the strings
|
||||
* that will be printed in the output.
|
||||
*/
|
||||
#undef EM
|
||||
#undef EMe
|
||||
#define EM(a, b) { a, b },
|
||||
#define EMe(a, b) { a, b }
|
||||
|
||||
TRACE_EVENT(memory_failure_event,
|
||||
TP_PROTO(unsigned long pfn,
|
||||
int type,
|
||||
int result),
|
||||
|
||||
TP_ARGS(pfn, type, result),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned long, pfn)
|
||||
__field(int, type)
|
||||
__field(int, result)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->pfn = pfn;
|
||||
__entry->type = type;
|
||||
__entry->result = result;
|
||||
),
|
||||
|
||||
TP_printk("pfn %#lx: recovery action for %s: %s",
|
||||
__entry->pfn,
|
||||
__print_symbolic(__entry->type, MF_PAGE_TYPE),
|
||||
__print_symbolic(__entry->result, MF_ACTION_RESULT)
|
||||
)
|
||||
);
|
||||
#endif /* _TRACE_MEMORY_FAILURE_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
||||
|
|
@ -740,7 +740,6 @@ config MEMORY_FAILURE
|
|||
depends on MMU
|
||||
depends on ARCH_SUPPORTS_MEMORY_FAILURE
|
||||
bool "Enable recovery from hardware memory errors"
|
||||
select RAS
|
||||
select INTERVAL_TREE
|
||||
help
|
||||
Enables code to recover from some memory failures on systems
|
||||
|
|
|
|||
|
|
@ -61,9 +61,12 @@
|
|||
#include <linux/pagewalk.h>
|
||||
#include <linux/shmem_fs.h>
|
||||
#include <linux/sysctl.h>
|
||||
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/memory-failure.h>
|
||||
|
||||
#include "swap.h"
|
||||
#include "internal.h"
|
||||
#include "ras/ras_event.h"
|
||||
|
||||
static int sysctl_memory_failure_early_kill __read_mostly;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue