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//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//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//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//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/on-off-test.sh * tools/testing/selftests/memory-hotplug/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.