aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShuah Khan (Samsung OSG) <shuah@kernel.org>2018-09-26 18:37:43 -0400
committerShuah Khan (Samsung OSG) <shuah@kernel.org>2018-10-24 16:49:36 -0400
commitd89d08ffd2c5a9043c8df7333d9bee6c09904a8f (patch)
treefeb53a418af2e241931fbb18acf081c73f3c9c40
parent7514c39cf1d9433203c9b7c6674dbfa429db804b (diff)
selftests: watchdog: Fix ioctl SET* error paths to take oneshot exit path
When ioctls for WDIOC_SETOPTIONS (WDIOS_DISABLECARD or WDIOS_ENABLECARD), WDIOC_SETTIMEOUT, and WDIOC_SETPRETIMEOUT fail, the error path continues to handler watchdog timer until user terminates it. When ioctl returns error, it might not be safe to let the watchdog tick. The error could be due an unsupported ioctl command or some other error. Fix it to handle error paths as oneshot to stop the watchdog ticks and exit right away. Signed-off-by: Shuah Khan (Samsung OSG) <shuah@kernel.org>
-rw-r--r--tools/testing/selftests/watchdog/watchdog-test.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/tools/testing/selftests/watchdog/watchdog-test.c b/tools/testing/selftests/watchdog/watchdog-test.c
index e0f1600dc1b3..c6bd9a68306b 100644
--- a/tools/testing/selftests/watchdog/watchdog-test.c
+++ b/tools/testing/selftests/watchdog/watchdog-test.c
@@ -123,16 +123,20 @@ int main(int argc, char *argv[])
123 ret = ioctl(fd, WDIOC_SETOPTIONS, &flags); 123 ret = ioctl(fd, WDIOC_SETOPTIONS, &flags);
124 if (!ret) 124 if (!ret)
125 printf("Watchdog card disabled.\n"); 125 printf("Watchdog card disabled.\n");
126 else 126 else {
127 printf("WDIOS_DISABLECARD error '%s'\n", strerror(errno)); 127 printf("WDIOS_DISABLECARD error '%s'\n", strerror(errno));
128 oneshot = 1;
129 }
128 break; 130 break;
129 case 'e': 131 case 'e':
130 flags = WDIOS_ENABLECARD; 132 flags = WDIOS_ENABLECARD;
131 ret = ioctl(fd, WDIOC_SETOPTIONS, &flags); 133 ret = ioctl(fd, WDIOC_SETOPTIONS, &flags);
132 if (!ret) 134 if (!ret)
133 printf("Watchdog card enabled.\n"); 135 printf("Watchdog card enabled.\n");
134 else 136 else {
135 printf("WDIOS_ENABLECARD error '%s'\n", strerror(errno)); 137 printf("WDIOS_ENABLECARD error '%s'\n", strerror(errno));
138 oneshot = 1;
139 }
136 break; 140 break;
137 case 'p': 141 case 'p':
138 ping_rate = strtoul(optarg, NULL, 0); 142 ping_rate = strtoul(optarg, NULL, 0);
@@ -145,8 +149,10 @@ int main(int argc, char *argv[])
145 ret = ioctl(fd, WDIOC_SETTIMEOUT, &flags); 149 ret = ioctl(fd, WDIOC_SETTIMEOUT, &flags);
146 if (!ret) 150 if (!ret)
147 printf("Watchdog timeout set to %u seconds.\n", flags); 151 printf("Watchdog timeout set to %u seconds.\n", flags);
148 else 152 else {
149 printf("WDIOC_SETTIMEOUT error '%s'\n", strerror(errno)); 153 printf("WDIOC_SETTIMEOUT error '%s'\n", strerror(errno));
154 oneshot = 1;
155 }
150 break; 156 break;
151 case 'T': 157 case 'T':
152 oneshot = 1; 158 oneshot = 1;
@@ -161,8 +167,10 @@ int main(int argc, char *argv[])
161 ret = ioctl(fd, WDIOC_SETPRETIMEOUT, &flags); 167 ret = ioctl(fd, WDIOC_SETPRETIMEOUT, &flags);
162 if (!ret) 168 if (!ret)
163 printf("Watchdog pretimeout set to %u seconds.\n", flags); 169 printf("Watchdog pretimeout set to %u seconds.\n", flags);
164 else 170 else {
165 printf("WDIOC_SETPRETIMEOUT error '%s'\n", strerror(errno)); 171 printf("WDIOC_SETPRETIMEOUT error '%s'\n", strerror(errno));
172 oneshot = 1;
173 }
166 break; 174 break;
167 case 'N': 175 case 'N':
168 oneshot = 1; 176 oneshot = 1;