aboutsummaryrefslogtreecommitdiff
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)
if (!dentry)
goto fail;
+ dentry = debugfs_create_u32("corrupt-filter-enable", 0600,
+ hwpoison_dir, &hwpoison_filter_enable);
+ if (!dentry)
+ goto fail;
+
dentry = debugfs_create_u32("corrupt-filter-dev-major", 0600,
hwpoison_dir, &hwpoison_filter_dev_major);
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;
extern u64 hwpoison_filter_flags_mask;
extern u64 hwpoison_filter_flags_value;
extern u64 hwpoison_filter_memcg;
+extern 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;
atomic_long_t mce_bad_pages __read_mostly = ATOMIC_LONG_INIT(0);
+u32 hwpoison_filter_enable = 0;
u32 hwpoison_filter_dev_major = ~0U;
u32 hwpoison_filter_dev_minor = ~0U;
u64 hwpoison_filter_flags_mask;
u64 hwpoison_filter_flags_value;
+EXPORT_SYMBOL_GPL(hwpoison_filter_enable);
EXPORT_SYMBOL_GPL(hwpoison_filter_dev_major);
EXPORT_SYMBOL_GPL(hwpoison_filter_dev_minor);
EXPORT_SYMBOL_GPL(hwpoison_filter_flags_mask);
@@ -145,6 +147,9 @@ static int hwpoison_filter_task(struct page *p) { return 0; }
int hwpoison_filter(struct page *p)
{
+ if (!hwpoison_filter_enable)
+ return 0;
+
if (hwpoison_filter_dev(p))
return -EINVAL;