Download raw body.
UPDATE: QEMU 10.2.2
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
UPDATE: QEMU 10.2.2