blob: 83d3f4e43e91726201ba56392f0723c40927fc67 [file] [log] [blame]
Akinobu Mita8d438282012-07-30 14:43:02 -07001Notifier error injection
2========================
3
Masanari Iida4e79162a2012-11-08 21:57:35 +09004Notifier error injection provides the ability to inject artificial errors to
Akinobu Mita8d438282012-07-30 14:43:02 -07005specified notifier chain callbacks. It is useful to test the error handling of
6notifier call chain failures which is rarely executed. There are kernel
7modules 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 Aleksandrov02fff962015-11-28 13:45:28 +010013 * Netdevice notifier
Akinobu Mita8d438282012-07-30 14:43:02 -070014
15CPU notifier error injection module
16-----------------------------------
17This feature can be used to test the error handling of the CPU notifiers by
Masanari Iida4e79162a2012-11-08 21:57:35 +090018injecting artificial errors to CPU notifier chain callbacks.
Akinobu Mita8d438282012-07-30 14:43:02 -070019
20If the notifier call chain should be failed with some events notified, write
21the error code to debugfs interface
22/sys/kernel/debug/notifier-error-inject/cpu/actions/<notifier event>/error
23
24Possible 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
31Example1: 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
38Example2: 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
44PM notifier error injection module
45----------------------------------
46This feature is controlled through debugfs interface
47/sys/kernel/debug/notifier-error-inject/pm/actions/<notifier event>/error
48
49Possible PM notifier events to be failed are:
50
51 * PM_HIBERNATION_PREPARE
52 * PM_SUSPEND_PREPARE
53 * PM_RESTORE_PREPARE
54
55Example: 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
62Memory hotplug notifier error injection module
63----------------------------------------------
64This feature is controlled through debugfs interface
65/sys/kernel/debug/notifier-error-inject/memory/actions/<notifier event>/error
66
67Possible memory notifier events to be failed are:
68
69 * MEM_GOING_ONLINE
70 * MEM_GOING_OFFLINE
71
72Example: 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
79powerpc pSeries reconfig notifier error injection module
80--------------------------------------------------------
81This feature is controlled through debugfs interface
82/sys/kernel/debug/notifier-error-inject/pSeries-reconfig/actions/<notifier event>/error
83
84Possible 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 Aleksandrov02fff962015-11-28 13:45:28 +010091Netdevice notifier error injection module
92----------------------------------------------
93This feature is controlled through debugfs interface
94/sys/kernel/debug/notifier-error-inject/netdev/actions/<notifier event>/error
95
96Netdevice 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 Schimmelc39d0452015-12-03 12:12:04 +0100106 * NETDEV_CHANGEUPPER
Nikolay Aleksandrov02fff962015-11-28 13:45:28 +0100107
108Example: 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 Mita8d438282012-07-30 14:43:02 -0700115For more usage examples
116-----------------------
117There are tools/testing/selftests using the notifier error injection features
118for 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
123These scripts first do simple online and offline tests and then do fault
124injection tests if notifier error injection module is available.