| 
									
										
										
										
											2012-07-30 14:43:02 -07:00
										 |  |  | Notifier error injection | 
					
						
							|  |  |  | ======================== | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-08 21:57:35 +09:00
										 |  |  | Notifier error injection provides the ability to inject artificial errors to | 
					
						
							| 
									
										
										
										
											2012-07-30 14:43:02 -07:00
										 |  |  | 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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * CPU notifier | 
					
						
							|  |  |  |  * PM notifier | 
					
						
							|  |  |  |  * Memory hotplug notifier | 
					
						
							|  |  |  |  * powerpc pSeries reconfig notifier | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CPU notifier error injection module | 
					
						
							|  |  |  | ----------------------------------- | 
					
						
							|  |  |  | This feature can be used to test the error handling of the CPU notifiers by | 
					
						
							| 
									
										
										
										
											2012-11-08 21:57:35 +09:00
										 |  |  | injecting artificial errors to CPU notifier chain callbacks. | 
					
						
							| 
									
										
										
										
											2012-07-30 14:43:02 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | If the notifier call chain should be failed with some events notified, write | 
					
						
							|  |  |  | the error code to debugfs interface | 
					
						
							|  |  |  | /sys/kernel/debug/notifier-error-inject/cpu/actions/<notifier event>/error | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Possible CPU notifier events to be failed are: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * CPU_UP_PREPARE | 
					
						
							|  |  |  |  * CPU_UP_PREPARE_FROZEN | 
					
						
							|  |  |  |  * CPU_DOWN_PREPARE | 
					
						
							|  |  |  |  * CPU_DOWN_PREPARE_FROZEN | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Example1: Inject CPU offline error (-1 == -EPERM) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	# cd /sys/kernel/debug/notifier-error-inject/cpu | 
					
						
							|  |  |  | 	# echo -1 > actions/CPU_DOWN_PREPARE/error | 
					
						
							|  |  |  | 	# echo 0 > /sys/devices/system/cpu/cpu1/online | 
					
						
							|  |  |  | 	bash: echo: write error: Operation not permitted | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Example2: inject CPU online error (-2 == -ENOENT) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	# echo -2 > actions/CPU_UP_PREPARE/error | 
					
						
							|  |  |  | 	# echo 1 > /sys/devices/system/cpu/cpu1/online | 
					
						
							|  |  |  | 	bash: echo: write error: No such file or directory | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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. |