Akinobu Mita | 8d43828 | 2012-07-30 14:43:02 -0700 | [diff] [blame] | 1 | Notifier error injection |
| 2 | ======================== |
| 3 | |
Masanari Iida | 4e79162a | 2012-11-08 21:57:35 +0900 | [diff] [blame] | 4 | Notifier error injection provides the ability to inject artificial errors to |
Akinobu Mita | 8d43828 | 2012-07-30 14:43:02 -0700 | [diff] [blame] | 5 | specified notifier chain callbacks. It is useful to test the error handling of |
| 6 | notifier call chain failures which is rarely executed. There are kernel |
| 7 | modules that can be used to test the following notifiers. |
| 8 | |
| 9 | * CPU notifier |
| 10 | * PM notifier |
| 11 | * Memory hotplug notifier |
| 12 | * powerpc pSeries reconfig notifier |
Nikolay Aleksandrov | 02fff96 | 2015-11-28 13:45:28 +0100 | [diff] [blame] | 13 | * Netdevice notifier |
Akinobu Mita | 8d43828 | 2012-07-30 14:43:02 -0700 | [diff] [blame] | 14 | |
| 15 | CPU notifier error injection module |
| 16 | ----------------------------------- |
| 17 | This feature can be used to test the error handling of the CPU notifiers by |
Masanari Iida | 4e79162a | 2012-11-08 21:57:35 +0900 | [diff] [blame] | 18 | injecting artificial errors to CPU notifier chain callbacks. |
Akinobu Mita | 8d43828 | 2012-07-30 14:43:02 -0700 | [diff] [blame] | 19 | |
| 20 | If the notifier call chain should be failed with some events notified, write |
| 21 | the error code to debugfs interface |
| 22 | /sys/kernel/debug/notifier-error-inject/cpu/actions/<notifier event>/error |
| 23 | |
| 24 | Possible CPU notifier events to be failed are: |
| 25 | |
| 26 | * CPU_UP_PREPARE |
| 27 | * CPU_UP_PREPARE_FROZEN |
| 28 | * CPU_DOWN_PREPARE |
| 29 | * CPU_DOWN_PREPARE_FROZEN |
| 30 | |
| 31 | Example1: Inject CPU offline error (-1 == -EPERM) |
| 32 | |
| 33 | # cd /sys/kernel/debug/notifier-error-inject/cpu |
| 34 | # echo -1 > actions/CPU_DOWN_PREPARE/error |
| 35 | # echo 0 > /sys/devices/system/cpu/cpu1/online |
| 36 | bash: echo: write error: Operation not permitted |
| 37 | |
| 38 | Example2: inject CPU online error (-2 == -ENOENT) |
| 39 | |
| 40 | # echo -2 > actions/CPU_UP_PREPARE/error |
| 41 | # echo 1 > /sys/devices/system/cpu/cpu1/online |
| 42 | bash: echo: write error: No such file or directory |
| 43 | |
| 44 | PM notifier error injection module |
| 45 | ---------------------------------- |
| 46 | This feature is controlled through debugfs interface |
| 47 | /sys/kernel/debug/notifier-error-inject/pm/actions/<notifier event>/error |
| 48 | |
| 49 | Possible PM notifier events to be failed are: |
| 50 | |
| 51 | * PM_HIBERNATION_PREPARE |
| 52 | * PM_SUSPEND_PREPARE |
| 53 | * PM_RESTORE_PREPARE |
| 54 | |
| 55 | Example: Inject PM suspend error (-12 = -ENOMEM) |
| 56 | |
| 57 | # cd /sys/kernel/debug/notifier-error-inject/pm/ |
| 58 | # echo -12 > actions/PM_SUSPEND_PREPARE/error |
| 59 | # echo mem > /sys/power/state |
| 60 | bash: echo: write error: Cannot allocate memory |
| 61 | |
| 62 | Memory hotplug notifier error injection module |
| 63 | ---------------------------------------------- |
| 64 | This feature is controlled through debugfs interface |
| 65 | /sys/kernel/debug/notifier-error-inject/memory/actions/<notifier event>/error |
| 66 | |
| 67 | Possible memory notifier events to be failed are: |
| 68 | |
| 69 | * MEM_GOING_ONLINE |
| 70 | * MEM_GOING_OFFLINE |
| 71 | |
| 72 | Example: Inject memory hotplug offline error (-12 == -ENOMEM) |
| 73 | |
| 74 | # cd /sys/kernel/debug/notifier-error-inject/memory |
| 75 | # echo -12 > actions/MEM_GOING_OFFLINE/error |
| 76 | # echo offline > /sys/devices/system/memory/memoryXXX/state |
| 77 | bash: echo: write error: Cannot allocate memory |
| 78 | |
| 79 | powerpc pSeries reconfig notifier error injection module |
| 80 | -------------------------------------------------------- |
| 81 | This feature is controlled through debugfs interface |
| 82 | /sys/kernel/debug/notifier-error-inject/pSeries-reconfig/actions/<notifier event>/error |
| 83 | |
| 84 | Possible pSeries reconfig notifier events to be failed are: |
| 85 | |
| 86 | * PSERIES_RECONFIG_ADD |
| 87 | * PSERIES_RECONFIG_REMOVE |
| 88 | * PSERIES_DRCONF_MEM_ADD |
| 89 | * PSERIES_DRCONF_MEM_REMOVE |
| 90 | |
Nikolay Aleksandrov | 02fff96 | 2015-11-28 13:45:28 +0100 | [diff] [blame] | 91 | Netdevice notifier error injection module |
| 92 | ---------------------------------------------- |
| 93 | This feature is controlled through debugfs interface |
| 94 | /sys/kernel/debug/notifier-error-inject/netdev/actions/<notifier event>/error |
| 95 | |
| 96 | Netdevice notifier events which can be failed are: |
| 97 | |
| 98 | * NETDEV_REGISTER |
| 99 | * NETDEV_CHANGEMTU |
| 100 | * NETDEV_CHANGENAME |
| 101 | * NETDEV_PRE_UP |
| 102 | * NETDEV_PRE_TYPE_CHANGE |
| 103 | * NETDEV_POST_INIT |
| 104 | * NETDEV_PRECHANGEMTU |
| 105 | * NETDEV_PRECHANGEUPPER |
Ido Schimmel | c39d045 | 2015-12-03 12:12:04 +0100 | [diff] [blame] | 106 | * NETDEV_CHANGEUPPER |
Nikolay Aleksandrov | 02fff96 | 2015-11-28 13:45:28 +0100 | [diff] [blame] | 107 | |
| 108 | Example: Inject netdevice mtu change error (-22 == -EINVAL) |
| 109 | |
| 110 | # cd /sys/kernel/debug/notifier-error-inject/netdev |
| 111 | # echo -22 > actions/NETDEV_CHANGEMTU/error |
| 112 | # ip link set eth0 mtu 1024 |
| 113 | RTNETLINK answers: Invalid argument |
| 114 | |
Akinobu Mita | 8d43828 | 2012-07-30 14:43:02 -0700 | [diff] [blame] | 115 | For more usage examples |
| 116 | ----------------------- |
| 117 | There are tools/testing/selftests using the notifier error injection features |
| 118 | for CPU and memory notifiers. |
| 119 | |
| 120 | * tools/testing/selftests/cpu-hotplug/on-off-test.sh |
| 121 | * tools/testing/selftests/memory-hotplug/on-off-test.sh |
| 122 | |
| 123 | These scripts first do simple online and offline tests and then do fault |
| 124 | injection tests if notifier error injection module is available. |