On Fri, 3 Oct 2025 at 16:39, Peter Xu <[email protected]> wrote:
>
> From: Arun Menon <[email protected]>
>
> This is an incremental step in converting vmstate loading
> code to report error via Error objects instead of directly
> printing it to console/monitor.
> It is ensured that vmstate_load_state() must report an error
> in errp, in case of failure.
>
> The errors are temporarily reported using error_report_err().
> This is removed in the subsequent patches in this series,
> when we are actually able to propagate the error to the calling
> function using errp. Whereas, if we want the function to exit on
> error, then error_fatal is passed.

> diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
> index de35902213..e61585aa61 100644
> --- a/hw/display/virtio-gpu.c
> +++ b/hw/display/virtio-gpu.c
> @@ -1347,7 +1347,7 @@ static int virtio_gpu_load(QEMUFile *f, void *opaque, 
> size_t size,
>      }
>
>      /* load & apply scanout state */
> -    vmstate_load_state(f, &vmstate_virtio_gpu_scanouts, g, 1);
> +    vmstate_load_state(f, &vmstate_virtio_gpu_scanouts, g, 1, &error_fatal);

This is in a migration VMState .get function -- shouldn't we
be passing failure up to the caller, rather than exiting
with error_fatal here ?

The commit message says some of this is fixed in subsequent
patches, but as of today this is still the code in git.
The other callsites which pass error_fatal to vmstate_load_state()
also look wrong:

hw/s390x/virtio-ccw.c:    return vmstate_load_state(f,
&vmstate_virtio_ccw_dev, dev, 1, &error_fatal);
hw/virtio/virtio-mmio.c:    return vmstate_load_state(f,
&vmstate_virtio_mmio, proxy, 1, &error_fatal);
hw/virtio/virtio-pci.c:    return vmstate_load_state(f,
&vmstate_virtio_pci, proxy, 1, &error_fatal);

as they are written to return an error value that they'll
never see because of the use of error_fatal here.

Do you have plans for further cleanup/extension of the
use of Error here that would let these functions pass
the Error back up the chain ?

thanks
-- PMM

Reply via email to