Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc: pSeries reconfig notifier error injection module

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>

authored by

Akinobu Mita and committed by
Linus Torvalds
08dfb4dd 9579f5bd

+70
+17
lib/Kconfig.debug
··· 1166 1166 1167 1167 If unsure, say N. 1168 1168 1169 + config PSERIES_RECONFIG_NOTIFIER_ERROR_INJECT 1170 + tristate "pSeries reconfig notifier error injection module" 1171 + depends on PPC_PSERIES && NOTIFIER_ERROR_INJECTION 1172 + help 1173 + This option provides the ability to inject artifical errors to 1174 + pSeries reconfig notifier chain callbacks. It is controlled 1175 + through debugfs interface under 1176 + /sys/kernel/debug/notifier-error-inject/pSeries-reconfig/ 1177 + 1178 + If the notifier call chain should be failed with some events 1179 + notified, write the error code to "actions/<notifier event>/error". 1180 + 1181 + To compile this code as a module, choose M here: the module will 1182 + be called memory-notifier-error-inject. 1183 + 1184 + If unsure, say N. 1185 + 1169 1186 config FAULT_INJECTION 1170 1187 bool "Fault-injection framework" 1171 1188 depends on DEBUG_KERNEL
+2
lib/Makefile
··· 94 94 obj-$(CONFIG_CPU_NOTIFIER_ERROR_INJECT) += cpu-notifier-error-inject.o 95 95 obj-$(CONFIG_PM_NOTIFIER_ERROR_INJECT) += pm-notifier-error-inject.o 96 96 obj-$(CONFIG_MEMORY_NOTIFIER_ERROR_INJECT) += memory-notifier-error-inject.o 97 + obj-$(CONFIG_PSERIES_RECONFIG_NOTIFIER_ERROR_INJECT) += \ 98 + pSeries-reconfig-notifier-error-inject.o 97 99 98 100 lib-$(CONFIG_GENERIC_BUG) += bug.o 99 101
+51
lib/pSeries-reconfig-notifier-error-inject.c
··· 1 + #include <linux/kernel.h> 2 + #include <linux/module.h> 3 + 4 + #include <asm/pSeries_reconfig.h> 5 + 6 + #include "notifier-error-inject.h" 7 + 8 + static int priority; 9 + module_param(priority, int, 0); 10 + MODULE_PARM_DESC(priority, "specify pSeries reconfig notifier priority"); 11 + 12 + static struct notifier_err_inject reconfig_err_inject = { 13 + .actions = { 14 + { NOTIFIER_ERR_INJECT_ACTION(PSERIES_RECONFIG_ADD) }, 15 + { NOTIFIER_ERR_INJECT_ACTION(PSERIES_RECONFIG_REMOVE) }, 16 + { NOTIFIER_ERR_INJECT_ACTION(PSERIES_DRCONF_MEM_ADD) }, 17 + { NOTIFIER_ERR_INJECT_ACTION(PSERIES_DRCONF_MEM_REMOVE) }, 18 + {} 19 + } 20 + }; 21 + 22 + static struct dentry *dir; 23 + 24 + static int err_inject_init(void) 25 + { 26 + int err; 27 + 28 + dir = notifier_err_inject_init("pSeries-reconfig", 29 + notifier_err_inject_dir, &reconfig_err_inject, priority); 30 + if (IS_ERR(dir)) 31 + return PTR_ERR(dir); 32 + 33 + err = pSeries_reconfig_notifier_register(&reconfig_err_inject.nb); 34 + if (err) 35 + debugfs_remove_recursive(dir); 36 + 37 + return err; 38 + } 39 + 40 + static void err_inject_exit(void) 41 + { 42 + pSeries_reconfig_notifier_unregister(&reconfig_err_inject.nb); 43 + debugfs_remove_recursive(dir); 44 + } 45 + 46 + module_init(err_inject_init); 47 + module_exit(err_inject_exit); 48 + 49 + MODULE_DESCRIPTION("pSeries reconfig notifier error injection module"); 50 + MODULE_LICENSE("GPL"); 51 + MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>");