mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 0/2] tools/nolibc: introduce poll.h
@ 2025-04-30  9:35 Thomas Weißschuh
  2025-04-30  9:35 ` [PATCH 1/2] tools/nolibc: move poll() to poll.h Thomas Weißschuh
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Thomas Weißschuh @ 2025-04-30  9:35 UTC (permalink / raw)
  To: Willy Tarreau, Thomas Weißschuh; +Cc: linux-kernel, Thomas Weißschuh

Move poll() to the standard poll.h and drop the custom related definitions.
This also allows to drop an iffy workaround from the nolibc next branch:
e1896bb9e079 ("selftests: harness: Guard includes on nolibc")

Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
---
Thomas Weißschuh (2):
      tools/nolibc: move poll() to poll.h
      tools/nolibc: use poll-related definitions from UAPI headers

 tools/include/nolibc/Makefile |  1 +
 tools/include/nolibc/nolibc.h |  1 +
 tools/include/nolibc/poll.h   | 55 +++++++++++++++++++++++++++++++++++++++++++
 tools/include/nolibc/sys.h    | 37 -----------------------------
 tools/include/nolibc/types.h  | 14 -----------
 5 files changed, 57 insertions(+), 51 deletions(-)
---
base-commit: e1896bb9e07948b4825883cbc3ca37cf59e17578
change-id: 20250430-poll-75dc16e95639

Best regards,
-- 
Thomas Weißschuh <thomas.weissschuh@linutronix.de>


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] tools/nolibc: move poll() to poll.h
  2025-04-30  9:35 [PATCH 0/2] tools/nolibc: introduce poll.h Thomas Weißschuh
@ 2025-04-30  9:35 ` Thomas Weißschuh
  2025-04-30  9:35 ` [PATCH 2/2] tools/nolibc: use poll-related definitions from UAPI headers Thomas Weißschuh
  2025-05-11 18:43 ` [PATCH 0/2] tools/nolibc: introduce poll.h Willy Tarreau
  2 siblings, 0 replies; 4+ messages in thread
From: Thomas Weißschuh @ 2025-04-30  9:35 UTC (permalink / raw)
  To: Willy Tarreau, Thomas Weißschuh; +Cc: linux-kernel, Thomas Weißschuh

This is the location regular userspace expects the definition.

Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
---
 tools/include/nolibc/Makefile |  1 +
 tools/include/nolibc/nolibc.h |  1 +
 tools/include/nolibc/poll.h   | 55 +++++++++++++++++++++++++++++++++++++++++++
 tools/include/nolibc/sys.h    | 37 -----------------------------
 4 files changed, 57 insertions(+), 37 deletions(-)

diff --git a/tools/include/nolibc/Makefile b/tools/include/nolibc/Makefile
index 41ef18872a7e9435a5efec9c0b32b9e29fcd4ce8..3ad6ac3fde0aed8eac12ed944c06015bbccde6f1 100644
--- a/tools/include/nolibc/Makefile
+++ b/tools/include/nolibc/Makefile
@@ -36,6 +36,7 @@ all_files := \
 		getopt.h \
 		limits.h \
 		nolibc.h \
+		poll.h \
 		signal.h \
 		stackprotector.h \
 		std.h \
diff --git a/tools/include/nolibc/nolibc.h b/tools/include/nolibc/nolibc.h
index d1b949e094eeb7cc0fe875deeafa4c972ecf35b2..05a4bd5fba8bab9b6f896e617f73c49e30a1242e 100644
--- a/tools/include/nolibc/nolibc.h
+++ b/tools/include/nolibc/nolibc.h
@@ -114,6 +114,7 @@
 #include "dirent.h"
 #include "fcntl.h"
 #include "getopt.h"
+#include "poll.h"
 
 /* Used by programs to avoid std includes */
 #define NOLIBC
