From: Brad Smith Subject: UPDATE: QEMU 10.2.2 To: ports@openbsd.org Date: Sun, 22 Mar 2026 23:26:26 -0400 Here is an update to QEMU 10.2.2. https://marc.info/?l=qemu-devel&m=177381254605022&w=2 Index: Makefile =================================================================== RCS file: /cvs/ports/emulators/qemu/Makefile,v retrieving revision 1.260 diff -u -p -u -p -r1.260 Makefile --- Makefile 5 Mar 2026 12:12:19 -0000 1.260 +++ Makefile 23 Mar 2026 02:21:18 -0000 @@ -6,7 +6,7 @@ USE_NOBTCFI= Yes COMMENT-main= multi system emulator COMMENT-ga= QEMU guest agent -VERSION= 10.2.1 +VERSION= 10.2.2 DISTNAME= qemu-${VERSION} CATEGORIES= emulators SITES= https://download.qemu.org/ Index: distinfo =================================================================== RCS file: /cvs/ports/emulators/qemu/distinfo,v retrieving revision 1.85 diff -u -p -u -p -r1.85 distinfo --- distinfo 5 Mar 2026 12:12:19 -0000 1.85 +++ distinfo 23 Mar 2026 02:21:18 -0000 @@ -1,2 +1,2 @@ -SHA256 (qemu-10.2.1.tar.xz) = o3F0d9jiyE1jC//7wg9s0yk+tFqh5trG0MwnaJmRyeE= -SIZE (qemu-10.2.1.tar.xz) = 141075160 +SHA256 (qemu-10.2.2.tar.xz) = eEspb/KcFBeqcjI6vLLS6pq5dxck9Xfc14XDsE8h4XY= +SIZE (qemu-10.2.2.tar.xz) = 141119364 Index: patches/patch-block_nfs_c =================================================================== RCS file: /cvs/ports/emulators/qemu/patches/patch-block_nfs_c,v retrieving revision 1.2 diff -u -p -u -p -r1.2 patch-block_nfs_c --- patches/patch-block_nfs_c 10 Feb 2026 10:46:00 -0000 1.2 +++ patches/patch-block_nfs_c 23 Mar 2026 02:21:18 -0000 @@ -1,23 +1,87 @@ -- support for libnfs API v2 +- block/nfs: add support for libnfs v6 Index: block/nfs.c --- block/nfs.c.orig +++ block/nfs.c -@@ -270,8 +270,13 @@ static int coroutine_fn nfs_co_preadv(BlockDriverState - task.iov = iov; +@@ -69,7 +69,9 @@ typedef struct NFSClient { + typedef struct NFSRPC { + BlockDriverState *bs; + int ret; ++#ifndef LIBNFS_API_V2 + QEMUIOVector *iov; ++#endif + struct stat *st; + Coroutine *co; + NFSClient *client; +@@ -237,6 +239,7 @@ nfs_co_generic_cb(int ret, struct nfs_context *nfs, vo + NFSRPC *task = private_data; + task->ret = ret; + assert(!task->st); ++#ifndef LIBNFS_API_V2 + if (task->ret > 0 && task->iov) { + if (task->ret <= task->iov->size) { + qemu_iovec_from_buf(task->iov, 0, data, task->ret); +@@ -244,6 +247,7 @@ nfs_co_generic_cb(int ret, struct nfs_context *nfs, vo + task->ret = -EIO; + } + } ++#endif + if (task->ret < 0) { + error_report("NFS Error: %s", nfs_get_error(nfs)); + } +@@ -266,13 +270,36 @@ static int coroutine_fn nfs_co_preadv(BlockDriverState + { + NFSClient *client = bs->opaque; + NFSRPC task; ++ char *buf = NULL; ++ bool my_buffer = false; + + nfs_co_init_task(bs, &task); +- task.iov = iov; ++#ifdef LIBNFS_API_V2 ++ if (iov->niov != 1) { ++ buf = g_try_malloc(bytes); ++ if (bytes && buf == NULL) { ++ return -ENOMEM; ++ } ++ my_buffer = true; ++ } else { ++ buf = iov->iov[0].iov_base; ++ } ++#endif ++ WITH_QEMU_LOCK_GUARD(&client->mutex) { +#ifdef LIBNFS_API_V2 if (nfs_pread_async(client->context, client->fh, -+ NULL, bytes, offset, nfs_co_generic_cb, &task) != 0) { ++ buf, bytes, offset, ++ nfs_co_generic_cb, &task) != 0) { +#else ++ task.iov = iov; + if (nfs_pread_async(client->context, client->fh, offset, bytes, nfs_co_generic_cb, &task) != 0) { +#endif ++ if (my_buffer) { ++ g_free(buf); ++ } return -ENOMEM; } -@@ -314,9 +319,15 @@ static int coroutine_fn nfs_co_pwritev(BlockDriverStat +@@ -280,6 +307,13 @@ static int coroutine_fn nfs_co_preadv(BlockDriverState + } + qemu_coroutine_yield(); + ++ if (my_buffer) { ++ if (task.ret > 0) { ++ qemu_iovec_from_buf(iov, 0, buf, task.ret); ++ } ++ g_free(buf); ++ } ++ + if (task.ret < 0) { + return task.ret; + } +@@ -315,9 +349,15 @@ static int coroutine_fn nfs_co_pwritev(BlockDriverStat } WITH_QEMU_LOCK_GUARD(&client->mutex) { @@ -33,3 +97,25 @@ Index: block/nfs.c if (my_buffer) { g_free(buf); } +@@ -856,6 +896,13 @@ static void coroutine_fn nfs_co_invalidate_cache(Block + } + #endif + ++static void nfs_refresh_limits(BlockDriverState *bs, Error **errp) ++{ ++ NFSClient *client = bs->opaque; ++ bs->bl.max_transfer = MIN((uint32_t)nfs_get_readmax(client->context), ++ (uint32_t)nfs_get_writemax(client->context)); ++} ++ + static const char *nfs_strong_runtime_opts[] = { + "path", + "user", +@@ -893,6 +940,7 @@ static BlockDriver bdrv_nfs = { + .bdrv_detach_aio_context = nfs_detach_aio_context, + .bdrv_attach_aio_context = nfs_attach_aio_context, + .bdrv_refresh_filename = nfs_refresh_filename, ++ .bdrv_refresh_limits = nfs_refresh_limits, + .bdrv_dirname = nfs_dirname, + + .strong_runtime_opts = nfs_strong_runtime_opts, Index: patches/patch-meson_build =================================================================== RCS file: /cvs/ports/emulators/qemu/patches/patch-meson_build,v retrieving revision 1.19 diff -u -p -u -p -r1.19 patch-meson_build --- patches/patch-meson_build 10 Feb 2026 10:46:00 -0000 1.19 +++ patches/patch-meson_build 23 Mar 2026 02:21:18 -0000 @@ -1,4 +1,4 @@ -- support for libnfs API v2 +- block/nfs: add support for libnfs v6 - localstatedir does not belong under prefix - remove hardcoding of optimization