aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/hwpoison-inject.c5
-rw-r--r--mm/internal.h1
-rw-r--r--mm/memory-failure.c5
3 files changed, 11 insertions, 0 deletions
diff --git a/mm/hwpoison-inject.c b/mm/hwpoison-inject.c
index c838735ac31d..c597f46ac18a 100644
--- a/mm/hwpoison-inject.c
+++ b/mm/hwpoison-inject.c
@@ -92,6 +92,11 @@ static int pfn_inject_init(void)
92 if (!dentry) 92 if (!dentry)
93 goto fail; 93 goto fail;
94 94
95 dentry = debugfs_create_u32("corrupt-filter-enable", 0600,
96 hwpoison_dir, &hwpoison_filter_enable);
97 if (!dentry)
98 goto fail;
99
95 dentry = debugfs_create_u32("corrupt-filter-dev-major", 0600, 100 dentry = debugfs_create_u32("corrupt-filter-dev-major", 0600,
96 hwpoison_dir, &hwpoison_filter_dev_major); 101 hwpoison_dir, &hwpoison_filter_dev_major);
97 if (!dentry) 102 if (!dentry)
diff --git a/mm/internal.h b/mm/internal.h
index 5a6761bea6a6..6a697bb97fc5 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -258,3 +258,4 @@ extern u32 hwpoison_filter_dev_minor;
258extern u64 hwpoison_filter_flags_mask; 258extern u64 hwpoison_filter_flags_mask;
259extern u64 hwpoison_filter_flags_value; 259extern u64 hwpoison_filter_flags_value;
260extern u64 hwpoison_filter_memcg; 260extern u64 hwpoison_filter_memcg;
261extern u32 hwpoison_filter_enable;
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 117ef1598469..2d5f1223bf4d 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -49,10 +49,12 @@ int sysctl_memory_failure_recovery __read_mostly = 1;
49 49
50atomic_long_t mce_bad_pages __read_mostly = ATOMIC_LONG_INIT(0); 50atomic_long_t mce_bad_pages __read_mostly = ATOMIC_LONG_INIT(0);
51 51
52u32 hwpoison_filter_enable = 0;
52u32 hwpoison_filter_dev_major = ~0U; 53u32 hwpoison_filter_dev_major = ~0U;
53u32 hwpoison_filter_dev_minor = ~0U; 54u32 hwpoison_filter_dev_minor = ~0U;
54u64 hwpoison_filter_flags_mask; 55u64 hwpoison_filter_flags_mask;
55u64 hwpoison_filter_flags_value; 56u64 hwpoison_filter_flags_value;
57EXPORT_SYMBOL_GPL(hwpoison_filter_enable);
56EXPORT_SYMBOL_GPL(hwpoison_filter_dev_major); 58EXPORT_SYMBOL_GPL(hwpoison_filter_dev_major);
57EXPORT_SYMBOL_GPL(hwpoison_filter_dev_minor); 59EXPORT_SYMBOL_GPL(hwpoison_filter_dev_minor);
58EXPORT_SYMBOL_GPL(hwpoison_filter_flags_mask); 60EXPORT_SYMBOL_GPL(hwpoison_filter_flags_mask);
@@ -145,6 +147,9 @@ static int hwpoison_filter_task(struct page *p) { return 0; }
145 147
146int hwpoison_filter(struct page *p) 148int hwpoison_filter(struct page *p)
147{ 149{
150 if (!hwpoison_filter_enable)
151 return 0;
152
148 if (hwpoison_filter_dev(p)) 153 if (hwpoison_filter_dev(p))
149 return -EINVAL; 154 return -EINVAL;
150 155