diff --git a/tools/include/nolibc/poll.h b/tools/include/nolibc/poll.h
new file mode 100644
index 0000000000000000000000000000000000000000..be6e44fe022d9e8f196821c6c5eb6d0a56e8aacb
--- /dev/null
+++ b/tools/include/nolibc/poll.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: LGPL-2.1 OR MIT */
+/*
+ * poll definitions for NOLIBC
+ * Copyright (C) 2017-2021 Willy Tarreau <w@1wt.eu>
+ */
+
+/* make sure to include all global symbols */
+#include "nolibc.h"
+
+#ifndef _NOLIBC_POLL_H
+#define _NOLIBC_POLL_H
+
+#include "arch.h"
+#include "types.h"
+#include "sys.h"
+
+#include <linux/time.h>
+
+/*
+ * int poll(struct pollfd *fds, int nfds, int timeout);
+ */
+
+static __attribute__((unused))
+int sys_poll(struct pollfd *fds, int nfds, int timeout)
+{
+#if defined(__NR_ppoll)
+	struct timespec t;
+
+	if (timeout >= 0) {
+		t.tv_sec  = timeout / 1000;
+		t.tv_nsec = (timeout % 1000) * 1000000;
+	}
+	return my_syscall5(__NR_ppoll, fds, nfds, (timeout >= 0) ? &t : NULL, NULL, 0);
+#elif defined(__NR_ppoll_time64)
+	struct __kernel_timespec t;
+
+	if (timeout >= 0) {
+		t.tv_sec  = timeout / 1000;
+		t.tv_nsec = (timeout % 1000) * 1000000;
+	}
+	return my_syscall5(__NR_ppoll_time64, fds, nfds, (timeout >= 0) ? &t : NULL, NULL, 0);
+#elif defined(__NR_poll)
+	return my_syscall3(__NR_poll, fds, nfds, timeout);
+#else
+	return __nolibc_enosys(__func__, fds, nfds, timeout);
+#endif
+}
+
+static __attribute__((unused))
+int poll(struct pollfd *fds, int nfds, int timeout)
+{
+	return __sysret(sys_poll(fds, nfds, timeout));
+}
+
+#endif /* _NOLIBC_POLL_H */
diff --git a/tools/include/nolibc/sys.h b/tools/include/nolibc/sys.h
index 68e60e6742114a5422c8afef56a67415ed652c2f..5733fe54911dca44c7423951ff85fb166d95c06f 100644
--- a/tools/include/nolibc/sys.h
+++ b/tools/include/nolibc/sys.h
@@ -766,43 +766,6 @@ int pivot_root(const char *new, const char *old)
 }
 
 
-/*
- * int poll(struct pollfd *fds, int nfds, int timeout);
- */
-
-static __attribute__((unused))
-int sys_poll(struct pollfd *fds, int nfds, int timeout)
-{
-#if defined(__NR_ppoll)
-	struct timespec t;
-
-	if (timeout >= 0) {
-		t.tv_sec  = timeout / 1000;
-		t.tv_nsec = (timeout % 1000) * 1000000;
-	}
-	return my_syscall5(__NR_ppoll, fds, nfds, (timeout >= 0) ? &t : NULL, NULL, 0);
-#elif defined(__NR_ppoll_time64)
-	struct __kernel_timespec t;
-
-	if (timeout >= 0) {
-		t.tv_sec  = timeout / 1000;
-		t.tv_nsec = (timeout % 1000) * 1000000;
-	}
-	return my_syscall5(__NR_ppoll_time64, fds, nfds, (timeout >= 0) ? &t : NULL, NULL, 0);
-#elif defined(__NR_poll)
-	return my_syscall3(__NR_poll, fds, nfds, timeout);
-#else
-	return __nolibc_enosys(__func__, fds, nfds, timeout);
-#endif
-}
-
-static __attribute__((unused))
-int poll(struct pollfd *fds, int nfds, int timeout)
-{
-	return __sysret(sys_poll(fds, nfds, timeout));
-}
-
-
 /*
  * ssize_t read(int fd, void *buf, size_t count);
  */

