| Notifier error injection | |
| ======================== | |
| Notifier error injection provides the ability to inject artificial errors to | |
| specified notifier chain callbacks. It is useful to test the error handling of | |
| notifier call chain failures which is rarely executed. There are kernel | |
| modules that can be used to test the following notifiers. | |
| * PM notifier | |
| * Memory hotplug notifier | |
| * powerpc pSeries reconfig notifier | |
| * Netdevice notifier | |
| PM notifier error injection module | |
| ---------------------------------- | |
| This feature is controlled through debugfs interface | |
| /sys/kernel/debug/notifier-error-inject/pm/actions/<notifier event>/error | |
| Possible PM notifier events to be failed are: | |
| * PM_HIBERNATION_PREPARE | |
| * PM_SUSPEND_PREPARE | |
| * PM_RESTORE_PREPARE | |
| Example: Inject PM suspend error (-12 = -ENOMEM):: | |
| # cd /sys/kernel/debug/notifier-error-inject/pm/ | |
| # echo -12 > actions/PM_SUSPEND_PREPARE/error | |
| # echo mem > /sys/power/state | |
| bash: echo: write error: Cannot allocate memory | |
| Memory hotplug notifier error injection module | |
| ---------------------------------------------- | |
| This feature is controlled through debugfs interface | |
| /sys/kernel/debug/notifier-error-inject/memory/actions/<notifier event>/error | |
| Possible memory notifier events to be failed are: | |
| * MEM_GOING_ONLINE | |
| * MEM_GOING_OFFLINE | |
| Example: Inject memory hotplug offline error (-12 == -ENOMEM):: | |
| # cd /sys/kernel/debug/notifier-error-inject/memory | |
| # echo -12 > actions/MEM_GOING_OFFLINE/error | |
| # echo offline > /sys/devices/system/memory/memoryXXX/state | |
| bash: echo: write error: Cannot allocate memory | |
| powerpc pSeries reconfig notifier error injection module | |
| -------------------------------------------------------- | |
| This feature is controlled through debugfs interface | |
| /sys/kernel/debug/notifier-error-inject/pSeries-reconfig/actions/<notifier event>/error | |
| Possible pSeries reconfig notifier events to be failed are: | |
| * PSERIES_RECONFIG_ADD | |
| * PSERIES_RECONFIG_REMOVE | |
| * PSERIES_DRCONF_MEM_ADD | |
| * PSERIES_DRCONF_MEM_REMOVE | |
| Netdevice notifier error injection module | |
| ---------------------------------------------- | |
| This feature is controlled through debugfs interface | |
| /sys/kernel/debug/notifier-error-inject/netdev/actions/<notifier event>/error | |
| Netdevice notifier events which can be failed are: | |
| * NETDEV_REGISTER | |
| * NETDEV_CHANGEMTU | |
| * NETDEV_CHANGENAME | |
| * NETDEV_PRE_UP | |
| * NETDEV_PRE_TYPE_CHANGE | |
| * NETDEV_POST_INIT | |
| * NETDEV_PRECHANGEMTU | |
| * NETDEV_PRECHANGEUPPER | |
| * NETDEV_CHANGEUPPER | |
| Example: Inject netdevice mtu change error (-22 == -EINVAL):: | |
| # cd /sys/kernel/debug/notifier-error-inject/netdev | |
| # echo -22 > actions/NETDEV_CHANGEMTU/error | |
| # ip link set eth0 mtu 1024 | |
| RTNETLINK answers: Invalid argument | |
| For more usage examples | |
| ----------------------- | |
| There are tools/testing/selftests using the notifier error injection features | |
| for CPU and memory notifiers. | |
| * tools/testing/selftests/cpu-hotplug/cpu-on-off-test.sh | |
| * tools/testing/selftests/memory-hotplug/mem-on-off-test.sh | |
| These scripts first do simple online and offline tests and then do fault | |
| injection tests if notifier error injection module is available. |