summaryrefslogtreecommitdiffstats
path: root/meta-phosphor/common/recipes-core/systemd/systemd/0001-watchdog-allow-a-device-path-to-be-specified.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-phosphor/common/recipes-core/systemd/systemd/0001-watchdog-allow-a-device-path-to-be-specified.patch')
-rw-r--r--meta-phosphor/common/recipes-core/systemd/systemd/0001-watchdog-allow-a-device-path-to-be-specified.patch73
1 files changed, 73 insertions, 0 deletions
diff --git a/meta-phosphor/common/recipes-core/systemd/systemd/0001-watchdog-allow-a-device-path-to-be-specified.patch b/meta-phosphor/common/recipes-core/systemd/systemd/0001-watchdog-allow-a-device-path-to-be-specified.patch
new file mode 100644
index 000000000..7dddd6172
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/systemd/0001-watchdog-allow-a-device-path-to-be-specified.patch
@@ -0,0 +1,73 @@
+From 9d1f2858cd2ba49066ca319164b4e3e2769fc0fb Mon Sep 17 00:00:00 2001
+From: "Edward A. James" <eajames@us.ibm.com>
+Date: Fri, 8 Dec 2017 11:26:30 -0600
+Subject: [PATCH 1/3] watchdog: allow a device path to be specified
+
+Currently systemd hardcodes the use of /dev/watchdog. This is a legacy
+chardev that points to watchdog0 in the system.
+
+Modify the watchdog API to allow a different device path to be passed
+and stored. Opening the watchdog defaults to /dev/watchdog, maintaining
+existing behavior.
+---
+ src/shared/watchdog.c | 9 ++++++++-
+ src/shared/watchdog.h | 5 +++++
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/src/shared/watchdog.c b/src/shared/watchdog.c
+index 4f3e012..8068e95 100644
+--- a/src/shared/watchdog.c
++++ b/src/shared/watchdog.c
+@@ -26,10 +26,12 @@
+
+ #include "fd-util.h"
+ #include "log.h"
++#include "string-util.h"
+ #include "time-util.h"
+ #include "watchdog.h"
+
+ static int watchdog_fd = -1;
++static char *watchdog_device = NULL;
+ static usec_t watchdog_timeout = USEC_INFINITY;
+
+ static int update_timeout(void) {
+@@ -83,7 +85,8 @@ static int open_watchdog(void) {
+ if (watchdog_fd >= 0)
+ return 0;
+
+- watchdog_fd = open("/dev/watchdog", O_WRONLY|O_CLOEXEC);
++ watchdog_fd = open(watchdog_device ?: "/dev/watchdog",
++ O_WRONLY|O_CLOEXEC);
+ if (watchdog_fd < 0)
+ return -errno;
+
+@@ -95,6 +98,10 @@ static int open_watchdog(void) {
+ return update_timeout();
+ }
+
++int watchdog_set_device(char *path) {
++ return free_and_strdup(&watchdog_device, path);
++}
++
+ int watchdog_set_timeout(usec_t *usec) {
+ int r;
+
+diff --git a/src/shared/watchdog.h b/src/shared/watchdog.h
+index f6ec178..90a075a 100644
+--- a/src/shared/watchdog.h
++++ b/src/shared/watchdog.h
+@@ -24,6 +24,11 @@
+ #include "time-util.h"
+ #include "util.h"
+
++int watchdog_set_device(char *path);
+ int watchdog_set_timeout(usec_t *usec);
+ int watchdog_ping(void);
+ void watchdog_close(bool disarm);
++
++static inline void watchdog_free_device(void) {
++ (void) watchdog_set_device(NULL);
++}
+--
+1.8.3.1
+
OpenPOWER on IntegriCloud