Brad Smith wrote: > On 2026-10-14 7:20 a.m., Roman Bogorodskiy wrote: > > Currently, qmp_guest_set_time() sets system time using > > the settimeofday(2) system call and then runs the hwclock(8) > > util to set hardware time. > > > > BSDs do not ship hwclock(8), so current implementation > > always fails while trying to run it. > > > > Update the code not to run it on BSD. The settimeofday(2) > > call sets both system and hardware time on these systems. > > For example, on FreeBSD settimeofday() calls settime() > > which calls resettodr() [1] which updates RTC clock [2]. > > It is similar on OpenBSD and NetBSD, though implementations > > differ a bit. > > > > Additional detail: on FreeBSD RTC clock setting can be > > disabled with the `machdep.disable_rtc_set` sysctl. > > As we cannot do anything about it, do not handle that > > case separately. > > > > BSD systems do not provide a common utility equivalent > > to hwclock -s, so report an unsupported operation when > > no time is supplied. > > > > 1: https://cgit.freebsd.org/src/tree/sys/kern/kern_time.c > > 2: https://cgit.freebsd.org/src/tree/sys/kern/subr_rtc.c > > > > Signed-off-by: Roman Bogorodskiy <[email protected]> > > --- > > qga/commands-posix.c | 14 ++++++++++++++ > > 1 file changed, 14 insertions(+) > > > > diff --git a/qga/commands-posix.c b/qga/commands-posix.c > > index 837e285b6d..f3d18e6dcd 100644 > > --- a/qga/commands-posix.c > > +++ b/qga/commands-posix.c > > @@ -322,6 +322,20 @@ void qmp_guest_set_time(bool has_time, int64_t > > time_ns, Error **errp) > > } > > } > > +#if defined(CONFIG_BSD) > > + /* > > + * BSDs (FreeBSD, OpenBSD, NetBSD) do not have the hwclock(8) tool. > > + * These systems update hardware clock when settimeofday() sets > > + * system time, so no additional actions are needed. > > + * Setting system time from RTC is not supported. > > + */ > > + if (!has_time) { > > + error_setg(errp, "Setting system time from RTC is not supported"); > > + } > > + > > + return; > > +#endif > > + > > /* Now, if user has passed a time to set and the system time is set, > > we > > * just need to synchronize the hardware clock. However, if no time > > was > > * passed, user is requesting the opposite: set the system time from > > the > > The command is Linux specific so it shouldn't be checking CONFIG_BSD. It > should be > using something like #ifndef CONFIG_LINUX. >
Updated in v2. Actually, I have started with that, but later changed to CONFIG_BSD check because I tried to avoid testing this change on Solaris. Anyway, just tried this change on OpenIndiana and it works as expected.
