|  | 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/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. |