Here is an update to QEMU 9.1.0.
https://wiki.qemu.org/ChangeLog/9.1
Index: Makefile
===================================================================
RCS file: /cvs/ports/emulators/qemu/Makefile,v
retrieving revision 1.242
diff -u -p -u -p -r1.242 Makefile
--- Makefile 26 Jul 2024 11:49:01 -0000 1.242
+++ Makefile 3 Oct 2024 02:03:36 -0000
@@ -6,7 +6,7 @@ USE_NOBTCFI= Yes
COMMENT-main= multi system emulator
COMMENT-ga= QEMU guest agent
-VERSION= 9.0.2
+VERSION= 9.1.0
DISTNAME= qemu-${VERSION}
CATEGORIES= emulators
SITES= https://download.qemu.org/
@@ -70,8 +70,8 @@ LIB_DEPENDS-ga= ${LIB_DEPENDS}
MAKE_ENV= V=1
FAKE_FLAGS= qemu_confdir=${PREFIX}/share/examples/qemu
-CFLAGS+= -I${LOCALBASE}/include -I${X11BASE}/include
-LDFLAGS+= -L${LOCALBASE}/lib -L${X11BASE}/lib
+CFLAGS+= -I${LOCALBASE}/include
+LDFLAGS+= -L${LOCALBASE}/lib
# until the system headers are fixed properly.
CFLAGS+= -Wno-redundant-decls
Index: distinfo
===================================================================
RCS file: /cvs/ports/emulators/qemu/distinfo,v
retrieving revision 1.75
diff -u -p -u -p -r1.75 distinfo
--- distinfo 26 Jul 2024 11:49:01 -0000 1.75
+++ distinfo 3 Oct 2024 02:03:36 -0000
@@ -1,2 +1,2 @@
-SHA256 (qemu-9.0.2.tar.xz) = qMP1lq7Olto7AMr7dLqvoNFFFer7jtHuP39cLQ6/ArY=
-SIZE (qemu-9.0.2.tar.xz) = 132387528
+SHA256 (qemu-9.1.0.tar.xz) = gWtwIqi6fCrDDi4M+XPoJva8yFBTOWAyEsXt6OlNeDQ=
+SIZE (qemu-9.1.0.tar.xz) = 132478356
Index: patches/patch-contrib_plugins_Makefile
===================================================================
RCS file: patches/patch-contrib_plugins_Makefile
diff -N patches/patch-contrib_plugins_Makefile
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-contrib_plugins_Makefile 3 Oct 2024 02:03:36 -0000
@@ -0,0 +1,18 @@
+- contrib/plugins: ensure build does not pick up a system copy of plugin header
+
+Index: contrib/plugins/Makefile
+--- contrib/plugins/Makefile.orig
++++ contrib/plugins/Makefile
+@@ -41,9 +41,10 @@ SONAMES := $(addsuffix $(SO_SUFFIX),$(addprefix lib,$(
+
+ # The main QEMU uses Glib extensively so it is perfectly fine to use it
+ # in plugins (which many example do).
+-PLUGIN_CFLAGS := $(shell $(PKG_CONFIG) --cflags glib-2.0)
+-PLUGIN_CFLAGS += -fPIC -Wall
++GLIB_CFLAGS := $(shell $(PKG_CONFIG) --cflags glib-2.0)
+ PLUGIN_CFLAGS += -I$(TOP_SRC_PATH)/include/qemu
++PLUGIN_CFLAGS += $(GLIB_CFLAGS)
++PLUGIN_CFLAGS += -fPIC -Wall
+
+ # Helper that honours V=1 so we get some output when compiling
+ quiet-@ = $(if $(V),,@$(if $1,printf " %-7s %s\n" "$(strip $1)" "$(strip $2)"
&& ))
Index: patches/patch-meson_build
===================================================================
RCS file: /cvs/ports/emulators/qemu/patches/patch-meson_build,v
retrieving revision 1.13
diff -u -p -u -p -r1.13 patch-meson_build
--- patches/patch-meson_build 28 May 2024 13:57:37 -0000 1.13
+++ patches/patch-meson_build 3 Oct 2024 02:03:36 -0000
@@ -4,7 +4,7 @@
Index: meson.build
--- meson.build.orig
+++ meson.build
-@@ -2156,7 +2156,7 @@ config_host_data.set('CONFIG_QEMU_FIRMWAREPATH', qemu_
+@@ -2253,7 +2253,7 @@ config_host_data.set('CONFIG_QEMU_FIRMWAREPATH', qemu_
config_host_data.set_quoted('CONFIG_QEMU_HELPERDIR', get_option('prefix') /
get_option('libexecdir'))
config_host_data.set_quoted('CONFIG_QEMU_ICONDIR', get_option('prefix') /
qemu_icondir)
config_host_data.set_quoted('CONFIG_QEMU_LOCALEDIR', get_option('prefix') /
get_option('localedir'))
@@ -13,7 +13,7 @@ Index: meson.build
config_host_data.set_quoted('CONFIG_QEMU_MODDIR', get_option('prefix') /
qemu_moddir)
config_host_data.set_quoted('CONFIG_SYSCONFDIR', get_option('prefix') /
get_option('sysconfdir'))
-@@ -4226,9 +4226,6 @@ else
+@@ -4293,9 +4293,6 @@ else
summary_info += {'Objective-C compiler': false}
endif
option_cflags = (get_option('debug') ? ['-g'] : [])
Index: patches/patch-qga_commands-bsd_c
===================================================================
RCS file: patches/patch-qga_commands-bsd_c
diff -N patches/patch-qga_commands-bsd_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-qga_commands-bsd_c 3 Oct 2024 02:03:36 -0000
@@ -0,0 +1,307 @@
+Adapted from https://github.com/aborche/qemu-guest-agent
+
+Adds support for "guest-get-fsinfo" and "guest-get-vcpus"
+
+Index: qga/commands-bsd.c
+--- qga/commands-bsd.c.orig
++++ qga/commands-bsd.c
+@@ -11,10 +11,9 @@
+ */
+
+ #include "qemu/osdep.h"
++#include "qapi/error.h"
+ #include "qga-qapi-commands.h"
+ #include "qapi/qmp/qerror.h"
+-#include "qapi/error.h"
+-#include "qemu/queue.h"
+ #include "commands-common.h"
+ #include <sys/ioctl.h>
+ #include <sys/param.h>
+@@ -28,6 +27,8 @@
+ #include <net/ethernet.h>
+ #endif
+ #include <paths.h>
++#include <sys/sysctl.h>
++#include <sys/statvfs.h>
+
+ #if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM)
+ bool build_fs_mount_list(FsMountList *mounts, Error **errp)
+@@ -179,3 +180,278 @@ bool guest_get_hw_addr(struct ifaddrs *ifa, unsigned c
+ return true;
+ }
+ #endif /* HAVE_GETIFADDRS */
++
++GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp)
++{
++ GuestLogicalProcessorList *head, **tail;
++ int64_t current;
++ long sc_max;
++ Error *local_err = NULL;
++ int Query[2];
++ int NumCpu = 0;
++ size_t Length = sizeof(NumCpu);
++
++ Query[0] = CTL_HW;
++#ifdef HW_NCPUONLINE
++ Query[1] = HW_NCPUONLINE;
++#else
++ Query[1] = HW_NCPU;
++#endif
++
++ current = 0;
++ head = NULL;
++ tail = &head;
++ if (sysctl(Query, 2, &NumCpu, &Length, NULL, 0) == -1) {
++ error_setg(errp, "sysctl get CTL_HW.HW_NCPU failed");
++ }
++ sc_max = NumCpu;
++
++ while (local_err == NULL && current < sc_max) {
++ GuestLogicalProcessor *vcpu;
++ int64_t id = current++;
++ vcpu = g_malloc0(sizeof *vcpu);
++ vcpu->logical_id = id;
++ vcpu->has_can_offline = false; /* lolspeak ftw */
++ vcpu->online = true;
++ vcpu->can_offline = false;
++ QAPI_LIST_APPEND(tail, vcpu);
++ }
++
++ if (local_err == NULL) {
++ /* there's no guest with zero VCPUs */
++ g_assert(head != NULL);
++ return head;
++ }
++
++ qapi_free_GuestLogicalProcessorList(head);
++ error_propagate(errp, local_err);
++ return NULL;
++}
++
++typedef struct FsMount {
++ char *dirname;
++ char *devtype;
++ char *size;
++ char *used;
++ char *free;
++ char *load;
++ char *mntpoint;
++ unsigned int devmajor, devminor;
++ QTAILQ_ENTRY(FsMount) next;
++} FsMount;
++
++typedef QTAILQ_HEAD(FsMountList, FsMount) FsMountList;
++
++static void free_fs_mount_list(FsMountList *mounts)
++{
++ FsMount *mount, *temp;
++
++ if (!mounts) {
++ return;
++ }
++
++ QTAILQ_FOREACH_SAFE(mount, mounts, next, temp) {
++ QTAILQ_REMOVE(mounts, mount, next);
++ g_free(mount->dirname);
++ g_free(mount->devtype);
++ g_free(mount->size);
++ g_free(mount->used);
++ g_free(mount->free);
++ g_free(mount->load);
++ g_free(mount->mntpoint);
++ g_free(mount);
++ }
++}
++
++static void build_fs_mount_list(FsMountList *mounts, Error **errp)
++{
++ FsMount *mount;
++#ifdef __OpenBSD__
++ char const *dfcmd = "/bin/df";
++#else // defined(__OpenBSD__)
++ char const *dfcmd = "/bin/df -hT";
++#endif // defined(__OpenBSD__)
++
++ FILE *fp;
++ char *line = NULL;
++ size_t n;
++ int ret;
++ char dev_name[128], size[12], used[12], free[12], load[10], mounted[128];
++#ifndef __OpenBSD__
++ char fstype[12] = "";
++#endif // !defined(__OpenBSD__)
++
++ if ((fp = popen(dfcmd, "r")) == NULL) {
++ g_debug("Cannot open '%s'!!\n", dfcmd);
++ error_setg_errno(errp, errno,
++ "failed to create child process for command: %s",
++ dfcmd);
++ return;
++ }
++
++ while (getline(&line, &n, fp) != -1) {
++ //g_debug("line '%s'", line);
++#ifdef __OpenBSD__
++ ret = sscanf(line, "%127s%11s%11s%11s%9s%127s",
++ dev_name, size, used, free, load, mounted);
++#else // defined(__OpenBSD__)
++ ret = sscanf(line, "%127s%11s%11s%11s%11s%9s%127s",
++ dev_name, fstype, size, used, free, load, mounted);
++ //g_debug("ret %d, dev_name '%s', fstype '%s', size '%s', used '%s', free
'%s', load '%s', mounted '%s'",
++ // ret, dev_name, fstype, size, used, free, load, mounted);
++#endif // defined(__OpenBSD__)
++ if (g_str_equal(dev_name, "Filesystem")
++#ifndef __OpenBSD__
++ ||g_str_equal(fstype,"devfs")
++ ||g_str_equal(fstype,"procfs")
++ ||g_str_equal(fstype,"fdescfs")
++#endif // !defined(__OpenBSD__)
++ ) {
++ continue;
++ }
++
++#ifdef __OpenBSD__
++ if (ret < 6) {
++#else // defined(__OpenBSD__)
++ if (ret < 7) {
++#endif // defined(__OpenBSD__)
++ continue;
++ }
++
++ mount = g_new0(FsMount, 1);
++ mount->dirname = g_strdup(dev_name);
++#ifndef __OpenBSD__
++ mount->devtype = g_strdup(fstype);
++#endif // defined(__OpenBSD__)
++ mount->free = g_strdup(free);
++ mount->load = g_strdup(load);
++ mount->size = g_strdup(size);
++ mount->used = g_strdup(used);
++ mount->mntpoint = g_strdup(mounted);
++ mount->devmajor = 0;
++ mount->devminor = 0;
++
++ QTAILQ_INSERT_TAIL(mounts, mount, next);
++ }
++ g_free(line);
++
++ fclose(fp);
++}
++
++#ifdef __OpenBSD__
++static void add_type_fs_mount_list(FsMountList *mounts, Error **errp)
++{
++ FILE *fp;
++ char const *mountcmd = "/sbin/mount";
++ char *line = NULL;
++ size_t n;
++ int ret;
++ char mnt_fsname[128], mnt_dir[128], mnt_type[32], mnt_opts[128];
++ struct FsMount *mount;
++
++ // get mounts from mount command
++ if ((fp = popen(mountcmd, "r")) == NULL) {
++ g_debug("Cannot open '%s'!!\n", mountcmd);
++ error_setg_errno(errp, errno, "failed to create child process for command:
%s", mountcmd);
++ return;
++ }
++
++ // loop through mounts from mount command
++ while (getline(&line, &n, fp) != -1) {
++ //g_debug("line '%s'", line);
++
++ ret = sscanf(line, "%127s on %127s type %31s (%127s)",
++ mnt_fsname, mnt_dir, mnt_type, mnt_opts);
++ //g_debug("ret %d, fsname '%s', dir '%s', type '%s', opts '%s'",
++ // ret, mnt_fsname, mnt_dir, mnt_type, mnt_opts);
++
++ if (4 != ret ||
++ '/' != mnt_fsname[0] ||
++ '/' != mnt_dir[0] ||
++ g_str_equal("smbfs", mnt_type) ||
++ g_str_equal("cifs", mnt_type)) {
++ continue;
++ }
++
++ // find mount in supplied mounts list and update device type
++ QTAILQ_FOREACH(mount, mounts, next) {
++ if (NULL == mount->devtype && g_str_equal(mount->dirname,
mnt_fsname)) {
++ mount->devtype = g_strdup(mnt_type);
++ break;
++ }
++ }
++ }
++ g_free(line);
++
++ fclose(fp);
++}
++#endif // defined(__OpenBSD__)
++
++/* Return a list of the disk device(s)' info which @mount lies on */
++static GuestFilesystemInfo *build_guest_fsinfo(struct FsMount *mount,
++ Error **errp)
++{
++ GuestFilesystemInfo *fs = g_malloc0(sizeof(*fs));
++ struct statvfs buf;
++ unsigned long used, nonroot_total, fr_size;
++
++ fs->name = g_strdup(mount->dirname);
++ fs->mountpoint = g_strdup(mount->mntpoint);
++ fs->type = g_strdup(mount->devtype);
++
++ if (statvfs(fs->mountpoint, &buf) == 0) {
++ fr_size = buf.f_frsize;
++ used = buf.f_blocks - buf.f_bfree;
++ nonroot_total = used + buf.f_bavail;
++ fs->used_bytes = used * fr_size;
++ fs->total_bytes = nonroot_total * fr_size;
++
++ fs->has_total_bytes = true;
++ fs->has_used_bytes = true;
++ }
++
++ return fs;
++}
++
++GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp)
++{
++ FsMountList mounts;
++ struct FsMount *mount;
++ GuestFilesystemInfoList *new, *ret = NULL;
++ Error *local_err = NULL;
++
++ QTAILQ_INIT(&mounts);
++
++ g_debug("Entering to guest_get_fsinfo");
++ build_fs_mount_list(&mounts, &local_err);
++ if (local_err) {
++ error_propagate(errp, local_err);
++ return NULL;
++ }
++
++#ifdef __OpenBSD__
++ add_type_fs_mount_list(&mounts, &local_err);
++ if (local_err) {
++ error_propagate(errp, local_err);
++ return NULL;
++ }
++#endif // defined(__OpenBSD__)
++
++ QTAILQ_FOREACH(mount, &mounts, next) {
++ //g_debug("Building guest fsinfo for '%s'", mount->dirname);
++ //g_debug("Devtype '%s'", mount->devtype);
++ new = g_malloc0(sizeof(*ret));
++ new->value = build_guest_fsinfo(mount, &local_err);
++ new->next = ret;
++ ret = new;
++ if (local_err) {
++ error_propagate(errp, local_err);
++ qapi_free_GuestFilesystemInfoList(ret);
++ ret = NULL;
++ break;
++ }
++ }
++
++ free_fs_mount_list(&mounts);
++ return ret;
++}
Index: patches/patch-qga_commands-posix_c
===================================================================
RCS file: patches/patch-qga_commands-posix_c
diff -N patches/patch-qga_commands-posix_c
--- patches/patch-qga_commands-posix_c 28 May 2024 13:57:37 -0000 1.10
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,416 +0,0 @@
-Adapted from https://github.com/aborche/qemu-guest-agent
-
-Adds support for "guest-get-fsinfo" and "guest-get-vcpus"
-
-Index: qga/commands-posix.c
---- qga/commands-posix.c.orig
-+++ qga/commands-posix.c
-@@ -59,6 +59,11 @@
- #endif
- #endif
-
-+#ifdef __OpenBSD__
-+#include <sys/sysctl.h>
-+#include <sys/statvfs.h>
-+#endif
-+
- static void ga_wait_child(pid_t pid, int *status, Error **errp)
- {
- pid_t rpid;
-@@ -2750,7 +2755,7 @@ GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp
- return head;
- }
-
--#else /* defined(__linux__) */
-+#elif defined(CONFIG_BSD)
-
- void qmp_guest_suspend_disk(Error **errp)
- {
-@@ -2769,10 +2774,99 @@ void qmp_guest_suspend_hybrid(Error **errp)
-
- GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp)
- {
-+ int64_t current;
-+ GuestLogicalProcessorList *head, **tail;
-+ long sc_max;
-+ Error *local_err = NULL;
-+ int Query[2];
-+ int NumCpu = 0;
-+ size_t Length = sizeof(NumCpu);
-+
-+ Query[0] = CTL_HW;
-+#ifdef HW_NCPUONLINE
-+ Query[1] = HW_NCPUONLINE;
-+#else
-+ Query[1] = HW_NCPU;
-+#endif
-+
-+ current = 0;
-+ head = NULL;
-+ tail = &head;
-+ if (sysctl(Query, 2, &NumCpu, &Length, NULL, 0) == -1) {
-+ error_setg(errp, "sysctl get CTL_HW.HW_NCPU failed");
-+ }
-+ sc_max = NumCpu;
-+
-+ while (local_err == NULL && current < sc_max) {
-+ GuestLogicalProcessor *vcpu;
-+ int64_t id = current++;
-+ vcpu = g_malloc0(sizeof *vcpu);
-+ vcpu->logical_id = id;
-+ vcpu->has_can_offline = false; /* lolspeak ftw */
-+ vcpu->online = true;
-+ vcpu->can_offline = false;
-+ QAPI_LIST_APPEND(tail, vcpu);
-+ }
-+
-+ if (local_err == NULL) {
-+ /* there's no guest with zero VCPUs */
-+ g_assert(head != NULL);
-+ return head;
-+ }
-+
-+ qapi_free_GuestLogicalProcessorList(head);
-+ error_propagate(errp, local_err);
-+ return NULL;
-+}
-+
-+int64_t qmp_guest_set_vcpus(GuestLogicalProcessorList *vcpus, Error **errp)
-+{
- error_setg(errp, QERR_UNSUPPORTED);
-+ return -1;
-+}
-+
-+GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error **errp)
-+{
-+ error_setg(errp, QERR_UNSUPPORTED);
- return NULL;
- }
-
-+GuestMemoryBlockResponseList *
-+qmp_guest_set_memory_blocks(GuestMemoryBlockList *mem_blks, Error **errp)
-+{
-+ error_setg(errp, QERR_UNSUPPORTED);
-+ return NULL;
-+}
-+
-+GuestMemoryBlockInfo *qmp_guest_get_memory_block_info(Error **errp)
-+{
-+ error_setg(errp, QERR_UNSUPPORTED);
-+ return NULL;
-+}
-+
-+#else /* defined(CONFIG_BSD) */
-+
-+void qmp_guest_suspend_disk(Error **errp)
-+{
-+ error_setg(errp, QERR_UNSUPPORTED);
-+}
-+
-+void qmp_guest_suspend_ram(Error **errp)
-+{
-+ error_setg(errp, QERR_UNSUPPORTED);
-+}
-+
-+void qmp_guest_suspend_hybrid(Error **errp)
-+{
-+ error_setg(errp, QERR_UNSUPPORTED);
-+}
-+
-+GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp)
-+{
-+ error_setg(errp, QERR_UNSUPPORTED);
-+ return NULL;
-+}
-+
- int64_t qmp_guest_set_vcpus(GuestLogicalProcessorList *vcpus, Error **errp)
- {
- error_setg(errp, QERR_UNSUPPORTED);
-@@ -3067,11 +3161,245 @@ GuestNetworkInterfaceList *qmp_guest_network_get_inter
-
- #if !defined(CONFIG_FSFREEZE)
-
-+#ifdef CONFIG_BSD
-+typedef struct FsMount {
-+ char *dirname;
-+ char *devtype;
-+ char *size;
-+ char *used;
-+ char *free;
-+ char *load;
-+ char *mntpoint;
-+ unsigned int devmajor, devminor;
-+ QTAILQ_ENTRY(FsMount) next;
-+} FsMount;
-+
-+typedef QTAILQ_HEAD(FsMountList, FsMount) FsMountList;
-+
-+static void free_fs_mount_list(FsMountList *mounts)
-+{
-+ FsMount *mount, *temp;
-+
-+ if (!mounts) {
-+ return;
-+ }
-+
-+ QTAILQ_FOREACH_SAFE(mount, mounts, next, temp) {
-+ QTAILQ_REMOVE(mounts, mount, next);
-+ g_free(mount->dirname);
-+ g_free(mount->devtype);
-+ g_free(mount->size);
-+ g_free(mount->used);
-+ g_free(mount->free);
-+ g_free(mount->load);
-+ g_free(mount->mntpoint);
-+ g_free(mount);
-+ }
-+}
-+
-+static void build_fs_mount_list(FsMountList *mounts, Error **errp)
-+{
-+ FsMount *mount;
-+#ifdef __OpenBSD__
-+ char const *dfcmd = "/bin/df";
-+#else // defined(__OpenBSD__)
-+ char const *dfcmd = "/bin/df -hT";
-+#endif // defined(__OpenBSD__)
-+
-+ FILE *fp;
-+ char *line = NULL;
-+ size_t n;
-+ int ret;
-+ char dev_name[128], size[12], used[12], free[12], load[10], mounted[128];
-+#ifndef __OpenBSD__
-+ char fstype[12] = "";
-+#endif // !defined(__OpenBSD__)
-+
-+ if ((fp = popen(dfcmd, "r")) == NULL) {
-+ g_debug("Cannot open '%s'!!\n", dfcmd);
-+ error_setg_errno(errp, errno,
-+ "failed to create child process for command: %s",
-+ dfcmd);
-+ return;
-+ }
-+
-+ while (getline(&line, &n, fp) != -1) {
-+ //g_debug("line '%s'", line);
-+#ifdef __OpenBSD__
-+ ret = sscanf(line, "%127s%11s%11s%11s%9s%127s",
-+ dev_name, size, used, free, load, mounted);
-+#else // defined(__OpenBSD__)
-+ ret = sscanf(line, "%127s%11s%11s%11s%11s%9s%127s",
-+ dev_name, fstype, size, used, free, load, mounted);
-+ //g_debug("ret %d, dev_name '%s', fstype '%s', size '%s', used '%s', free
'%s', load '%s', mounted '%s'",
-+ // ret, dev_name, fstype, size, used, free, load, mounted);
-+#endif // defined(__OpenBSD__)
-+ if (g_str_equal(dev_name, "Filesystem")
-+#ifndef __OpenBSD__
-+ ||g_str_equal(fstype,"devfs")
-+ ||g_str_equal(fstype,"procfs")
-+ ||g_str_equal(fstype,"fdescfs")
-+#endif // !defined(__OpenBSD__)
-+ ) {
-+ continue;
-+ }
-+
-+#ifdef __OpenBSD__
-+ if (ret < 6) {
-+#else // defined(__OpenBSD__)
-+ if (ret < 7) {
-+#endif // defined(__OpenBSD__)
-+ continue;
-+ }
-+
-+ mount = g_new0(FsMount, 1);
-+ mount->dirname = g_strdup(dev_name);
-+#ifndef __OpenBSD__
-+ mount->devtype = g_strdup(fstype);
-+#endif // defined(__OpenBSD__)
-+ mount->free = g_strdup(free);
-+ mount->load = g_strdup(load);
-+ mount->size = g_strdup(size);
-+ mount->used = g_strdup(used);
-+ mount->mntpoint = g_strdup(mounted);
-+ mount->devmajor = 0;
-+ mount->devminor = 0;
-+
-+ QTAILQ_INSERT_TAIL(mounts, mount, next);
-+ }
-+ g_free(line);
-+
-+ fclose(fp);
-+}
-+
-+#ifdef __OpenBSD__
-+
-+static void add_type_fs_mount_list(FsMountList *mounts, Error **errp)
-+{
-+ FILE *fp;
-+ char const *mountcmd = "/sbin/mount";
-+ char *line = NULL;
-+ size_t n;
-+ int ret;
-+ char mnt_fsname[128], mnt_dir[128], mnt_type[32], mnt_opts[128];
-+ struct FsMount *mount;
-+
-+ // get mounts from mount command
-+ if ((fp = popen(mountcmd, "r")) == NULL) {
-+ g_debug("Cannot open '%s'!!\n", mountcmd);
-+ error_setg_errno(errp, errno, "failed to create child process for command:
%s", mountcmd);
-+ return;
-+ }
-+
-+ // loop through mounts from mount command
-+ while (getline(&line, &n, fp) != -1) {
-+ //g_debug("line '%s'", line);
-+
-+ ret = sscanf(line, "%127s on %127s type %31s (%127s)",
-+ mnt_fsname, mnt_dir, mnt_type, mnt_opts);
-+ //g_debug("ret %d, fsname '%s', dir '%s', type '%s', opts '%s'",
-+ // ret, mnt_fsname, mnt_dir, mnt_type, mnt_opts);
-+
-+ if (4 != ret ||
-+ '/' != mnt_fsname[0] ||
-+ '/' != mnt_dir[0] ||
-+ g_str_equal("smbfs", mnt_type) ||
-+ g_str_equal("cifs", mnt_type)) {
-+ continue;
-+ }
-+
-+ // find mount in supplied mounts list and update device type
-+ QTAILQ_FOREACH(mount, mounts, next) {
-+ if (NULL == mount->devtype && g_str_equal(mount->dirname,
mnt_fsname)) {
-+ mount->devtype = g_strdup(mnt_type);
-+ break;
-+ }
-+ }
-+ }
-+ g_free(line);
-+
-+ fclose(fp);
-+}
-+
-+#endif // defined(__OpenBSD__)
-+
-+/* Return a list of the disk device(s)' info which @mount lies on */
-+static GuestFilesystemInfo *build_guest_fsinfo(struct FsMount *mount,
-+ Error **errp)
-+{
-+ GuestFilesystemInfo *fs = g_malloc0(sizeof(*fs));
-+ struct statvfs buf;
-+ unsigned long used, nonroot_total, fr_size;
-+
-+ fs->name = g_strdup(mount->dirname);
-+ fs->mountpoint = g_strdup(mount->mntpoint);
-+ fs->type = g_strdup(mount->devtype);
-+
-+ if (statvfs(fs->mountpoint, &buf) == 0) {
-+ fr_size = buf.f_frsize;
-+ used = buf.f_blocks - buf.f_bfree;
-+ nonroot_total = used + buf.f_bavail;
-+ fs->used_bytes = used * fr_size;
-+ fs->total_bytes = nonroot_total * fr_size;
-+
-+ fs->has_total_bytes = true;
-+ fs->has_used_bytes = true;
-+ }
-+
-+ //g_free(devpath);
-+
-+ return fs;
-+}
-+
- GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp)
- {
-+ FsMountList mounts;
-+ struct FsMount *mount;
-+ GuestFilesystemInfoList *new, *ret = NULL;
-+ Error *local_err = NULL;
-+
-+ QTAILQ_INIT(&mounts);
-+
-+ g_debug("Entering to guest_get_fsinfo");
-+ build_fs_mount_list(&mounts, &local_err);
-+ if (local_err) {
-+ error_propagate(errp, local_err);
-+ return NULL;
-+ }
-+
-+#ifdef __OpenBSD__
-+ add_type_fs_mount_list(&mounts, &local_err);
-+ if (local_err) {
-+ error_propagate(errp, local_err);
-+ return NULL;
-+ }
-+#endif // defined(__OpenBSD__)
-+
-+ QTAILQ_FOREACH(mount, &mounts, next) {
-+ //g_debug("Building guest fsinfo for '%s'", mount->dirname);
-+ //g_debug("Devtype '%s'", mount->devtype);
-+ new = g_malloc0(sizeof(*ret));
-+ new->value = build_guest_fsinfo(mount, &local_err);
-+ new->next = ret;
-+ ret = new;
-+ if (local_err) {
-+ error_propagate(errp, local_err);
-+ qapi_free_GuestFilesystemInfoList(ret);
-+ ret = NULL;
-+ break;
-+ }
-+ }
-+
-+ free_fs_mount_list(&mounts);
-+ return ret;
-+}
-+#else
-+GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp)
-+{
- error_setg(errp, QERR_UNSUPPORTED);
- return NULL;
- }
-+#endif /* CONFIG_BSD */
-
- GuestFsfreezeStatus qmp_guest_fsfreeze_status(Error **errp)
- {
-@@ -3137,12 +3465,21 @@ GList *ga_command_init_blockedrpcs(GList *blockedrpcs)
- {
- #if !defined(__linux__)
- {
-+#ifdef CONFIG_BSD
- const char *list[] = {
- "guest-suspend-disk", "guest-suspend-ram",
-+ "guest-suspend-hybrid", "guest-set-vcpus",
-+ "guest-get-memory-blocks", "guest-set-memory-blocks",
-+ "guest-get-memory-block-size", "guest-get-memory-block-info",
-+ NULL};
-+#else
-+ const char *list[] = {
-+ "guest-suspend-disk", "guest-suspend-ram",
- "guest-suspend-hybrid", "guest-get-vcpus", "guest-set-vcpus",
- "guest-get-memory-blocks", "guest-set-memory-blocks",
- "guest-get-memory-block-size", "guest-get-memory-block-info",
- NULL};
-+#endif /* CONFIG_BSD */
- char **p = (char **)list;
-
- while (*p) {
-@@ -3158,11 +3495,19 @@ GList *ga_command_init_blockedrpcs(GList *blockedrpcs)
-
- #if !defined(CONFIG_FSFREEZE)
- {
-+#ifdef CONFIG_BSD
- const char *list[] = {
-+ "guest-fsfreeze-status",
-+ "guest-fsfreeze-freeze", "guest-fsfreeze-freeze-list",
-+ "guest-fsfreeze-thaw",
-+ "guest-get-disks", NULL};
-+#else
-+ const char *list[] = {
- "guest-get-fsinfo", "guest-fsfreeze-status",
- "guest-fsfreeze-freeze", "guest-fsfreeze-freeze-list",
- "guest-fsfreeze-thaw", "guest-get-fsinfo",
- "guest-get-disks", NULL};
-+#endif /* CONFIG_BSD */
- char **p = (char **)list;
-
- while (*p) {
Index: patches/patch-qga_main_c
===================================================================
RCS file: /cvs/ports/emulators/qemu/patches/patch-qga_main_c,v
retrieving revision 1.8
diff -u -p -u -p -r1.8 patch-qga_main_c
--- patches/patch-qga_main_c 26 Feb 2024 13:30:18 -0000 1.8
+++ patches/patch-qga_main_c 3 Oct 2024 02:03:36 -0000
@@ -15,7 +15,7 @@ Index: qga/main.c
#define QGA_STATE_RELATIVE_DIR "run"
#else
#define QGA_VIRTIO_PATH_DEFAULT "\\\\.\\Global\\org.qemu.guest_agent.0"
-@@ -1597,7 +1601,11 @@ int main(int argc, char **argv)
+@@ -1601,7 +1605,11 @@ int main(int argc, char **argv)
}
if (config->method == NULL) {
Index: patches/patch-qga_qapi-schema_json
===================================================================
RCS file: patches/patch-qga_qapi-schema_json
diff -N patches/patch-qga_qapi-schema_json
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-qga_qapi-schema_json 3 Oct 2024 02:03:36 -0000
@@ -0,0 +1,79 @@
+Adapted from https://github.com/aborche/qemu-guest-agent
+
+Adds support for "guest-get-fsinfo" and "guest-get-vcpus"
+
+Index: qga/qapi-schema.json
+--- qga/qapi-schema.json.orig
++++ qga/qapi-schema.json
+@@ -767,7 +767,7 @@
+ 'data': {'logical-id': 'int',
+ 'online': 'bool',
+ '*can-offline': 'bool'},
+- 'if': { 'any': ['CONFIG_LINUX', 'CONFIG_WIN32'] } }
++ 'if': { 'any': ['CONFIG_LINUX', 'CONFIG_WIN32', 'CONFIG_BSD'] } }
+
+ ##
+ # @guest-get-vcpus:
+@@ -783,7 +783,7 @@
+ ##
+ { 'command': 'guest-get-vcpus',
+ 'returns': ['GuestLogicalProcessor'],
+- 'if': { 'any': ['CONFIG_LINUX', 'CONFIG_WIN32'] } }
++ 'if': { 'any': ['CONFIG_LINUX', 'CONFIG_WIN32', 'CONFIG_BSD'] } }
+
+ ##
+ # @guest-set-vcpus:
+@@ -879,7 +879,7 @@
+ 'data': [ 'ide', 'fdc', 'scsi', 'virtio', 'xen', 'usb', 'uml', 'sata',
+ 'sd', 'unknown', 'ieee1394', 'ssa', 'fibre', 'raid', 'iscsi',
+ 'sas', 'mmc', 'virtual', 'file-backed-virtual', 'nvme' ],
+- 'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
++ 'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX', 'CONFIG_BSD' ] } }
+
+
+ ##
+@@ -898,7 +898,7 @@
+ { 'struct': 'GuestPCIAddress',
+ 'data': {'domain': 'int', 'bus': 'int',
+ 'slot': 'int', 'function': 'int'},
+- 'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
++ 'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX', 'CONFIG_BSD' ] } }
+
+ ##
+ # @GuestCCWAddress:
+@@ -918,7 +918,7 @@
+ 'ssid': 'int',
+ 'subchno': 'int',
+ 'devno': 'int'},
+- 'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
++ 'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX', 'CONFIG_BSD' ] } }
+
+ ##
+ # @GuestDiskAddress:
+@@ -948,7 +948,7 @@
+ 'bus': 'int', 'target': 'int', 'unit': 'int',
+ '*serial': 'str', '*dev': 'str',
+ '*ccw-address': 'GuestCCWAddress'},
+- 'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
++ 'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX', 'CONFIG_BSD' ] } }
+
+ ##
+ # @GuestNVMeSmart:
+@@ -1068,7 +1068,7 @@
+ 'data': {'name': 'str', 'mountpoint': 'str', 'type': 'str',
+ '*used-bytes': 'uint64', '*total-bytes': 'uint64',
+ '*total-bytes-privileged': 'uint64', 'disk': ['GuestDiskAddress']},
+- 'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
++ 'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX', 'CONFIG_BSD' ] } }
+
+ ##
+ # @guest-get-fsinfo:
+@@ -1082,7 +1082,7 @@
+ ##
+ { 'command': 'guest-get-fsinfo',
+ 'returns': ['GuestFilesystemInfo'],
+- 'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX' ] } }
++ 'if': { 'any': [ 'CONFIG_WIN32', 'CONFIG_LINUX', 'CONFIG_BSD' ] } }
+
+ ##
+ # @guest-set-user-password:
Index: patches/patch-tcg_riscv_tcg-target_c_inc
===================================================================
RCS file: patches/patch-tcg_riscv_tcg-target_c_inc
diff -N patches/patch-tcg_riscv_tcg-target_c_inc
--- patches/patch-tcg_riscv_tcg-target_c_inc 15 Jul 2024 11:13:29 -0000
1.3
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,21 +0,0 @@
-util/cpuinfo-riscv: Support OpenBSD signal frame
-adc028428a6da5ea8d6a688085966a33be4c97c7
-
-Index: tcg/riscv/tcg-target.c.inc
---- tcg/riscv/tcg-target.c.inc.orig
-+++ tcg/riscv/tcg-target.c.inc
-@@ -2116,7 +2116,14 @@ static void sigill_handler(int signo, siginfo_t *si, v
- {
- /* Skip the faulty instruction */
- ucontext_t *uc = (ucontext_t *)data;
-+
-+#ifdef __linux__
- uc->uc_mcontext.__gregs[REG_PC] += 4;
-+#elif defined(__OpenBSD__)
-+ uc->sc_sepc += 4;
-+#else
-+# error Unsupported OS
-+#endif
-
- got_sigill = 1;
- }
Index: patches/patch-util_cpuinfo-aarch64_c
===================================================================
RCS file: patches/patch-util_cpuinfo-aarch64_c
diff -N patches/patch-util_cpuinfo-aarch64_c
--- patches/patch-util_cpuinfo-aarch64_c 15 Jul 2024 11:13:29 -0000
1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,56 +0,0 @@
-util/cpuinfo-aarch64: Add OpenBSD support
-ab089908b42f22e7edfa0d40db963c136ab35419
-
-Index: util/cpuinfo-aarch64.c
---- util/cpuinfo-aarch64.c.orig
-+++ util/cpuinfo-aarch64.c
-@@ -20,6 +20,12 @@
- #ifdef CONFIG_DARWIN
- # include <sys/sysctl.h>
- #endif
-+#ifdef __OpenBSD__
-+# include <machine/armreg.h>
-+# include <machine/cpu.h>
-+# include <sys/types.h>
-+# include <sys/sysctl.h>
-+#endif
-
- unsigned cpuinfo;
-
-@@ -71,6 +77,36 @@ unsigned __attribute__((constructor)) cpuinfo_init(voi
- info |= sysctl_for_bool("hw.optional.arm.FEAT_AES") * CPUINFO_AES;
- info |= sysctl_for_bool("hw.optional.arm.FEAT_PMULL") * CPUINFO_PMULL;
- info |= sysctl_for_bool("hw.optional.arm.FEAT_BTI") * CPUINFO_BTI;
-+#endif
-+#ifdef __OpenBSD__
-+ int mib[2];
-+ uint64_t isar0;
-+ uint64_t pfr1;
-+ size_t len;
-+
-+ mib[0] = CTL_MACHDEP;
-+ mib[1] = CPU_ID_AA64ISAR0;
-+ len = sizeof(isar0);
-+ if (sysctl(mib, 2, &isar0, &len, NULL, 0) != -1) {
-+ if (ID_AA64ISAR0_ATOMIC(isar0) >= ID_AA64ISAR0_ATOMIC_IMPL) {
-+ info |= CPUINFO_LSE;
-+ }
-+ if (ID_AA64ISAR0_AES(isar0) >= ID_AA64ISAR0_AES_BASE) {
-+ info |= CPUINFO_AES;
-+ }
-+ if (ID_AA64ISAR0_AES(isar0) >= ID_AA64ISAR0_AES_PMULL) {
-+ info |= CPUINFO_PMULL;
-+ }
-+ }
-+
-+ mib[0] = CTL_MACHDEP;
-+ mib[1] = CPU_ID_AA64PFR1;
-+ len = sizeof(pfr1);
-+ if (sysctl(mib, 2, &pfr1, &len, NULL, 0) != -1) {
-+ if (ID_AA64PFR1_BT(pfr1) >= ID_AA64PFR1_BT_IMPL) {
-+ info |= CPUINFO_BTI;
-+ }
-+ }
- #endif
-
- cpuinfo = info;
Index: patches/patch-util_cpuinfo-ppc_c
===================================================================
RCS file: patches/patch-util_cpuinfo-ppc_c
diff -N patches/patch-util_cpuinfo-ppc_c
--- patches/patch-util_cpuinfo-ppc_c 15 Jul 2024 11:13:29 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,54 +0,0 @@
-util/cpuinfo-ppc: Fix building on OpenBSD
-272d3decc19aebe87955f4ec6d0c6cc8790471f1
-
-Index: util/cpuinfo-ppc.c
---- util/cpuinfo-ppc.c.orig
-+++ util/cpuinfo-ppc.c
-@@ -6,11 +6,13 @@
- #include "qemu/osdep.h"
- #include "host/cpuinfo.h"
-
--#include <asm/cputable.h>
--#ifdef CONFIG_GETAUXVAL
--# include <sys/auxv.h>
--#else
--# include "elf.h"
-+#ifdef CONFIG_LINUX
-+# include <asm/cputable.h>
-+# ifdef CONFIG_GETAUXVAL
-+# include <sys/auxv.h>
-+# else
-+# include "elf.h"
-+# endif
- #endif
-
- unsigned cpuinfo;
-@@ -19,16 +21,17 @@ unsigned cpuinfo;
- unsigned __attribute__((constructor)) cpuinfo_init(void)
- {
- unsigned info = cpuinfo;
-- unsigned long hwcap, hwcap2;
-
- if (info) {
- return info;
- }
-
-- hwcap = qemu_getauxval(AT_HWCAP);
-- hwcap2 = qemu_getauxval(AT_HWCAP2);
- info = CPUINFO_ALWAYS;
-
-+#ifdef CONFIG_LINUX
-+ unsigned long hwcap = qemu_getauxval(AT_HWCAP);
-+ unsigned long hwcap2 = qemu_getauxval(AT_HWCAP2);
-+
- /* Version numbers are monotonic, and so imply all lower versions. */
- if (hwcap2 & PPC_FEATURE2_ARCH_3_1) {
- info |= CPUINFO_V3_1 | CPUINFO_V3_0 | CPUINFO_V2_07 | CPUINFO_V2_06;
-@@ -58,6 +61,7 @@ unsigned __attribute__((constructor)) cpuinfo_init(voi
- }
- }
- }
-+#endif
-
- cpuinfo = info;
- return info;
Index: pkg/PLIST-main
===================================================================
RCS file: /cvs/ports/emulators/qemu/pkg/PLIST-main,v
retrieving revision 1.17
diff -u -p -u -p -r1.17 PLIST-main
--- pkg/PLIST-main 28 May 2024 13:57:38 -0000 1.17
+++ pkg/PLIST-main 3 Oct 2024 02:03:36 -0000
@@ -21,7 +21,6 @@
@bin bin/qemu-system-mips64
@bin bin/qemu-system-mips64el
@bin bin/qemu-system-mipsel
-@bin bin/qemu-system-nios2
@bin bin/qemu-system-or1k
@bin bin/qemu-system-ppc
@bin bin/qemu-system-ppc64
@@ -110,6 +109,7 @@ share/doc/qemu/devel/clocks.html
share/doc/qemu/devel/code-of-conduct.html
share/doc/qemu/devel/conflict-resolution.html
share/doc/qemu/devel/control-flow-integrity.html
+share/doc/qemu/devel/crypto.html
share/doc/qemu/devel/decodetree.html
share/doc/qemu/devel/docs.html
share/doc/qemu/devel/ebpf_rss.html
@@ -122,6 +122,7 @@ share/doc/qemu/devel/index-tcg.html
share/doc/qemu/devel/index.html
share/doc/qemu/devel/kconfig.html
share/doc/qemu/devel/loads-stores.html
+share/doc/qemu/devel/luks-detached-header.html
share/doc/qemu/devel/maintainers.html
share/doc/qemu/devel/memory.html
share/doc/qemu/devel/migration/
@@ -134,6 +135,8 @@ share/doc/qemu/devel/migration/index.htm
share/doc/qemu/devel/migration/main.html
share/doc/qemu/devel/migration/mapped-ram.html
share/doc/qemu/devel/migration/postcopy.html
+share/doc/qemu/devel/migration/qpl-compression.html
+share/doc/qemu/devel/migration/uadk-compression.html
share/doc/qemu/devel/migration/vfio.html
share/doc/qemu/devel/migration/virtio.html
share/doc/qemu/devel/modules.html
@@ -176,7 +179,10 @@ share/doc/qemu/interop/dbus-vmstate.html
share/doc/qemu/interop/dbus.html
share/doc/qemu/interop/index.html
share/doc/qemu/interop/live-block-operations.html
+share/doc/qemu/interop/nbd.html
+share/doc/qemu/interop/parallels.html
share/doc/qemu/interop/pr-helper.html
+share/doc/qemu/interop/prl-xml.html
share/doc/qemu/interop/qemu-qmp-ref.html
share/doc/qemu/interop/qemu-storage-daemon-qmp-ref.html
share/doc/qemu/interop/qmp-spec.html
@@ -211,7 +217,10 @@ share/doc/qemu/specs/ppc-spapr-uv-hcalls
share/doc/qemu/specs/ppc-spapr-xive.html
share/doc/qemu/specs/ppc-xive.html
share/doc/qemu/specs/pvpanic.html
+share/doc/qemu/specs/rapl-msr.html
+share/doc/qemu/specs/rocker.html
share/doc/qemu/specs/sev-guest-firmware.html
+share/doc/qemu/specs/spdm.html
share/doc/qemu/specs/standard-vga.html
share/doc/qemu/specs/tpm.html
share/doc/qemu/specs/virt-ctlr.html
@@ -255,6 +264,7 @@ share/doc/qemu/system/arm/vexpress.html
share/doc/qemu/system/arm/virt.html
share/doc/qemu/system/arm/xenpvh.html
share/doc/qemu/system/arm/xlnx-versal-virt.html
+share/doc/qemu/system/arm/xlnx-zynq.html
share/doc/qemu/system/arm/xscale.html
share/doc/qemu/system/authz.html
share/doc/qemu/system/barrier.html
@@ -363,6 +373,7 @@ share/doc/qemu/tools/qemu-nbd.html
share/doc/qemu/tools/qemu-pr-helper.html
share/doc/qemu/tools/qemu-storage-daemon.html
share/doc/qemu/tools/qemu-trace-stap.html
+share/doc/qemu/tools/qemu-vmsr-helper.html
share/doc/qemu/tools/virtfs-proxy-helper.html
share/doc/qemu/user/
share/doc/qemu/user/index.html
@@ -413,6 +424,8 @@ share/qemu/edk2-i386-code.fd
share/qemu/edk2-i386-secure-code.fd
share/qemu/edk2-i386-vars.fd
share/qemu/edk2-licenses.txt
+share/qemu/edk2-riscv-code.fd
+share/qemu/edk2-riscv-vars.fd
share/qemu/edk2-x86_64-code.fd
share/qemu/edk2-x86_64-secure-code.fd
share/qemu/efi-e1000.rom