Skip to contentSkip to conversation

Documentation/watchdog: use stdout instead of stderr in watchdog-test

PATCH In review Timur Tabi 3 participants 6 messages Jun 21, 2016 – Jul 17, 2016

Subsystems (2)
lore
Share & tools
lore

Timur Tabi

author
#0 lore raw

PATCH 1/2 Documentation/watchdog: use stdout instead of stderr in watchdog-test

The watchdog-test utility outputs all messages to stderr, even those that are not error messages. Output to stdout instead.

Instead of flushing the output after every write, just disabled the output buffer.

Also display a dot for every ping of the watchdog, so that the user knows that it's working.

---
 Documentation/watchdog/src/watchdog-test.c | 28 ++++++++++++----------------
 1 file changed, 12 insertions(+), 16 deletions(-)
Documentation/watchdog/src/watchdog-test.c +12 -16
index fcdde8f..b3cc7aa 100644
@@ -23,6 +23,7 @@ static void keep_alive(void)
 {
     int dummy;
 
+    printf(".");
     ioctl(fd, WDIOC_KEEPALIVE, &dummy);
 }
 
@@ -34,7 +35,7 @@ static void keep_alive(void)
 static void term(int sig)
 {
     close(fd);
-    fprintf(stderr, "Stopping watchdog ticks...\n");
+    printf("\nStopping watchdog ticks...\n");
     exit(0);
 }
 
@@ -43,11 +44,12 @@ int main(int argc, char *argv[])
     int flags;
     unsigned int ping_rate = 1;
 
+    setbuf(stdout, NULL);
+
     fd = open("/dev/watchdog", O_WRONLY);
 
     if (fd == -1) {
-	fprintf(stderr, "Watchdog device not enabled.\n");
-	fflush(stderr);
+	printf("Watchdog device not enabled.\n");
 	exit(-1);
     }
 
@@ -55,36 +57,30 @@ int main(int argc, char *argv[])
 	if (!strncasecmp(argv[1], "-d", 2)) {
 	    flags = WDIOS_DISABLECARD;
 	    ioctl(fd, WDIOC_SETOPTIONS, &flags);
-	    fprintf(stderr, "Watchdog card disabled.\n");
-	    fflush(stderr);
+	    printf("Watchdog card disabled.\n");
 	    goto end;
 	} else if (!strncasecmp(argv[1], "-e", 2)) {
 	    flags = WDIOS_ENABLECARD;
 	    ioctl(fd, WDIOC_SETOPTIONS, &flags);
-	    fprintf(stderr, "Watchdog card enabled.\n");
-	    fflush(stderr);
+	    printf("Watchdog card enabled.\n");
 	    goto end;
 	} else if (!strncasecmp(argv[1], "-t", 2) && argv[2]) {
 	    flags = atoi(argv[2]);
 	    ioctl(fd, WDIOC_SETTIMEOUT, &flags);
-	    fprintf(stderr, "Watchdog timeout set to %u seconds.\n", flags);
-	    fflush(stderr);
+	    printf("Watchdog timeout set to %u seconds.\n", flags);
 	    goto end;
 	} else if (!strncasecmp(argv[1], "-p", 2) && argv[2]) {
 	    ping_rate = strtoul(argv[2], NULL, 0);
-	    fprintf(stderr, "Watchdog ping rate set to %u seconds.\n", ping_rate);
-	    fflush(stderr);
+	    printf("Watchdog ping rate set to %u seconds.\n", ping_rate);
 	} else {
-	    fprintf(stderr, "-d to disable, -e to enable, -t <n> to set " \
+	    printf("-d to disable, -e to enable, -t <n> to set " \
 		"the timeout,\n-p <n> to set the ping rate, and \n");
-	    fprintf(stderr, "run by itself to tick the card.\n");
-	    fflush(stderr);
+	    printf("run by itself to tick the card.\n");
 	    goto end;
 	}
     }
 
