lkml.org 
[lkml]   [2009]   [Jun]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 14/15] HWPOISON: Add simple debugfs interface to inject hwpoison on arbitary PFNs
    From: Andi Kleen <ak@linux.intel.com>

    Useful for some testing scenarios, although specific testing is often
    done better through MADV_POISON

    This can be done with the x86 level MCE injector too, but this interface
    allows it to do independently from low level x86 changes.

    Open issues:
    Should be disabled for cgroups.

    Signed-off-by: Andi Kleen <ak@linux.intel.com>

    ---
    mm/Kconfig | 4 ++++
    mm/Makefile | 1 +
    mm/hwpoison-inject.c | 41 +++++++++++++++++++++++++++++++++++++++++
    3 files changed, 46 insertions(+)

    --- /dev/null
    +++ sound-2.6/mm/hwpoison-inject.c
    @@ -0,0 +1,41 @@
    +/* Inject a hwpoison memory failure on a arbitary pfn */
    +#include <linux/module.h>
    +#include <linux/debugfs.h>
    +#include <linux/kernel.h>
    +#include <linux/mm.h>
    +
    +static struct dentry *hwpoison_dir, *corrupt_pfn;
    +
    +static int hwpoison_inject(void *data, u64 val)
    +{
    + if (!capable(CAP_SYS_ADMIN))
    + return -EPERM;
    + printk(KERN_INFO "Injecting memory failure at pfn %Lx\n", val);
    + memory_failure(val, 18);
    + return 0;
    +}
    +
    +DEFINE_SIMPLE_ATTRIBUTE(hwpoison_fops, NULL, hwpoison_inject, "%lli\n");
    +
    +static void pfn_inject_exit(void)
    +{
    + if (hwpoison_dir)
    + debugfs_remove_recursive(hwpoison_dir);
    +}
    +
    +static int pfn_inject_init(void)
    +{
    + hwpoison_dir = debugfs_create_dir("hwpoison", NULL);
    + if (hwpoison_dir == NULL)
    + return -ENOMEM;
    + corrupt_pfn = debugfs_create_file("corrupt-pfn", 0600, hwpoison_dir,
    + NULL, &hwpoison_fops);
    + if (corrupt_pfn == NULL) {
    + pfn_inject_exit();
    + return -ENOMEM;
    + }
    + return 0;
    +}
    +
    +module_init(pfn_inject_init);
    +module_exit(pfn_inject_exit);
    --- sound-2.6.orig/mm/Kconfig
    +++ sound-2.6/mm/Kconfig
    @@ -242,6 +242,10 @@ config KSM
    config MEMORY_FAILURE
    bool

    +config HWPOISON_INJECT
    + tristate "Hardware poison pages injector"
    + depends on MEMORY_FAILURE && DEBUG_KERNEL
    +
    config NOMMU_INITIAL_TRIM_EXCESS
    int "Turn on mmap() excess space trimming before booting"
    depends on !MMU
    --- sound-2.6.orig/mm/Makefile
    +++ sound-2.6/mm/Makefile
    @@ -43,5 +43,6 @@ endif
    obj-$(CONFIG_QUICKLIST) += quicklist.o
    obj-$(CONFIG_CGROUP_MEM_RES_CTLR) += memcontrol.o page_cgroup.o
    obj-$(CONFIG_MEMORY_FAILURE) += memory-failure.o
    +obj-$(CONFIG_HWPOISON_INJECT) += hwpoison-inject.o
    obj-$(CONFIG_DEBUG_KMEMLEAK) += kmemleak.o
    obj-$(CONFIG_DEBUG_KMEMLEAK_TEST) += kmemleak-test.o
    --



    \
     
     \ /
      Last update: 2009-06-20 05:25    [W:0.028 / U:58.440 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site