[igt-dev] [PATCH i-g-t 18/29] runner: Add support for non-Linux operating systems

D Scott Phillips d.scott.phillips at intel.com
Wed Dec 11 00:52:24 UTC 2019


The runner depends on Linux specific functionality like signalfd
and the watchdog interface. Provide stub functionality for other
platforms so that the runner can continue with reduced
functionality.

Signed-off-by: D Scott Phillips <d.scott.phillips at intel.com>
---
 runner/executor.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/runner/executor.c b/runner/executor.c
index f36bfd3d..095451c4 100644
--- a/runner/executor.c
+++ b/runner/executor.c
@@ -1,7 +1,9 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <glib.h>
+#if defined(__linux__)
 #include <linux/watchdog.h>
+#endif
 #if HAVE_OPING
 #include <oping.h>
 #endif
@@ -13,7 +15,9 @@
 #include <sys/ioctl.h>
 #include <sys/select.h>
 #include <sys/poll.h>
+#if defined(__linux__)
 #include <sys/signalfd.h>
+#endif
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <sys/types.h>
@@ -27,6 +31,12 @@
 #include "executor.h"
 #include "output_strings.h"
 
+#if !defined(__linux__)
+#define CLOCK_BOOTTIME CLOCK_REALTIME
+#define WDIOC_SETTIMEOUT 0
+#define WDIOC_KEEPALIVE 0
+#endif
+
 static struct {
 	int *fds;
 	size_t num_dogs;
@@ -674,7 +684,14 @@ static int monitor_output(pid_t child,
 	char *outbuf = NULL;
 	size_t outbufsize = 0;
 	char current_subtest[256] = {};
+#if defined(__linux__)
 	struct signalfd_siginfo siginfo;
+#else
+	struct signalfd_siginfo {
+		pid_t ssi_pid;
+		int ssi_signo;
+	} siginfo;
+#endif
 	ssize_t s;
 	int n, status;
 	int nfds = outfd;
@@ -1455,7 +1472,14 @@ static void oom_immortal(void)
 
 static bool should_die_because_signal(int sigfd)
 {
+#if defined(__linux__)
 	struct signalfd_siginfo siginfo;
+#else
+	struct signalfd_siginfo {
+		pid_t ssi_pid;
+		int ssi_signo;
+	} siginfo;
+#endif
 	int ret;
 	struct pollfd sigpoll = { .fd = sigfd, .events = POLLIN | POLLRDBAND };
 
@@ -1494,7 +1518,7 @@ bool execute(struct execute_state *state,
 	struct utsname unamebuf;
 	int resdirfd, testdirfd, unamefd, timefd;
 	sigset_t sigmask;
-	int sigfd;
+	int sigfd = -1;
 	double time_spent = 0.0;
 	bool status = true;
 
@@ -1543,7 +1567,9 @@ bool execute(struct execute_state *state,
 	sigaddset(&sigmask, SIGTERM);
 	sigaddset(&sigmask, SIGQUIT);
 	sigaddset(&sigmask, SIGHUP);
+#if defined(__linux__)
 	sigfd = signalfd(-1, &sigmask, O_CLOEXEC);
+#endif
 	sigprocmask(SIG_BLOCK, &sigmask, NULL);
 
 	if (sigfd < 0) {
-- 
2.23.0



More information about the igt-dev mailing list