-    fprintf(stderr, "Watchdog Ticking Away!\n");
-    fflush(stderr);
+    printf("Watchdog Ticking Away!\n");
 
     signal(SIGINT, term);
 
Signature · 3 lines
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project.
author
#1 lore raw

PATCH 2/2 Documentation/watchdog: add support for magic close to watchdog-test

Some drivers have the WDIOF_MAGICCLOSE set, which means that applications need to write 'V' to the watchdog device before closing, otherwise the driver won't stop the watchdog timer.

---
 Documentation/watchdog/src/watchdog-test.c | 3 +++
 1 file changed, 3 insertions(+)
Documentation/watchdog/src/watchdog-test.c +3 -0
index b3cc7aa..c691539 100644
@@ -13,6 +13,7 @@
 #include <linux/watchdog.h>
 
 int fd;
+const char v = 'V';
 
 /*
  * This function simply sends an IOCTL to the driver, which in turn ticks
@@ -34,6 +35,7 @@ static void keep_alive(void)
 
 static void term(int sig)
 {
+    write(fd, &v, 1);
     close(fd);
     printf("\nStopping watchdog ticks...\n");
     exit(0);
@@ -89,6 +91,7 @@ int main(int argc, char *argv[])
 	sleep(ping_rate);
     }
 end:
+    write(fd, &v, 1);
     close(fd);
     return 0;
 }
Signature · 3 lines
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project.
maintainer Reviewed-by on v1 2/2
#2 lore raw

Re: [PATCH 2/2] Documentation/watchdog: add support for magic close to watchdog-test

Quoted 5 lines · Timur Tabi

Some drivers have the WDIOF_MAGICCLOSE set, which means that applications need to write 'V' to the watchdog device before closing, otherwise the driver won't stop the watchdog timer.

Quoted 33 lines
---
  Documentation/watchdog/src/watchdog-test.c | 3 +++
  1 file changed, 3 insertions(+)
Documentation/watchdog/src/watchdog-test.c +3 -0
index b3cc7aa..c691539 100644
@@ -13,6 +13,7 @@
  #include <linux/watchdog.h>
 
  int fd;
+const char v = 'V';
 
  /*
   * This function simply sends an IOCTL to the driver, which in turn ticks
@@ -34,6 +35,7 @@ static void keep_alive(void)
 
  static void term(int sig)
  {
+    write(fd, &v, 1);
      close(fd);
      printf("\nStopping watchdog ticks...\n");
      exit(0);
@@ -89,6 +91,7 @@ int main(int argc, char *argv[])
  	sleep(ping_rate);
      }
  end:
+    write(fd, &v, 1);
      close(fd);
      return 0;
  }
#3 lore raw

Re: [PATCH 2/2] Documentation/watchdog: add support for magic close to watchdog-test

In reply to Timur Tabi

Hi Timur,

Quoted 42 lines

Some drivers have the WDIOF_MAGICCLOSE set, which means that applications need to write 'V' to the watchdog device before closing, otherwise the driver won't stop the watchdog timer.

---
 Documentation/watchdog/src/watchdog-test.c | 3 +++
 1 file changed, 3 insertions(+)
Documentation/watchdog/src/watchdog-test.c +3 -0
index b3cc7aa..c691539 100644
@@ -13,6 +13,7 @@
 #include <linux/watchdog.h>
 
 int fd;
+const char v = 'V';
 
 /*
  * This function simply sends an IOCTL to the driver, which in turn ticks
@@ -34,6 +35,7 @@ static void keep_alive(void)
 
 static void term(int sig)
 {
+    write(fd, &v, 1);
     close(fd);
     printf("\nStopping watchdog ticks...\n");
     exit(0);
@@ -89,6 +91,7 @@ int main(int argc, char *argv[])
 	sleep(ping_rate);
     }
 end:
+    write(fd, &v, 1);
     close(fd);
     return 0;
 }
Signature · 3 lines
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project.

Patch has been added to linux-watchdog-next.

Kind regards,
Wim.

maintainer Reviewed-by on v1 1/2
#4 lore raw
In reply to Timur Tabi
Quoted 10 lines · Timur Tabi

The watchdog-test utility outputs all messages to stderr, even those that are not error messages. Output to stdout instead.

Instead of flushing the output after every write, just disabled the output buffer.

Also display a dot for every ping of the watchdog, so that the user knows that it's working.

Quoted 85 lines
---
  Documentation/watchdog/src/watchdog-test.c | 28 ++++++++++++----------------
  1 file changed, 12 insertions(+), 16 deletions(-)
Documentation/watchdog/src/watchdog-test.c +12 -16
index fcdde8f..b3cc7aa 100644
@@ -23,6 +23,7 @@ static void keep_alive(void)
  {
      int dummy;
 
+    printf(".");
      ioctl(fd, WDIOC_KEEPALIVE, &dummy);
  }
 
@@ -34,7 +35,7 @@ static void keep_alive(void)
  static void term(int sig)
  {
      close(fd);
-    fprintf(stderr, "Stopping watchdog ticks...\n");
+    printf("\nStopping watchdog ticks...\n");
      exit(0);
  }
 
@@ -43,11 +44,12 @@ int main(int argc, char *argv[])
      int flags;
      unsigned int ping_rate = 1;
 
+    setbuf(stdout, NULL);
+
      fd = open("/dev/watchdog", O_WRONLY);
 
      if (fd == -1) {
-	fprintf(stderr, "Watchdog device not enabled.\n");
-	fflush(stderr);
+	printf("Watchdog device not enabled.\n");
  	exit(-1);
      }
 
@@ -55,36 +57,30 @@ int main(int argc, char *argv[])
  	if (!strncasecmp(argv[1], "-d", 2)) {
  	    flags = WDIOS_DISABLECARD;
  	    ioctl(fd, WDIOC_SETOPTIONS, &flags);
-	    fprintf(stderr, "Watchdog card disabled.\n");
-	    fflush(stderr);
+	    printf("Watchdog card disabled.\n");
  	    goto end;
  	} else if (!strncasecmp(argv[1], "-e", 2)) {
  	    flags = WDIOS_ENABLECARD;
  	    ioctl(fd, WDIOC_SETOPTIONS, &flags);
-	    fprintf(stderr, "Watchdog card enabled.\n");
-	    fflush(stderr);
+	    printf("Watchdog card enabled.\n");
  	    goto end;
  	} else if (!strncasecmp(argv[1], "-t", 2) && argv[2]) {
  	    flags = atoi(argv[2]);
  	    ioctl(fd, WDIOC_SETTIMEOUT, &flags);
-	    fprintf(stderr, "Watchdog timeout set to %u seconds.\n", flags);
-	    fflush(stderr);
+	    printf("Watchdog timeout set to %u seconds.\n", flags);
  	    goto end;
  	} else if (!strncasecmp(argv[1], "-p", 2) && argv[2]) {
  	    ping_rate = strtoul(argv[2], NULL, 0);
-	    fprintf(stderr, "Watchdog ping rate set to %u seconds.\n", ping_rate);
-	    fflush(stderr);
+	    printf("Watchdog ping rate set to %u seconds.\n", ping_rate);
  	} else {
-	    fprintf(stderr, "-d to disable, -e to enable, -t <n> to set " \
+	    printf("-d to disable, -e to enable, -t <n> to set " \
  		"the timeout,\n-p <n> to set the ping rate, and \n");
-	    fprintf(stderr, "run by itself to tick the card.\n");
-	    fflush(stderr);
+	    printf("run by itself to tick the card.\n");
  	    goto end;
  	}
      }
 
-    fprintf(stderr, "Watchdog Ticking Away!\n");
-    fflush(stderr);
+    printf("Watchdog Ticking Away!\n");
 
      signal(SIGINT, term);
 
#5 lore raw
In reply to Timur Tabi

Hi Timur,

Quoted 99 lines

The watchdog-test utility outputs all messages to stderr, even those that are not error messages. Output to stdout instead.

Instead of flushing the output after every write, just disabled the output buffer.

Also display a dot for every ping of the watchdog, so that the user knows that it's working.

---
 Documentation/watchdog/src/watchdog-test.c | 28 ++++++++++++----------------
 1 file changed, 12 insertions(+), 16 deletions(-)
Documentation/watchdog/src/watchdog-test.c +12 -16
index fcdde8f..b3cc7aa 100644
@@ -23,6 +23,7 @@ static void keep_alive(void)
 {
     int dummy;
 
+    printf(".");
     ioctl(fd, WDIOC_KEEPALIVE, &dummy);
 }
 
@@ -34,7 +35,7 @@ static void keep_alive(void)
 static void term(int sig)
 {
     close(fd);
-    fprintf(stderr, "Stopping watchdog ticks...\n");
+    printf("\nStopping watchdog ticks...\n");
     exit(0);
 }
 
@@ -43,11 +44,12 @@ int main(int argc, char *argv[])
     int flags;
     unsigned int ping_rate = 1;
 
+    setbuf(stdout, NULL);
+
     fd = open("/dev/watchdog", O_WRONLY);
 
     if (fd == -1) {
-	fprintf(stderr, "Watchdog device not enabled.\n");
-	fflush(stderr);
+	printf("Watchdog device not enabled.\n");
 	exit(-1);
     }
 
@@ -55,36 +57,30 @@ int main(int argc, char *argv[])
 	if (!strncasecmp(argv[1], "-d", 2)) {
 	    flags = WDIOS_DISABLECARD;
 	    ioctl(fd, WDIOC_SETOPTIONS, &flags);
-	    fprintf(stderr, "Watchdog card disabled.\n");
-	    fflush(stderr);
+	    printf("Watchdog card disabled.\n");
 	    goto end;
 	} else if (!strncasecmp(argv[1], "-e", 2)) {
 	    flags = WDIOS_ENABLECARD;
 	    ioctl(fd, WDIOC_SETOPTIONS, &flags);
-	    fprintf(stderr, "Watchdog card enabled.\n");
-	    fflush(stderr);
+	    printf("Watchdog card enabled.\n");
 	    goto end;
 	} else if (!strncasecmp(argv[1], "-t", 2) && argv[2]) {
 	    flags = atoi(argv[2]);
 	    ioctl(fd, WDIOC_SETTIMEOUT, &flags);
-	    fprintf(stderr, "Watchdog timeout set to %u seconds.\n", flags);
-	    fflush(stderr);
+	    printf("Watchdog timeout set to %u seconds.\n", flags);
 	    goto end;
 	} else if (!strncasecmp(argv[1], "-p", 2) && argv[2]) {
 	    ping_rate = strtoul(argv[2], NULL, 0);
-	    fprintf(stderr, "Watchdog ping rate set to %u seconds.\n", ping_rate);
-	    fflush(stderr);
+	    printf("Watchdog ping rate set to %u seconds.\n", ping_rate);
 	} else {
-	    fprintf(stderr, "-d to disable, -e to enable, -t <n> to set " \
+	    printf("-d to disable, -e to enable, -t <n> to set " \
 		"the timeout,\n-p <n> to set the ping rate, and \n");
-	    fprintf(stderr, "run by itself to tick the card.\n");
-	    fflush(stderr);
+	    printf("run by itself to tick the card.\n");
 	    goto end;
 	}
     }
 
-    fprintf(stderr, "Watchdog Ticking Away!\n");
-    fflush(stderr);
+    printf("Watchdog Ticking Away!\n");
 
     signal(SIGINT, term);
 
Signature · 3 lines
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project.

Patch has been added to linux-watchdog-next.

Kind regards,
Wim.