* [PATCH trivial 0/7] assume some linux syscalls are always present: epoll, splice, inotify
@ 2026-01-13 12:59 Michael Tokarev
2026-01-13 12:59 ` [PATCH trivial 1/7] linux-user/syscall.c: assume splice is always present Michael Tokarev
` (9 more replies)
0 siblings, 10 replies; 21+ messages in thread
From: Michael Tokarev @ 2026-01-13 12:59 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Michael Tokarev
There are numerous checks in the code wrt availability
of linux subsystems. It makes no sense to check for them
anymore, since they're always present (since linux 2.6 or
earlier).
Michael Tokarev (7):
linux-user/syscall.c: assume splice is always present
meson.build: stop checking for splice()
linux-user: assume inotify sycalls are always present
meson.build: stop checking for inotify_init()
linux-user: assume epoll is always present
meson.build: do not check for epoll.h (CONFIG_EPOLL)
rename CONFIG_EPOLL_CREATE1 to CONFIG_EPOLL
linux-user/fd-trans.c | 5 -----
linux-user/fd-trans.h | 4 ----
linux-user/syscall.c | 44 +++++++--------------------------------
linux-user/syscall_defs.h | 3 ---
meson.build | 12 +----------
util/aio-posix.h | 4 ++--
util/meson.build | 2 +-
7 files changed, 11 insertions(+), 63 deletions(-)
--
2.47.3
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH trivial 1/7] linux-user/syscall.c: assume splice is always present
2026-01-13 12:59 [PATCH trivial 0/7] assume some linux syscalls are always present: epoll, splice, inotify Michael Tokarev
@ 2026-01-13 12:59 ` Michael Tokarev
2026-01-13 13:11 ` Peter Maydell
2026-01-19 1:20 ` Richard Henderson
2026-01-13 13:00 ` [PATCH 1/3] linux-user/syscall.c: statfs: f_flags " Michael Tokarev
` (8 subsequent siblings)
9 siblings, 2 replies; 21+ messages in thread
From: Michael Tokarev @ 2026-01-13 12:59 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Michael Tokarev
splice() &Co are defined since linux 2.6.17.
Assume it is always present.
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
---
linux-user/syscall.c | 15 +++------------
1 file changed, 3 insertions(+), 12 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 67ad681098..9cc9ed2fbc 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -13450,15 +13450,9 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
return ret;
#endif
-#ifdef CONFIG_SPLICE
-#ifdef TARGET_NR_tee
case TARGET_NR_tee:
- {
- ret = get_errno(tee(arg1,arg2,arg3,arg4));
- }
+ ret = get_errno(tee(arg1, arg2, arg3, arg4));
return ret;
-#endif
-#ifdef TARGET_NR_splice
case TARGET_NR_splice:
{
loff_t loff_in, loff_out;
@@ -13488,9 +13482,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
}
}
return ret;
-#endif
-#ifdef TARGET_NR_vmsplice
- case TARGET_NR_vmsplice:
+ case TARGET_NR_vmsplice:
{
struct iovec *vec = lock_iovec(VERIFY_READ, arg2, arg3, 1);
if (vec != NULL) {
@@ -13501,8 +13493,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
}
}
return ret;
-#endif
-#endif /* CONFIG_SPLICE */
+
#ifdef CONFIG_EVENTFD
#if defined(TARGET_NR_eventfd)
case TARGET_NR_eventfd:
--
2.47.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 1/3] linux-user/syscall.c: statfs: f_flags is always present
2026-01-13 12:59 [PATCH trivial 0/7] assume some linux syscalls are always present: epoll, splice, inotify Michael Tokarev
2026-01-13 12:59 ` [PATCH trivial 1/7] linux-user/syscall.c: assume splice is always present Michael Tokarev
@ 2026-01-13 13:00 ` Michael Tokarev
2026-01-13 13:04 ` Michael Tokarev
2026-01-13 13:00 ` [PATCH 2/3] linux-user/syscall.c: consolidate statfs calls Michael Tokarev
` (7 subsequent siblings)
9 siblings, 1 reply; 21+ messages in thread
From: Michael Tokarev @ 2026-01-13 13:00 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Michael Tokarev
statfs.f_flags is present since linux 2.6.
There's no need to check for its existance anymore.
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
---
linux-user/syscall.c | 8 --------
1 file changed, 8 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 2060e561a2..d32299dddb 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -11000,11 +11000,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
__put_user(stfs.f_fsid.__val[1], &target_stfs->f_fsid.val[1]);
__put_user(stfs.f_namelen, &target_stfs->f_namelen);
__put_user(stfs.f_frsize, &target_stfs->f_frsize);
-#ifdef _STATFS_F_FLAGS
__put_user(stfs.f_flags, &target_stfs->f_flags);
-#else
- __put_user(0, &target_stfs->f_flags);
-#endif
memset(target_stfs->f_spare, 0, sizeof(target_stfs->f_spare));
unlock_user_struct(target_stfs, arg2, 1);
}
@@ -11039,11 +11035,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
__put_user(stfs.f_fsid.__val[1], &target_stfs->f_fsid.val[1]);
__put_user(stfs.f_namelen, &target_stfs->f_namelen);
__put_user(stfs.f_frsize, &target_stfs->f_frsize);
-#ifdef _STATFS_F_FLAGS
__put_user(stfs.f_flags, &target_stfs->f_flags);
-#else
- __put_user(0, &target_stfs->f_flags);
-#endif
memset(target_stfs->f_spare, 0, sizeof(target_stfs->f_spare));
unlock_user_struct(target_stfs, arg3, 1);
}
--
2.47.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 2/3] linux-user/syscall.c: consolidate statfs calls
2026-01-13 12:59 [PATCH trivial 0/7] assume some linux syscalls are always present: epoll, splice, inotify Michael Tokarev
2026-01-13 12:59 ` [PATCH trivial 1/7] linux-user/syscall.c: assume splice is always present Michael Tokarev
2026-01-13 13:00 ` [PATCH 1/3] linux-user/syscall.c: statfs: f_flags " Michael Tokarev
@ 2026-01-13 13:00 ` Michael Tokarev
2026-01-13 13:00 ` [PATCH trivial 2/7] meson.build: stop checking for splice() Michael Tokarev
` (6 subsequent siblings)
9 siblings, 0 replies; 21+ messages in thread
From: Michael Tokarev @ 2026-01-13 13:00 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Michael Tokarev
group statfs&fstatfs together, eliminate goto into
a different case label, eliminate struct statfs global
to all syscalls. Ditto for statfs64.
This makes code more readable and less scattered.
While at it, drop `#ifdef TARGET_NR_fstatfs` -- assume fstatfs()
is present together with statfs() - just like for fstatfs64.
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
---
linux-user/syscall.c | 62 +++++++++++++++++++++++---------------------
1 file changed, 32 insertions(+), 30 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index d32299dddb..1f84c296d5 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -9457,10 +9457,6 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
|| defined(TARGET_NR_fstat) || defined(TARGET_NR_fstat64) \
|| defined(TARGET_NR_statx)
struct stat st;
-#endif
-#if defined(TARGET_NR_statfs) || defined(TARGET_NR_statfs64) \
- || defined(TARGET_NR_fstatfs)
- struct statfs stfs;
#endif
void *p;
@@ -10978,15 +10974,22 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
return get_errno(setpriority(arg1, arg2, arg3));
#ifdef TARGET_NR_statfs
case TARGET_NR_statfs:
- if (!(p = lock_user_string(arg1))) {
- return -TARGET_EFAULT;
- }
- ret = get_errno(statfs(path(p), &stfs));
- unlock_user(p, arg1, 0);
- convert_statfs:
- if (!is_error(ret)) {
+ case TARGET_NR_fstatfs:
+ {
+ struct statf stfs;
struct target_statfs *target_stfs;
-
+ if (num == TARGET_NR_statfs) {
+ if (!(p = lock_user_string(arg1))) {
+ return -TARGET_EFAULT;
+ }
+ ret = get_errno(statfs(path(p), &stfs));
+ unlock_user(p, arg1, 0);
+ } else /* if (num == TARGET_NR_fstatfs) */ {
+ ret = get_errno(fstatfs(arg1, &stfs));
+ }
+ if (is_error(ret)) {
+ return ret;
+ }
if (!lock_user_struct(VERIFY_WRITE, target_stfs, arg2, 0))
return -TARGET_EFAULT;
__put_user(stfs.f_type, &target_stfs->f_type);
@@ -11003,25 +11006,27 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
__put_user(stfs.f_flags, &target_stfs->f_flags);
memset(target_stfs->f_spare, 0, sizeof(target_stfs->f_spare));
unlock_user_struct(target_stfs, arg2, 1);
+ return ret;
}
- return ret;
-#endif
-#ifdef TARGET_NR_fstatfs
- case TARGET_NR_fstatfs:
- ret = get_errno(fstatfs(arg1, &stfs));
- goto convert_statfs;
#endif
#ifdef TARGET_NR_statfs64
case TARGET_NR_statfs64:
- if (!(p = lock_user_string(arg1))) {
- return -TARGET_EFAULT;
- }
- ret = get_errno(statfs(path(p), &stfs));
- unlock_user(p, arg1, 0);
- convert_statfs64:
- if (!is_error(ret)) {
+ case TARGET_NR_fstatfs64:
+ {
+ struct statfs stfs;
struct target_statfs64 *target_stfs;
-
+ if (num == TARGET_NR_statfs64) {
+ if (!(p = lock_user_string(arg1))) {
+ return -TARGET_EFAULT;
+ }
+ ret = get_errno(statfs(path(p), &stfs));
+ unlock_user(p, arg1, 0);
+ } else /* if (num == TARGET_NR_fstatfs64) */ {
+ ret = get_errno(fstatfs(arg1, &stfs));
+ }
+ if (is_error(ret)) {
+ return ret;
+ }
if (!lock_user_struct(VERIFY_WRITE, target_stfs, arg3, 0))
return -TARGET_EFAULT;
__put_user(stfs.f_type, &target_stfs->f_type);
@@ -11038,11 +11043,8 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
__put_user(stfs.f_flags, &target_stfs->f_flags);
memset(target_stfs->f_spare, 0, sizeof(target_stfs->f_spare));
unlock_user_struct(target_stfs, arg3, 1);
+ return ret;
}
- return ret;
- case TARGET_NR_fstatfs64:
- ret = get_errno(fstatfs(arg1, &stfs));
- goto convert_statfs64;
#endif
#ifdef TARGET_NR_socketcall
case TARGET_NR_socketcall:
--
2.47.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH trivial 2/7] meson.build: stop checking for splice()
2026-01-13 12:59 [PATCH trivial 0/7] assume some linux syscalls are always present: epoll, splice, inotify Michael Tokarev
` (2 preceding siblings ...)
2026-01-13 13:00 ` [PATCH 2/3] linux-user/syscall.c: consolidate statfs calls Michael Tokarev
@ 2026-01-13 13:00 ` Michael Tokarev
2026-01-19 1:21 ` Richard Henderson
2026-01-13 13:00 ` [PATCH trivial 3/7] linux-user: assume inotify sycalls are always present Michael Tokarev
` (5 subsequent siblings)
9 siblings, 1 reply; 21+ messages in thread
From: Michael Tokarev @ 2026-01-13 13:00 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Michael Tokarev
CONFIG_SPLICE was only needed for linux-user/, where it is not
used anymore (assuming splice &Co is always present)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
---
meson.build | 8 --------
1 file changed, 8 deletions(-)
diff --git a/meson.build b/meson.build
index c58007291a..9b5f1540ff 100644
--- a/meson.build
+++ b/meson.build
@@ -2913,14 +2913,6 @@ config_host_data.set('CONFIG_PTHREAD_AFFINITY_NP', cc.links(osdep_prefix + '''
config_host_data.set('CONFIG_SIGNALFD', cc.links(osdep_prefix + '''
#include <sys/signalfd.h>
int main(void) { return signalfd(-1, NULL, SFD_CLOEXEC); }'''))
-config_host_data.set('CONFIG_SPLICE', cc.links(osdep_prefix + '''
- int main(void)
- {
- int len, fd = 0;
- len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
- splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
- return 0;
- }'''))
config_host_data.set('HAVE_MLOCKALL', cc.links(osdep_prefix + '''
#include <sys/mman.h>
--
2.47.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH trivial 3/7] linux-user: assume inotify sycalls are always present
2026-01-13 12:59 [PATCH trivial 0/7] assume some linux syscalls are always present: epoll, splice, inotify Michael Tokarev
` (3 preceding siblings ...)
2026-01-13 13:00 ` [PATCH trivial 2/7] meson.build: stop checking for splice() Michael Tokarev
@ 2026-01-13 13:00 ` Michael Tokarev
2026-01-19 1:23 ` Richard Henderson
2026-01-13 13:00 ` [PATCH RFC 3/3] linux-user/syscall.c: consolidate statfs calls further Michael Tokarev
` (4 subsequent siblings)
9 siblings, 1 reply; 21+ messages in thread
From: Michael Tokarev @ 2026-01-13 13:00 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Michael Tokarev
inotify_init() and other syscalls appeared in linux 2.6.13,
inotify_init1() - in linux 2.6.27.
There's no need to check their presence on linux anymore.
Keep condition on TARGET_NR_inotify_init because modern
architectures have only more generic inotify_init1().
Other, not linux-specific, places of the code checks for
inotify_init1() syscall only.
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
---
linux-user/fd-trans.c | 5 -----
linux-user/fd-trans.h | 4 ----
linux-user/syscall.c | 19 ++-----------------
3 files changed, 2 insertions(+), 26 deletions(-)
diff --git a/linux-user/fd-trans.c b/linux-user/fd-trans.c
index f83d1f79d5..64dd0745d2 100644
--- a/linux-user/fd-trans.c
+++ b/linux-user/fd-trans.c
@@ -18,9 +18,7 @@
#include <sys/signalfd.h>
#include <linux/unistd.h>
#include <linux/audit.h>
-#ifdef CONFIG_INOTIFY
#include <sys/inotify.h>
-#endif
#include <linux/netlink.h>
#ifdef CONFIG_RTNETLINK
#include <linux/rtnetlink.h>
@@ -1861,8 +1859,6 @@ TargetFdTrans target_timerfd_trans = {
.host_to_target_data = swap_data_u64,
};
-#if defined(CONFIG_INOTIFY) && (defined(TARGET_NR_inotify_init) || \
- defined(TARGET_NR_inotify_init1))
static abi_long host_to_target_data_inotify(void *buf, size_t len)
{
struct inotify_event *ev;
@@ -1885,4 +1881,3 @@ static abi_long host_to_target_data_inotify(void *buf, size_t len)
TargetFdTrans target_inotify_trans = {
.host_to_target_data = host_to_target_data_inotify,
};
-#endif
diff --git a/linux-user/fd-trans.h b/linux-user/fd-trans.h
index e14f96059c..3bbc15fa1f 100644
--- a/linux-user/fd-trans.h
+++ b/linux-user/fd-trans.h
@@ -141,9 +141,5 @@ extern TargetFdTrans target_netlink_audit_trans;
extern TargetFdTrans target_signalfd_trans;
extern TargetFdTrans target_eventfd_trans;
extern TargetFdTrans target_timerfd_trans;
-#if (defined(TARGET_NR_inotify_init) && defined(__NR_inotify_init)) || \
- (defined(CONFIG_INOTIFY1) && defined(TARGET_NR_inotify_init1) && \
- defined(__NR_inotify_init1))
extern TargetFdTrans target_inotify_trans;
#endif
-#endif
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 9cc9ed2fbc..fad2bf3632 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -497,15 +497,7 @@ static int sys_renameat2(int oldfd, const char *old,
#endif
#endif /* TARGET_NR_renameat2 */
-#ifdef CONFIG_INOTIFY
#include <sys/inotify.h>
-#else
-/* Userspace can usually survive runtime without inotify */
-#undef TARGET_NR_inotify_init
-#undef TARGET_NR_inotify_init1
-#undef TARGET_NR_inotify_add_watch
-#undef TARGET_NR_inotify_rm_watch
-#endif /* CONFIG_INOTIFY */
#if defined(TARGET_NR_prlimit64)
#ifndef __NR_prlimit64
@@ -13267,8 +13259,8 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
case TARGET_NR_futex_time64:
return do_futex(cpu, true, arg1, arg2, arg3, arg4, arg5, arg6);
#endif
-#ifdef CONFIG_INOTIFY
-#if defined(TARGET_NR_inotify_init)
+
+#ifdef TARGET_NR_inotify_init
case TARGET_NR_inotify_init:
ret = get_errno(inotify_init());
if (ret >= 0) {
@@ -13276,7 +13268,6 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
}
return ret;
#endif
-#if defined(TARGET_NR_inotify_init1) && defined(CONFIG_INOTIFY1)
case TARGET_NR_inotify_init1:
ret = get_errno(inotify_init1(target_to_host_bitmask(arg1,
fcntl_flags_tbl)));
@@ -13284,19 +13275,13 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
fd_trans_register(ret, &target_inotify_trans);
}
return ret;
-#endif
-#if defined(TARGET_NR_inotify_add_watch)
case TARGET_NR_inotify_add_watch:
p = lock_user_string(arg2);
ret = get_errno(inotify_add_watch(arg1, path(p), arg3));
unlock_user(p, arg2, 0);
return ret;
-#endif
-#if defined(TARGET_NR_inotify_rm_watch)
case TARGET_NR_inotify_rm_watch:
return get_errno(inotify_rm_watch(arg1, arg2));
-#endif
-#endif
#if defined(TARGET_NR_mq_open) && defined(__NR_mq_open)
case TARGET_NR_mq_open:
--
2.47.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH RFC 3/3] linux-user/syscall.c: consolidate statfs calls further
2026-01-13 12:59 [PATCH trivial 0/7] assume some linux syscalls are always present: epoll, splice, inotify Michael Tokarev
` (4 preceding siblings ...)
2026-01-13 13:00 ` [PATCH trivial 3/7] linux-user: assume inotify sycalls are always present Michael Tokarev
@ 2026-01-13 13:00 ` Michael Tokarev
2026-01-13 13:00 ` [PATCH trivial 4/7] meson.build: stop checking for inotify_init() Michael Tokarev
` (3 subsequent siblings)
9 siblings, 0 replies; 21+ messages in thread
From: Michael Tokarev @ 2026-01-13 13:00 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Michael Tokarev
Since statfs & statfs64 implementations are exactly the same,
differs only in "64" suffix, merge them into one using a common
macro.
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
---
linux-user/syscall.c | 110 ++++++++++++++++---------------------------
1 file changed, 40 insertions(+), 70 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 1f84c296d5..1b888bccfc 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -10972,80 +10972,50 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
return ret;
case TARGET_NR_setpriority:
return get_errno(setpriority(arg1, arg2, arg3));
-#ifdef TARGET_NR_statfs
- case TARGET_NR_statfs:
- case TARGET_NR_fstatfs:
- {
- struct statf stfs;
- struct target_statfs *target_stfs;
- if (num == TARGET_NR_statfs) {
- if (!(p = lock_user_string(arg1))) {
- return -TARGET_EFAULT;
- }
- ret = get_errno(statfs(path(p), &stfs));
- unlock_user(p, arg1, 0);
- } else /* if (num == TARGET_NR_fstatfs) */ {
- ret = get_errno(fstatfs(arg1, &stfs));
- }
- if (is_error(ret)) {
- return ret;
- }
- if (!lock_user_struct(VERIFY_WRITE, target_stfs, arg2, 0))
- return -TARGET_EFAULT;
- __put_user(stfs.f_type, &target_stfs->f_type);
- __put_user(stfs.f_bsize, &target_stfs->f_bsize);
- __put_user(stfs.f_blocks, &target_stfs->f_blocks);
- __put_user(stfs.f_bfree, &target_stfs->f_bfree);
- __put_user(stfs.f_bavail, &target_stfs->f_bavail);
- __put_user(stfs.f_files, &target_stfs->f_files);
- __put_user(stfs.f_ffree, &target_stfs->f_ffree);
- __put_user(stfs.f_fsid.__val[0], &target_stfs->f_fsid.val[0]);
- __put_user(stfs.f_fsid.__val[1], &target_stfs->f_fsid.val[1]);
- __put_user(stfs.f_namelen, &target_stfs->f_namelen);
- __put_user(stfs.f_frsize, &target_stfs->f_frsize);
- __put_user(stfs.f_flags, &target_stfs->f_flags);
- memset(target_stfs->f_spare, 0, sizeof(target_stfs->f_spare));
- unlock_user_struct(target_stfs, arg2, 1);
- return ret;
+
+#define statfs_fstatfs_impl(variant) /* variant is statfs or statfs64 */ \
+ case TARGET_NR_##variant: \
+ case TARGET_NR_f##variant: \
+ { \
+ struct statfs stfs; \
+ struct target_##variant *target_stfs; \
+ if (num == TARGET_NR_##variant) { \
+ if (!(p = lock_user_string(arg1))) { \
+ return -TARGET_EFAULT; \
+ } \
+ ret = get_errno(statfs(path(p), &stfs)); \
+ unlock_user(p, arg1, 0); \
+ } else /* if (num == TARGET_NR_f##variant) */ { \
+ ret = get_errno(fstatfs(arg1, &stfs)); \
+ } \
+ if (is_error(ret)) { \
+ return ret; \
+ } \
+ if (!lock_user_struct(VERIFY_WRITE, target_stfs, arg2, 0)) \
+ return -TARGET_EFAULT; \
+ __put_user(stfs.f_type, &target_stfs->f_type); \
+ __put_user(stfs.f_bsize, &target_stfs->f_bsize); \
+ __put_user(stfs.f_blocks, &target_stfs->f_blocks); \
+ __put_user(stfs.f_bfree, &target_stfs->f_bfree); \
+ __put_user(stfs.f_bavail, &target_stfs->f_bavail); \
+ __put_user(stfs.f_files, &target_stfs->f_files); \
+ __put_user(stfs.f_ffree, &target_stfs->f_ffree); \
+ __put_user(stfs.f_fsid.__val[0], &target_stfs->f_fsid.val[0]); \
+ __put_user(stfs.f_fsid.__val[1], &target_stfs->f_fsid.val[1]); \
+ __put_user(stfs.f_namelen, &target_stfs->f_namelen); \
+ __put_user(stfs.f_frsize, &target_stfs->f_frsize); \
+ __put_user(stfs.f_flags, &target_stfs->f_flags); \
+ memset(target_stfs->f_spare, 0, sizeof(target_stfs->f_spare)); \
+ unlock_user_struct(target_stfs, arg2, 1); \
+ return ret; \
}
+#ifdef TARGET_NR_statfs
+ statfs_fstatfs_impl(statfs);
#endif
#ifdef TARGET_NR_statfs64
- case TARGET_NR_statfs64:
- case TARGET_NR_fstatfs64:
- {
- struct statfs stfs;
- struct target_statfs64 *target_stfs;
- if (num == TARGET_NR_statfs64) {
- if (!(p = lock_user_string(arg1))) {
- return -TARGET_EFAULT;
- }
- ret = get_errno(statfs(path(p), &stfs));
- unlock_user(p, arg1, 0);
- } else /* if (num == TARGET_NR_fstatfs64) */ {
- ret = get_errno(fstatfs(arg1, &stfs));
- }
- if (is_error(ret)) {
- return ret;
- }
- if (!lock_user_struct(VERIFY_WRITE, target_stfs, arg3, 0))
- return -TARGET_EFAULT;
- __put_user(stfs.f_type, &target_stfs->f_type);
- __put_user(stfs.f_bsize, &target_stfs->f_bsize);
- __put_user(stfs.f_blocks, &target_stfs->f_blocks);
- __put_user(stfs.f_bfree, &target_stfs->f_bfree);
- __put_user(stfs.f_bavail, &target_stfs->f_bavail);
- __put_user(stfs.f_files, &target_stfs->f_files);
- __put_user(stfs.f_ffree, &target_stfs->f_ffree);
- __put_user(stfs.f_fsid.__val[0], &target_stfs->f_fsid.val[0]);
- __put_user(stfs.f_fsid.__val[1], &target_stfs->f_fsid.val[1]);
- __put_user(stfs.f_namelen, &target_stfs->f_namelen);
- __put_user(stfs.f_frsize, &target_stfs->f_frsize);
- __put_user(stfs.f_flags, &target_stfs->f_flags);
- memset(target_stfs->f_spare, 0, sizeof(target_stfs->f_spare));
- unlock_user_struct(target_stfs, arg3, 1);
- return ret;
- }
+ statfs_fstatfs_impl(statfs64);
#endif
+
#ifdef TARGET_NR_socketcall
case TARGET_NR_socketcall:
return do_socketcall(arg1, arg2);
--
2.47.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH trivial 4/7] meson.build: stop checking for inotify_init()
2026-01-13 12:59 [PATCH trivial 0/7] assume some linux syscalls are always present: epoll, splice, inotify Michael Tokarev
` (5 preceding siblings ...)
2026-01-13 13:00 ` [PATCH RFC 3/3] linux-user/syscall.c: consolidate statfs calls further Michael Tokarev
@ 2026-01-13 13:00 ` Michael Tokarev
2026-01-13 13:00 ` [PATCH trivial 5/7] linux-user: assume epoll is always present Michael Tokarev
` (2 subsequent siblings)
9 siblings, 0 replies; 21+ messages in thread
From: Michael Tokarev @ 2026-01-13 13:00 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Michael Tokarev
the only place in qemu which used the check for inotify_init()
was linux-user, which now assumes inotify_init() is always
present. There's no need to check for this function anymore.
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
---
meson.build | 1 -
1 file changed, 1 deletion(-)
diff --git a/meson.build b/meson.build
index 9b5f1540ff..6ea49c6fc0 100644
--- a/meson.build
+++ b/meson.build
@@ -2709,7 +2709,6 @@ if (have_inotify_init or have_inotify_init1) and host_os == 'freebsd'
have_inotify_init1 = inotify.found()
endif
endif
-config_host_data.set('CONFIG_INOTIFY', have_inotify_init)
config_host_data.set('CONFIG_INOTIFY1', have_inotify_init1)
# has_header_symbol
--
2.47.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH trivial 5/7] linux-user: assume epoll is always present
2026-01-13 12:59 [PATCH trivial 0/7] assume some linux syscalls are always present: epoll, splice, inotify Michael Tokarev
` (6 preceding siblings ...)
2026-01-13 13:00 ` [PATCH trivial 4/7] meson.build: stop checking for inotify_init() Michael Tokarev
@ 2026-01-13 13:00 ` Michael Tokarev
2026-01-19 1:25 ` Richard Henderson
2026-01-13 13:00 ` [PATCH trivial 6/7] meson.build: do not check for epoll.h (CONFIG_EPOLL) Michael Tokarev
2026-01-13 13:00 ` [PATCH trivial 7/7] rename CONFIG_EPOLL_CREATE1 to CONFIG_EPOLL Michael Tokarev
9 siblings, 1 reply; 21+ messages in thread
From: Michael Tokarev @ 2026-01-13 13:00 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Michael Tokarev
epoll is in linux since 2.6. epoll_init1 has been
added in 2.6.27. There's no need to check for its
presence, including all other epoll-related syscalls.
Modern architectures don't have epoll_create(), only
epoll_create1(), so keep conditional around the former.
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
---
linux-user/syscall.c | 10 ++--------
linux-user/syscall_defs.h | 3 ---
2 files changed, 2 insertions(+), 11 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index fad2bf3632..207c54db02 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -72,9 +72,7 @@
#ifdef CONFIG_EVENTFD
#include <sys/eventfd.h>
#endif
-#ifdef CONFIG_EPOLL
#include <sys/epoll.h>
-#endif
#ifdef CONFIG_ATTR
#include "qemu/xattr.h"
#endif
@@ -13558,16 +13556,13 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
case TARGET_NR_signalfd:
return do_signalfd4(arg1, arg2, 0);
#endif
-#if defined(CONFIG_EPOLL)
+
#if defined(TARGET_NR_epoll_create)
case TARGET_NR_epoll_create:
return get_errno(epoll_create(arg1));
#endif
-#if defined(TARGET_NR_epoll_create1) && defined(CONFIG_EPOLL_CREATE1)
case TARGET_NR_epoll_create1:
return get_errno(epoll_create1(target_to_host_bitmask(arg1, fcntl_flags_tbl)));
-#endif
-#if defined(TARGET_NR_epoll_ctl)
case TARGET_NR_epoll_ctl:
{
struct epoll_event ep;
@@ -13596,7 +13591,6 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
}
return get_errno(epoll_ctl(arg1, arg2, arg3, epp));
}
-#endif
#if defined(TARGET_NR_epoll_wait)
case TARGET_NR_epoll_wait:
@@ -13682,7 +13676,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
g_free(ep);
return ret;
}
-#endif /* CONFIG_EPOLL */
+
#ifdef TARGET_NR_prlimit64
case TARGET_NR_prlimit64:
{
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index cd9ff709b8..20e2e7deac 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -2595,7 +2595,6 @@ struct target_drm_i915_getparam {
#define FUTEX_CLOCK_REALTIME 256
#define FUTEX_CMD_MASK ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME)
-#ifdef CONFIG_EPOLL
#if defined(TARGET_X86_64)
#define TARGET_EPOLL_PACKED QEMU_PACKED
#else
@@ -2616,8 +2615,6 @@ struct target_epoll_event {
#define TARGET_EP_MAX_EVENTS (INT_MAX / sizeof(struct target_epoll_event))
-#endif
-
struct target_ucred {
abi_uint pid;
abi_uint uid;
--
2.47.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH trivial 6/7] meson.build: do not check for epoll.h (CONFIG_EPOLL)
2026-01-13 12:59 [PATCH trivial 0/7] assume some linux syscalls are always present: epoll, splice, inotify Michael Tokarev
` (7 preceding siblings ...)
2026-01-13 13:00 ` [PATCH trivial 5/7] linux-user: assume epoll is always present Michael Tokarev
@ 2026-01-13 13:00 ` Michael Tokarev
2026-01-19 1:26 ` Richard Henderson
2026-01-13 13:00 ` [PATCH trivial 7/7] rename CONFIG_EPOLL_CREATE1 to CONFIG_EPOLL Michael Tokarev
9 siblings, 1 reply; 21+ messages in thread
From: Michael Tokarev @ 2026-01-13 13:00 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Michael Tokarev
The only place where we used CONFIG_EPOLL was linux-user,
which now enables it unconditionally.
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
---
meson.build | 1 -
1 file changed, 1 deletion(-)
diff --git a/meson.build b/meson.build
index 6ea49c6fc0..f8b4f06049 100644
--- a/meson.build
+++ b/meson.build
@@ -2617,7 +2617,6 @@ config_host_data.set('CONFIG_FSFREEZE', qga_fsfreeze)
config_host_data.set('CONFIG_FSTRIM', qga_fstrim)
# has_header
-config_host_data.set('CONFIG_EPOLL', cc.has_header('sys/epoll.h'))
config_host_data.set('CONFIG_LINUX_MAGIC_H', cc.has_header('linux/magic.h'))
valgrind = false
if get_option('valgrind').allowed()
--
2.47.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH trivial 7/7] rename CONFIG_EPOLL_CREATE1 to CONFIG_EPOLL
2026-01-13 12:59 [PATCH trivial 0/7] assume some linux syscalls are always present: epoll, splice, inotify Michael Tokarev
` (8 preceding siblings ...)
2026-01-13 13:00 ` [PATCH trivial 6/7] meson.build: do not check for epoll.h (CONFIG_EPOLL) Michael Tokarev
@ 2026-01-13 13:00 ` Michael Tokarev
2026-01-19 1:28 ` Richard Henderson
9 siblings, 1 reply; 21+ messages in thread
From: Michael Tokarev @ 2026-01-13 13:00 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, Michael Tokarev
Since CONFIG_EPOLL is now unused, it's okay to
perform this rename, to make it less ugly.
Since epoll is linux-specific and is always
present, we might as well make CONFIG_EPOLL equal
to CONFIG_LINUX.
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
---
meson.build | 2 +-
util/aio-posix.h | 4 ++--
util/meson.build | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/meson.build b/meson.build
index f8b4f06049..552b34f34e 100644
--- a/meson.build
+++ b/meson.build
@@ -2713,7 +2713,7 @@ config_host_data.set('CONFIG_INOTIFY1', have_inotify_init1)
# has_header_symbol
config_host_data.set('CONFIG_BLKZONED',
cc.has_header_symbol('linux/blkzoned.h', 'BLKOPENZONE'))
-config_host_data.set('CONFIG_EPOLL_CREATE1',
+config_host_data.set('CONFIG_EPOLL',
cc.has_header_symbol('sys/epoll.h', 'epoll_create1'))
config_host_data.set('CONFIG_FALLOCATE_PUNCH_HOLE',
cc.has_header_symbol('linux/falloc.h', 'FALLOC_FL_PUNCH_HOLE') and
diff --git a/util/aio-posix.h b/util/aio-posix.h
index 0cedb8d189..ab894a3c0f 100644
--- a/util/aio-posix.h
+++ b/util/aio-posix.h
@@ -52,7 +52,7 @@ extern const FDMonOps fdmon_poll_ops;
/* Switch back to poll(2). list_lock must be held. */
void fdmon_poll_downgrade(AioContext *ctx);
-#ifdef CONFIG_EPOLL_CREATE1
+#ifdef CONFIG_EPOLL
bool fdmon_epoll_try_upgrade(AioContext *ctx, unsigned npfd);
void fdmon_epoll_setup(AioContext *ctx);
@@ -71,7 +71,7 @@ static inline void fdmon_epoll_setup(AioContext *ctx)
static inline void fdmon_epoll_disable(AioContext *ctx)
{
}
-#endif /* !CONFIG_EPOLL_CREATE1 */
+#endif /* !CONFIG_EPOLL */
#ifdef CONFIG_LINUX_IO_URING
bool fdmon_io_uring_setup(AioContext *ctx, Error **errp);
diff --git a/util/meson.build b/util/meson.build
index 35029380a3..44f0312e8c 100644
--- a/util/meson.build
+++ b/util/meson.build
@@ -6,7 +6,7 @@ endif
if host_os != 'windows'
util_ss.add(files('aio-posix.c'))
util_ss.add(files('fdmon-poll.c'))
- if config_host_data.get('CONFIG_EPOLL_CREATE1')
+ if config_host_data.get('CONFIG_EPOLL')
util_ss.add(files('fdmon-epoll.c'))
endif
util_ss.add(files('compatfd.c'))
--
2.47.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 1/3] linux-user/syscall.c: statfs: f_flags is always present
2026-01-13 13:00 ` [PATCH 1/3] linux-user/syscall.c: statfs: f_flags " Michael Tokarev
@ 2026-01-13 13:04 ` Michael Tokarev
0 siblings, 0 replies; 21+ messages in thread
From: Michael Tokarev @ 2026-01-13 13:04 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial
On 1/13/26 16:00, Michael Tokarev wrote:
> statfs.f_flags is present since linux 2.6.
> There's no need to check for its existance anymore.
This is a re-send of previous 3-patch series. Please
ignore the N/3 patches, only N/7 is relevant :)
I'm sorry for this.
/mjt
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH trivial 1/7] linux-user/syscall.c: assume splice is always present
2026-01-13 12:59 ` [PATCH trivial 1/7] linux-user/syscall.c: assume splice is always present Michael Tokarev
@ 2026-01-13 13:11 ` Peter Maydell
2026-01-19 1:20 ` Richard Henderson
1 sibling, 0 replies; 21+ messages in thread
From: Peter Maydell @ 2026-01-13 13:11 UTC (permalink / raw)
To: Michael Tokarev; +Cc: qemu-devel, qemu-trivial
On Tue, 13 Jan 2026 at 13:00, Michael Tokarev <mjt@tls.msk.ru> wrote:
>
> splice() &Co are defined since linux 2.6.17.
> Assume it is always present.
Since we're calling the C functions here, the
relevant version is glibc 2.5, but either way these
have been around way longer than our minimum supported
version.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
thanks
-- PMM
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH trivial 1/7] linux-user/syscall.c: assume splice is always present
2026-01-13 12:59 ` [PATCH trivial 1/7] linux-user/syscall.c: assume splice is always present Michael Tokarev
2026-01-13 13:11 ` Peter Maydell
@ 2026-01-19 1:20 ` Richard Henderson
1 sibling, 0 replies; 21+ messages in thread
From: Richard Henderson @ 2026-01-19 1:20 UTC (permalink / raw)
To: Michael Tokarev, qemu-devel; +Cc: qemu-trivial
On 1/13/26 23:59, Michael Tokarev wrote:
> splice() &Co are defined since linux 2.6.17.
> Assume it is always present.
>
> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
> ---
> linux-user/syscall.c | 15 +++------------
> 1 file changed, 3 insertions(+), 12 deletions(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Separately, I wonder if these require safe_* versions to properly handle restart from
signal delivery during a blocking operation.
r~
>
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 67ad681098..9cc9ed2fbc 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -13450,15 +13450,9 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
> return ret;
> #endif
>
> -#ifdef CONFIG_SPLICE
> -#ifdef TARGET_NR_tee
> case TARGET_NR_tee:
> - {
> - ret = get_errno(tee(arg1,arg2,arg3,arg4));
> - }
> + ret = get_errno(tee(arg1, arg2, arg3, arg4));
> return ret;
> -#endif
> -#ifdef TARGET_NR_splice
> case TARGET_NR_splice:
> {
> loff_t loff_in, loff_out;
> @@ -13488,9 +13482,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
> }
> }
> return ret;
> -#endif
> -#ifdef TARGET_NR_vmsplice
> - case TARGET_NR_vmsplice:
> + case TARGET_NR_vmsplice:
> {
> struct iovec *vec = lock_iovec(VERIFY_READ, arg2, arg3, 1);
> if (vec != NULL) {
> @@ -13501,8 +13493,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
> }
> }
> return ret;
> -#endif
> -#endif /* CONFIG_SPLICE */
> +
> #ifdef CONFIG_EVENTFD
> #if defined(TARGET_NR_eventfd)
> case TARGET_NR_eventfd:
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH trivial 2/7] meson.build: stop checking for splice()
2026-01-13 13:00 ` [PATCH trivial 2/7] meson.build: stop checking for splice() Michael Tokarev
@ 2026-01-19 1:21 ` Richard Henderson
0 siblings, 0 replies; 21+ messages in thread
From: Richard Henderson @ 2026-01-19 1:21 UTC (permalink / raw)
To: Michael Tokarev, qemu-devel; +Cc: qemu-trivial
On 1/14/26 00:00, Michael Tokarev wrote:
> CONFIG_SPLICE was only needed for linux-user/, where it is not
> used anymore (assuming splice &Co is always present)
>
> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
> ---
> meson.build | 8 --------
> 1 file changed, 8 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index c58007291a..9b5f1540ff 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -2913,14 +2913,6 @@ config_host_data.set('CONFIG_PTHREAD_AFFINITY_NP', cc.links(osdep_prefix + '''
> config_host_data.set('CONFIG_SIGNALFD', cc.links(osdep_prefix + '''
> #include <sys/signalfd.h>
> int main(void) { return signalfd(-1, NULL, SFD_CLOEXEC); }'''))
> -config_host_data.set('CONFIG_SPLICE', cc.links(osdep_prefix + '''
> - int main(void)
> - {
> - int len, fd = 0;
> - len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
> - splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
> - return 0;
> - }'''))
>
> config_host_data.set('HAVE_MLOCKALL', cc.links(osdep_prefix + '''
> #include <sys/mman.h>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH trivial 3/7] linux-user: assume inotify sycalls are always present
2026-01-13 13:00 ` [PATCH trivial 3/7] linux-user: assume inotify sycalls are always present Michael Tokarev
@ 2026-01-19 1:23 ` Richard Henderson
0 siblings, 0 replies; 21+ messages in thread
From: Richard Henderson @ 2026-01-19 1:23 UTC (permalink / raw)
To: qemu-devel
On 1/14/26 00:00, Michael Tokarev wrote:
> inotify_init() and other syscalls appeared in linux 2.6.13,
> inotify_init1() - in linux 2.6.27.
>
> There's no need to check their presence on linux anymore.
>
> Keep condition on TARGET_NR_inotify_init because modern
> architectures have only more generic inotify_init1().
>
> Other, not linux-specific, places of the code checks for
> inotify_init1() syscall only.
>
> Signed-off-by: Michael Tokarev<mjt@tls.msk.ru>
> ---
> linux-user/fd-trans.c | 5 -----
> linux-user/fd-trans.h | 4 ----
> linux-user/syscall.c | 19 ++-----------------
> 3 files changed, 2 insertions(+), 26 deletions(-)
As Peter mentioned vs patch 1, the relevant version is glibc 2.4.
But again, well within the minimum supported version.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH trivial 5/7] linux-user: assume epoll is always present
2026-01-13 13:00 ` [PATCH trivial 5/7] linux-user: assume epoll is always present Michael Tokarev
@ 2026-01-19 1:25 ` Richard Henderson
0 siblings, 0 replies; 21+ messages in thread
From: Richard Henderson @ 2026-01-19 1:25 UTC (permalink / raw)
To: Michael Tokarev, qemu-devel; +Cc: qemu-trivial
On 1/14/26 00:00, Michael Tokarev wrote:
> epoll is in linux since 2.6. epoll_init1 has been
> added in 2.6.27. There's no need to check for its
> presence, including all other epoll-related syscalls.
>
> Modern architectures don't have epoll_create(), only
> epoll_create1(), so keep conditional around the former.
>
> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
> ---
> linux-user/syscall.c | 10 ++--------
> linux-user/syscall_defs.h | 3 ---
> 2 files changed, 2 insertions(+), 11 deletions(-)
glibc 2.9 for epoll_create1; 2.3.2 for the others.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH trivial 6/7] meson.build: do not check for epoll.h (CONFIG_EPOLL)
2026-01-13 13:00 ` [PATCH trivial 6/7] meson.build: do not check for epoll.h (CONFIG_EPOLL) Michael Tokarev
@ 2026-01-19 1:26 ` Richard Henderson
0 siblings, 0 replies; 21+ messages in thread
From: Richard Henderson @ 2026-01-19 1:26 UTC (permalink / raw)
To: Michael Tokarev, qemu-devel; +Cc: qemu-trivial
On 1/14/26 00:00, Michael Tokarev wrote:
> The only place where we used CONFIG_EPOLL was linux-user,
> which now enables it unconditionally.
>
> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
> ---
> meson.build | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/meson.build b/meson.build
> index 6ea49c6fc0..f8b4f06049 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -2617,7 +2617,6 @@ config_host_data.set('CONFIG_FSFREEZE', qga_fsfreeze)
> config_host_data.set('CONFIG_FSTRIM', qga_fstrim)
>
> # has_header
> -config_host_data.set('CONFIG_EPOLL', cc.has_header('sys/epoll.h'))
> config_host_data.set('CONFIG_LINUX_MAGIC_H', cc.has_header('linux/magic.h'))
> valgrind = false
> if get_option('valgrind').allowed()
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH trivial 7/7] rename CONFIG_EPOLL_CREATE1 to CONFIG_EPOLL
2026-01-13 13:00 ` [PATCH trivial 7/7] rename CONFIG_EPOLL_CREATE1 to CONFIG_EPOLL Michael Tokarev
@ 2026-01-19 1:28 ` Richard Henderson
2026-01-19 7:50 ` Michael Tokarev
0 siblings, 1 reply; 21+ messages in thread
From: Richard Henderson @ 2026-01-19 1:28 UTC (permalink / raw)
To: Michael Tokarev, qemu-devel; +Cc: qemu-trivial
On 1/14/26 00:00, Michael Tokarev wrote:
> Since CONFIG_EPOLL is now unused, it's okay to
> perform this rename, to make it less ugly.
>
> Since epoll is linux-specific and is always
> present, we might as well make CONFIG_EPOLL equal
> to CONFIG_LINUX.
>
> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
> ---
> meson.build | 2 +-
> util/aio-posix.h | 4 ++--
> util/meson.build | 2 +-
> 3 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index f8b4f06049..552b34f34e 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -2713,7 +2713,7 @@ config_host_data.set('CONFIG_INOTIFY1', have_inotify_init1)
> # has_header_symbol
> config_host_data.set('CONFIG_BLKZONED',
> cc.has_header_symbol('linux/blkzoned.h', 'BLKOPENZONE'))
> -config_host_data.set('CONFIG_EPOLL_CREATE1',
> +config_host_data.set('CONFIG_EPOLL',
> cc.has_header_symbol('sys/epoll.h', 'epoll_create1'))
This is present in glibc 2.9, which is required.
Therefore you can drop this bit of configuration as well.
r~
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH trivial 7/7] rename CONFIG_EPOLL_CREATE1 to CONFIG_EPOLL
2026-01-19 1:28 ` Richard Henderson
@ 2026-01-19 7:50 ` Michael Tokarev
2026-01-19 7:54 ` Richard Henderson
0 siblings, 1 reply; 21+ messages in thread
From: Michael Tokarev @ 2026-01-19 7:50 UTC (permalink / raw)
To: Richard Henderson, qemu-devel; +Cc: qemu-trivial
On 1/19/26 04:28, Richard Henderson wrote:
> On 1/14/26 00:00, Michael Tokarev wrote:
>> Since CONFIG_EPOLL is now unused, it's okay to
>> perform this rename, to make it less ugly.
>>
>> Since epoll is linux-specific and is always
>> present, we might as well make CONFIG_EPOLL equal
>> to CONFIG_LINUX.
>>
>> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
>> ---
>> meson.build | 2 +-
>> util/aio-posix.h | 4 ++--
>> util/meson.build | 2 +-
>> 3 files changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/meson.build b/meson.build
>> index f8b4f06049..552b34f34e 100644
>> --- a/meson.build
>> +++ b/meson.build
>> @@ -2713,7 +2713,7 @@ config_host_data.set('CONFIG_INOTIFY1',
>> have_inotify_init1)
>> # has_header_symbol
>> config_host_data.set('CONFIG_BLKZONED',
>> cc.has_header_symbol('linux/blkzoned.h',
>> 'BLKOPENZONE'))
>> -config_host_data.set('CONFIG_EPOLL_CREATE1',
>> +config_host_data.set('CONFIG_EPOLL',
>> cc.has_header_symbol('sys/epoll.h',
>> 'epoll_create1'))
>
> This is present in glibc 2.9, which is required.
> Therefore you can drop this bit of configuration as well.
It's a bit more tricky, see my comment in the patch description
above. Yes, epoll_create1 is now always present *on linux*.
But this particular test (cc.has_header_symbol) is run on all
platforms, not only on linux. So if we drop this test, we'll
have to alias CONFIG_EPOLL to CONFIG_LINUX. Because epoll is
used outside of linux-user too (eg in the main loop), and there,
the test is CONFIG_EPOLL, not CONFIG_LINUX.
So it might be possible to replace this test with something
like
config_host_data.set('CONFIG_EPOLL', config_host_data.get('CONFIG_LINUX')
but not drop it entirely.
Thanks,
/mjt
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH trivial 7/7] rename CONFIG_EPOLL_CREATE1 to CONFIG_EPOLL
2026-01-19 7:50 ` Michael Tokarev
@ 2026-01-19 7:54 ` Richard Henderson
0 siblings, 0 replies; 21+ messages in thread
From: Richard Henderson @ 2026-01-19 7:54 UTC (permalink / raw)
To: Michael Tokarev, qemu-devel; +Cc: qemu-trivial
On 1/19/26 18:50, Michael Tokarev wrote:
> On 1/19/26 04:28, Richard Henderson wrote:
>> On 1/14/26 00:00, Michael Tokarev wrote:
>>> Since CONFIG_EPOLL is now unused, it's okay to
>>> perform this rename, to make it less ugly.
>>>
>>> Since epoll is linux-specific and is always
>>> present, we might as well make CONFIG_EPOLL equal
>>> to CONFIG_LINUX.
>>>
>>> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
>>> ---
>>> meson.build | 2 +-
>>> util/aio-posix.h | 4 ++--
>>> util/meson.build | 2 +-
>>> 3 files changed, 4 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/meson.build b/meson.build
>>> index f8b4f06049..552b34f34e 100644
>>> --- a/meson.build
>>> +++ b/meson.build
>>> @@ -2713,7 +2713,7 @@ config_host_data.set('CONFIG_INOTIFY1', have_inotify_init1)
>>> # has_header_symbol
>>> config_host_data.set('CONFIG_BLKZONED',
>>> cc.has_header_symbol('linux/blkzoned.h', 'BLKOPENZONE'))
>>> -config_host_data.set('CONFIG_EPOLL_CREATE1',
>>> +config_host_data.set('CONFIG_EPOLL',
>>> cc.has_header_symbol('sys/epoll.h', 'epoll_create1'))
>>
>> This is present in glibc 2.9, which is required.
>> Therefore you can drop this bit of configuration as well.
>
> It's a bit more tricky, see my comment in the patch description
> above. Yes, epoll_create1 is now always present *on linux*.
> But this particular test (cc.has_header_symbol) is run on all
> platforms, not only on linux. So if we drop this test, we'll
> have to alias CONFIG_EPOLL to CONFIG_LINUX. Because epoll is
> used outside of linux-user too (eg in the main loop), and there,
> the test is CONFIG_EPOLL, not CONFIG_LINUX.
>
> So it might be possible to replace this test with something
> like
>
> config_host_data.set('CONFIG_EPOLL', config_host_data.get('CONFIG_LINUX')
>
> but not drop it entirely.
From the patch description, I had expected s/CONFIG_EPOLL/CONFIG_LINUX/.
r~
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2026-01-19 7:54 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-13 12:59 [PATCH trivial 0/7] assume some linux syscalls are always present: epoll, splice, inotify Michael Tokarev
2026-01-13 12:59 ` [PATCH trivial 1/7] linux-user/syscall.c: assume splice is always present Michael Tokarev
2026-01-13 13:11 ` Peter Maydell
2026-01-19 1:20 ` Richard Henderson
2026-01-13 13:00 ` [PATCH 1/3] linux-user/syscall.c: statfs: f_flags " Michael Tokarev
2026-01-13 13:04 ` Michael Tokarev
2026-01-13 13:00 ` [PATCH 2/3] linux-user/syscall.c: consolidate statfs calls Michael Tokarev
2026-01-13 13:00 ` [PATCH trivial 2/7] meson.build: stop checking for splice() Michael Tokarev
2026-01-19 1:21 ` Richard Henderson
2026-01-13 13:00 ` [PATCH trivial 3/7] linux-user: assume inotify sycalls are always present Michael Tokarev
2026-01-19 1:23 ` Richard Henderson
2026-01-13 13:00 ` [PATCH RFC 3/3] linux-user/syscall.c: consolidate statfs calls further Michael Tokarev
2026-01-13 13:00 ` [PATCH trivial 4/7] meson.build: stop checking for inotify_init() Michael Tokarev
2026-01-13 13:00 ` [PATCH trivial 5/7] linux-user: assume epoll is always present Michael Tokarev
2026-01-19 1:25 ` Richard Henderson
2026-01-13 13:00 ` [PATCH trivial 6/7] meson.build: do not check for epoll.h (CONFIG_EPOLL) Michael Tokarev
2026-01-19 1:26 ` Richard Henderson
2026-01-13 13:00 ` [PATCH trivial 7/7] rename CONFIG_EPOLL_CREATE1 to CONFIG_EPOLL Michael Tokarev
2026-01-19 1:28 ` Richard Henderson
2026-01-19 7:50 ` Michael Tokarev
2026-01-19 7:54 ` Richard Henderson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox