On 5/18/2026 2:27 PM, Warner Losh wrote: > Upstream the file, thread, socket and remaining signal system calls (too > numerous to list here). > > This series is an ambitous use of claude to help me upstream all the > remaining system calls. I've batched them together in what I think are > reasonable chunks, and had claude do the grunt work of copying the code > over and attributing the commits from our complex branching history. The > chopping up was a bit arbitrary, but I think it's good. The commit > messages may be a little weak, but may also be OK. I've also double > checked the style and made fixes upstream for them as well. Claude also > reviewed all these changes and found a few bugs that I've fixed. I've > personally read through them all and haven't found anything glaring. I > fixed all the bugs that were found, in most cases differently than > claude's suggestions. > > I've added 'Assisted-by: Claude...' to all these commits to reflect my > leaning on Claude so hard. This use falls within the 'non-creative' use > that the Qemu project has said is OK. If that's not the right thing to > do, I can remove them. > > This leaves sysctl translation, the powerpc architecture support, > coredumps and a transition to 'truss' based system call tracing. With > these changes applied we'er down from a high of about 30k lines of diffs > to only 5k (not counting genereted, but checked in files in blitz). The > changes are 8k, so maybe a bit ambitious from that perspective as well. > > There's a few lines over 80 that I've not cleaned up. Let me know if > that's a problem. The other warnings are about adding files, and there's > no new MAINTAINERS entry needed. And the 'arch dependent defines should > be avoided' are needed to cope with different FreeBSD build systems > having different system calls. > > Note, this is called out below too, but in v2 I've folded back all the > fixes based on some out-of-band feedback I recieved to do this the > normal way and the qemu project isn't interested in the fixes to fixes. > > This is a big experiment, in many ways, for me, so I'm interested in > whatever feedback you may have to make things better in the future. > > Signed-off-by: Warner Losh <[email protected]> > --- > Changes in v2: > - don't write offsets on errors for copy_file_range > - pipe2: Check the raw system call value directly > - setsockopt: Check target_to_host_ip_mreq return value > - <several places>: Check return value of host_to_target_sockaddr > - do_bsd_setsockopt: Read in the socket option > - ntp_gettime: write back time on non-errors, not just 0 > - do_freebsd_sigtimedwait check t2h_freebsd_timespec return > - do_freebsd_swapcontext writing incorrectly, readonly data (0 to user_unlock) > - do_thr_set_name needs get_errno() > - Have ntp_adjtime write back the structure > - kevent_freebsd11 no need to explicitly mask, datatypes do this for us > - do_freebsd_setcontext just reads the mcontext, 0 in unlock_user > - target_to_host_sigevent is read-only, so pass 0 in unlock_user > - target_to_host_ip_mreq needs tswap32 for int32_t > - use get_errno on kenv return values to report errors better > - kevent: only copy the number of events returns, not whole buffer > - Copy tolerance field of timex > - freebsd_umtx_sem_wake use VERIFY_READ instead of write to read struct > - Avoid double g2h_untagged mistakes in !_UMTX_OPTIMIZED > - Fixed additional missing unlock in freebsd_rw_rdlock and freebsd_rw_wrlock > in !_UMTX_OPTIMIZED > - Squashed all the bug commit back to the appropriate earleir patch > - Link to v1: > https://lore.kernel.org/qemu-devel/[email protected] > > --- > Warner Losh (37): > bsd-user: catchup to locking / mapping routines in bsd-misc. > bsd-user: Rename cpu_env to env throughout bsd-user > bsd-user: Add bsd-signal.h with sigaction through sigreturn > bsd-user: Add signal shims sigwait through kill and os-signal.h > bsd-user: Add signal system call dispatch > bsd-user: Add poll, lseek, pipe, and swap system call shims > bsd-user: Add os-file.h with pipe2, chflagsat, close_range, and more > bsd-user: Add file operation system call dispatch > bsd-user: Add bsd-socket.h with bind through getsockname > bsd-user: Add socket shims socketpair through shutdown > bsd-user: Add os-socket.h with sendrecvmsg and message structures > bsd-user: Add do_bsd_setsockopt and socket option definitions > bsd-user: Add do_bsd_getsockopt > bsd-user: Add FreeBSD socket helpers and sockaddr conversion > bsd-user: Add os-socket.c with cmsg conversion functions > bsd-user: Add socket system call dispatch > bsd-user: Add os-time.h with clock and time-of-day functions > bsd-user: Add utimes, futimes, and ktimer functions to os-time.h > bsd-user: Add select, pselect, and ppoll to os-time.h > bsd-user: Add kqueue and kevent functions to os-time.h > bsd-user: Add sigtimedwait, itimer, and futimens to os-time.h > bsd-user: Add os-time.c and time-related type definitions > bsd-user: Add time system call dispatch > bsd-user: Add thread, umtx, and ACL type definitions > bsd-user: Add cpu_copy and make init_task_state non-static > bsd-user: Add os-thread.h with thr and context functions > bsd-user: Add do_freebsd__umtx_op to os-thread.h > bsd-user: Add os-thread.c with umtx, mutex, and thread creation > bsd-user: Add thread system call dispatch > bsd-user: Add os-extattr.h with file and fd extattr functions > bsd-user: Add link and list extattr functions to os-extattr.h > bsd-user: Add ACL system call shims to os-extattr.h > bsd-user: Add os-extattr.c with ACL conversion functions > bsd-user: Add extended attribute and ACL system call dispatch > bsd-user: Add scheduler and cpuset functions to os-misc.h > bsd-user: Add kmod, posix, and misc functions to os-misc.h > bsd-user: Add scheduler, cpuset, kmod, and misc syscall dispatch > > bsd-user/aarch64/target.h | 2 +- > bsd-user/arm/target.h | 2 +- > bsd-user/bsd-file.h | 164 +++- > bsd-user/bsd-mem.h | 4 +- > bsd-user/bsd-proc.h | 24 +- > bsd-user/bsd-signal.h | 231 ++++++ > bsd-user/bsd-socket.c | 98 +++ > bsd-user/bsd-socket.h | 283 +++++++ > bsd-user/freebsd/meson.build | 8 +- > bsd-user/freebsd/os-extattr.c | 116 +++ > bsd-user/freebsd/os-extattr.h | 662 ++++++++++++++++ > bsd-user/freebsd/os-file.h | 129 ++++ > bsd-user/freebsd/os-misc.h | 470 +++++++++++- > bsd-user/freebsd/os-proc.c | 4 +- > bsd-user/freebsd/os-proc.h | 26 +- > bsd-user/freebsd/os-signal.h | 20 + > bsd-user/freebsd/os-socket.c | 234 ++++++ > bsd-user/freebsd/os-socket.h | 770 +++++++++++++++++++ > bsd-user/freebsd/os-stat.h | 8 +- > bsd-user/freebsd/os-sys.c | 4 +- > bsd-user/freebsd/os-syscall.c | 790 +++++++++++++++++-- > bsd-user/freebsd/os-thread.c | 1682 > +++++++++++++++++++++++++++++++++++++++++ > bsd-user/freebsd/os-thread.h | 596 +++++++++++++++ > bsd-user/freebsd/os-time.c | 346 +++++++++ > bsd-user/freebsd/os-time.h | 983 ++++++++++++++++++++++++ > bsd-user/freebsd/qemu-os.h | 48 ++ > bsd-user/i386/target.h | 2 +- > bsd-user/main.c | 32 +- > bsd-user/meson.build | 1 + > bsd-user/qemu-bsd.h | 26 + > bsd-user/qemu.h | 48 +- > bsd-user/riscv/target.h | 2 +- > bsd-user/signal-common.h | 4 + > bsd-user/signal.c | 67 ++ > bsd-user/syscall_defs.h | 458 +++++++++-- > bsd-user/x86_64/target.h | 2 +- > 36 files changed, 8150 insertions(+), 196 deletions(-) > --- > base-commit: edcc429e9e41a8e0e415dcdab6aa52ad17ef8889 > change-id: 20260504-misc-2026q2-a5af31ac032a > > Best regards,
After reviewing (what I can) two thirds of the series, I don't feel very at ease with validating the rest. Not that there is problem in itself, but it's a massive add, and I'm not sure how we can ensure it's implemented correctly without any test exercising it. It's not particular to bsd-user, linux-user does not have test for all syscalls implemented neither. However, because we are adding most of it at once, it's a bit different. Dropping 8150 new lines at once without any test looks a bit complicated to me. A few questions about the series in itself: - Where does most of the implementation comes from? Was it downstream on FreeBSD side, or written from scratch for this series? - How did you validate it works, beyond it compiles? Regards, Pierrick
