From: Brad Smith Subject: Re: UPDATE: QEMU 10.2.2 To: ports@openbsd.org Date: Fri, 3 Apr 2026 17:37:47 -0400 ping. On 2026-03-22 11:26 p.m., Brad Smith wrote: > 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 >