On Mon, 2026-01-19 at 04:27 +0100, Filip Hejsek wrote:
> Implement the part of the virtio spec that allows to notify the virtio
> driver about terminal resizes. The virtio spec contains two methods to
> achieve that:
> 
> For legacy drivers, we have only one port and we put the terminal size
> in the config space and inject the config changed interrupt.
> 
> For multiport devices, we use the control virtqueue to send a packet
> containing the terminal size. Note that old versions of the Linux kernel
> used an incorrect order for the fields (rows then cols instead of cols
> then rows), until it was fixed by commit 
> 5326ab737a47278dbd16ed3ee7380b26c7056ddd.
> 
> As a result, when using a Linux kernel older than 6.15, the number of rows
> and columns will be swapped.
> 
> Based on a patch originally written by Szymon Lukasz <[email protected]>,
> but partially rewritten to fix various corner cases.
> 
> Signed-off-by: Szymon Lukasz <[email protected]>
> Signed-off-by: Filip Hejsek <[email protected]>
> ---
>  hw/char/trace-events              |  1 +
>  hw/char/virtio-serial-bus.c       | 76 
> +++++++++++++++++++++++++++++++++++++--
>  hw/core/machine.c                 |  4 ++-
>  include/hw/virtio/virtio-serial.h |  5 +++
>  4 files changed, 83 insertions(+), 3 deletions(-)
> 
> [...]
> 
> diff --git a/include/hw/virtio/virtio-serial.h 
> b/include/hw/virtio/virtio-serial.h
> index 60641860bf..bda6d5312a 100644
> --- a/include/hw/virtio/virtio-serial.h
> +++ b/include/hw/virtio/virtio-serial.h
> @@ -145,6 +145,9 @@ struct VirtIOSerialPort {
>      bool host_connected;
>      /* Do apps not want to receive data? */
>      bool throttled;
> +
> +    /* Terminal size reported to the guest.  Only used for consoles. */
> +    uint16_t cols, rows;
>  };

I found a bug: after a migration, the guest is not informed about the
new console size. I see two ways to fix this: either add the cols and
rows fields to the migration stream, or always send the console size to
the guest after migration, even if it might not have changed. Which do
you prefer? Modifying the migration stream is somewhat annoying,
because both versions will have to be supported, and also the device
still uses legacy save/load functions rather than VMState.

Reply via email to