xref: /aosp_15_r20/external/igt-gpu-tools/lib/igt_sysrq.c (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
1*d83cc019SAndroid Build Coastguard Worker #include <unistd.h>
2*d83cc019SAndroid Build Coastguard Worker #include <fcntl.h>
3*d83cc019SAndroid Build Coastguard Worker #include <stdlib.h>
4*d83cc019SAndroid Build Coastguard Worker #include <sys/reboot.h>
5*d83cc019SAndroid Build Coastguard Worker 
6*d83cc019SAndroid Build Coastguard Worker #include "igt_core.h"
7*d83cc019SAndroid Build Coastguard Worker 
8*d83cc019SAndroid Build Coastguard Worker #include "igt_sysrq.h"
9*d83cc019SAndroid Build Coastguard Worker 
10*d83cc019SAndroid Build Coastguard Worker /**
11*d83cc019SAndroid Build Coastguard Worker  * igt_sysrq_reboot: Reboots the machine
12*d83cc019SAndroid Build Coastguard Worker  *
13*d83cc019SAndroid Build Coastguard Worker  * Syncs filesystems and immediately reboots the machine.
14*d83cc019SAndroid Build Coastguard Worker  */
igt_sysrq_reboot(void)15*d83cc019SAndroid Build Coastguard Worker void igt_sysrq_reboot(void)
16*d83cc019SAndroid Build Coastguard Worker {
17*d83cc019SAndroid Build Coastguard Worker 	sync();
18*d83cc019SAndroid Build Coastguard Worker 
19*d83cc019SAndroid Build Coastguard Worker 	/* Try to be nice at first, and if that fails pull the trigger */
20*d83cc019SAndroid Build Coastguard Worker 	if (reboot(RB_AUTOBOOT)) {
21*d83cc019SAndroid Build Coastguard Worker 		int fd = open("/proc/sysrq-trigger", O_WRONLY);
22*d83cc019SAndroid Build Coastguard Worker 		igt_ignore_warn(write(fd, "b", 2));
23*d83cc019SAndroid Build Coastguard Worker 		close(fd);
24*d83cc019SAndroid Build Coastguard Worker 	}
25*d83cc019SAndroid Build Coastguard Worker 
26*d83cc019SAndroid Build Coastguard Worker 	abort();
27*d83cc019SAndroid Build Coastguard Worker }
28