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