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

Reply via email to