-- 
2.49.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 2/2] tools/nolibc: use poll-related definitions from UAPI headers
  2025-04-30  9:35 [PATCH 0/2] tools/nolibc: introduce poll.h Thomas Weißschuh
  2025-04-30  9:35 ` [PATCH 1/2] tools/nolibc: move poll() to poll.h Thomas Weißschuh
@ 2025-04-30  9:35 ` Thomas Weißschuh
  2025-05-11 18:43 ` [PATCH 0/2] tools/nolibc: introduce poll.h Willy Tarreau
  2 siblings, 0 replies; 4+ messages in thread
From: Thomas Weißschuh @ 2025-04-30  9:35 UTC (permalink / raw)
  To: Willy Tarreau, Thomas Weißschuh; +Cc: linux-kernel, Thomas Weißschuh

The UAPI headers already provide definitions for these symbols.
Using them makes the code shorter, more robust and compatible with
applications using linux/poll.h directly.

Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
---
 tools/include/nolibc/poll.h  |  2 +-
 tools/include/nolibc/types.h | 14 --------------
 2 files changed, 1 insertion(+), 15 deletions(-)

diff --git a/tools/include/nolibc/poll.h b/tools/include/nolibc/poll.h
index be6e44fe022d9e8f196821c6c5eb6d0a56e8aacb..1765acb17ea01ff53cbad0b4750e4938446b6a45 100644
--- a/tools/include/nolibc/poll.h
+++ b/tools/include/nolibc/poll.h
@@ -11,9 +11,9 @@
 #define _NOLIBC_POLL_H
 
 #include "arch.h"
-#include "types.h"
 #include "sys.h"
 
+#include <linux/poll.h>
 #include <linux/time.h>
 
 /*
diff --git a/tools/include/nolibc/types.h b/tools/include/nolibc/types.h
index fe97953d16572db3e4c18cdc8921c6a991d64f94..70f20519ebf908b90c242b5ff71d05364fa89f2f 100644
--- a/tools/include/nolibc/types.h
+++ b/tools/include/nolibc/types.h
@@ -159,20 +159,6 @@ typedef struct {
 			__set->fds[__idx] = 0;				\
 	} while (0)
 
-/* for poll() */
-#define POLLIN          0x0001
-#define POLLPRI         0x0002
-#define POLLOUT         0x0004
-#define POLLERR         0x0008
-#define POLLHUP         0x0010
-#define POLLNVAL        0x0020
-
-struct pollfd {
-	int fd;
-	short int events;
-	short int revents;
-};
-
 /* for getdents64() */
 struct linux_dirent64 {
 	uint64_t       d_ino;

-- 
2.49.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/2] tools/nolibc: introduce poll.h
  2025-04-30  9:35 [PATCH 0/2] tools/nolibc: introduce poll.h Thomas Weißschuh
  2025-04-30  9:35 ` [PATCH 1/2] tools/nolibc: move poll() to poll.h Thomas Weißschuh
  2025-04-30  9:35 ` [PATCH 2/2] tools/nolibc: use poll-related definitions from UAPI headers Thomas Weißschuh
@ 2025-05-11 18:43 ` Willy Tarreau
  2 siblings, 0 replies; 4+ messages in thread
From: Willy Tarreau @ 2025-05-11 18:43 UTC (permalink / raw)
  To: Thomas Weißschuh; +Cc: Thomas Weißschuh, linux-kernel

Hi Thomas,

sorry for the delay!

On Wed, Apr 30, 2025 at 11:35:31AM +0200, Thomas Weißschuh wrote:
> Move poll() to the standard poll.h and drop the custom related definitions.
> This also allows to drop an iffy workaround from the nolibc next branch:
> e1896bb9e079 ("selftests: harness: Guard includes on nolibc")

This one will be pretty useful for a number of small programs which
try to be a bit interactive, that's nice.

Acked-by: Willy Tarreau <w@1wt.eu>

Thanks!
Willy

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-05-11 18:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-04-30  9:35 [PATCH 0/2] tools/nolibc: introduce poll.h Thomas Weißschuh
2025-04-30  9:35 ` [PATCH 1/2] tools/nolibc: move poll() to poll.h Thomas Weißschuh
2025-04-30  9:35 ` [PATCH 2/2] tools/nolibc: use poll-related definitions from UAPI headers Thomas Weißschuh
2025-05-11 18:43 ` [PATCH 0/2] tools/nolibc: introduce poll.h Willy Tarreau

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®