On Mon, Jan 19, 2026 at 04:27:51AM +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(-)
>
> @@ -1158,6 +1228,8 @@ static const Property virtio_serial_properties[] = {
> 31),
> DEFINE_PROP_BIT64("emergency-write", VirtIOSerial, host_features,
> VIRTIO_CONSOLE_F_EMERG_WRITE, true),
> + DEFINE_PROP_BIT64("console-size", VirtIOSerial, host_features,
> + VIRTIO_CONSOLE_F_SIZE, true),
> };
Given the horrible mess with the kernel intentionally changing its
behaviour after 15 years, I don't think we can we set this to be
enabled by default.
The recent behaviour change is never going to be backported to enough
stable distros that we can rely on the new behaviour, and thanks to
the change we can't rely on the old behaviour either. We're doomed no
matter what ordernig we use.
Thus, IMHO, this has to stay set to false indefinitely.
> static void virtio_serial_class_init(ObjectClass *klass, const void *data)
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 6411e68856..50554b8900 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -38,7 +38,9 @@
> #include "hw/acpi/generic_event_device.h"
> #include "qemu/audio.h"
>
> -GlobalProperty hw_compat_10_2[] = {};
> +GlobalProperty hw_compat_10_2[] = {
> + { "virtio-serial-device", "console-size", "off" },
> +};
> const size_t hw_compat_10_2_len = G_N_ELEMENTS(hw_compat_10_2);
>
> GlobalProperty hw_compat_10_1[] = {
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|