Skip to content

Commit

Permalink
powerpc: pSeries reconfig notifier error injection module
Browse files Browse the repository at this point in the history
This provides the ability to inject artifical errors to pSeries reconfig
notifier chain callbacks.  It is controlled through debugfs interface
under /sys/kernel/debug/notifier-error-inject/pSeries-reconfig

If the notifier call chain should be failed with some events
notified, write the error code to "actions/<notifier event>/error".

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Greg KH <greg@kroah.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Michael Ellerman <michael@ellerman.id.au>
Cc: Dave Jones <davej@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Akinobu Mita authored and Linus Torvalds committed Jul 31, 2012
1 parent 9579f5b commit 08dfb4d
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 0 deletions.
17 changes: 17 additions & 0 deletions lib/Kconfig.debug
Original file line number Diff line number Diff line change
Expand Up @@ -1166,6 +1166,23 @@ config MEMORY_NOTIFIER_ERROR_INJECT

If unsure, say N.

config PSERIES_RECONFIG_NOTIFIER_ERROR_INJECT
tristate "pSeries reconfig notifier error injection module"
depends on PPC_PSERIES && NOTIFIER_ERROR_INJECTION
help
This option provides the ability to inject artifical errors to
pSeries reconfig notifier chain callbacks. It is controlled
through debugfs interface under
/sys/kernel/debug/notifier-error-inject/pSeries-reconfig/

If the notifier call chain should be failed with some events
notified, write the error code to "actions/<notifier event>/error".

To compile this code as a module, choose M here: the module will
be called memory-notifier-error-inject.

If unsure, say N.

config FAULT_INJECTION
bool "Fault-injection framework"
depends on DEBUG_KERNEL
Expand Down
2 changes: 2 additions & 0 deletions lib/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ obj-$(CONFIG_NOTIFIER_ERROR_INJECTION) += notifier-error-inject.o
obj-$(CONFIG_CPU_NOTIFIER_ERROR_INJECT) += cpu-notifier-error-inject.o
obj-$(CONFIG_PM_NOTIFIER_ERROR_INJECT) += pm-notifier-error-inject.o
obj-$(CONFIG_MEMORY_NOTIFIER_ERROR_INJECT) += memory-notifier-error-inject.o
obj-$(CONFIG_PSERIES_RECONFIG_NOTIFIER_ERROR_INJECT) += \
pSeries-reconfig-notifier-error-inject.o

lib-$(CONFIG_GENERIC_BUG) += bug.o

Expand Down
51 changes: 51 additions & 0 deletions lib/pSeries-reconfig-notifier-error-inject.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#include <linux/kernel.h>
#include <linux/module.h>

#include <asm/pSeries_reconfig.h>

#include "notifier-error-inject.h"

static int priority;
module_param(priority, int, 0);
MODULE_PARM_DESC(priority, "specify pSeries reconfig notifier priority");

static struct notifier_err_inject reconfig_err_inject = {
.actions = {
{ NOTIFIER_ERR_INJECT_ACTION(PSERIES_RECONFIG_ADD) },
{ NOTIFIER_ERR_INJECT_ACTION(PSERIES_RECONFIG_REMOVE) },
{ NOTIFIER_ERR_INJECT_ACTION(PSERIES_DRCONF_MEM_ADD) },
{ NOTIFIER_ERR_INJECT_ACTION(PSERIES_DRCONF_MEM_REMOVE) },
{}
}
};

static struct dentry *dir;

static int err_inject_init(void)
{
int err;

dir = notifier_err_inject_init("pSeries-reconfig",
notifier_err_inject_dir, &reconfig_err_inject, priority);
if (IS_ERR(dir))
return PTR_ERR(dir);

err = pSeries_reconfig_notifier_register(&reconfig_err_inject.nb);
if (err)
debugfs_remove_recursive(dir);

return err;
}

static void err_inject_exit(void)
{
pSeries_reconfig_notifier_unregister(&reconfig_err_inject.nb);
debugfs_remove_recursive(dir);
}

module_init(err_inject_init);
module_exit(err_inject_exit);

MODULE_DESCRIPTION("pSeries reconfig notifier error injection module");
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>");

0 comments on commit 08dfb4d

Please sign in to comment.