On Tue, Jan 20, 2026 at 10:16:08AM +0100, Filip Hejsek wrote:
> On Tue, 2026-01-20 at 08:43 +0000, Daniel P. Berrangé wrote:
> > On Mon, Jan 19, 2026 at 04:43:21AM -0500, Michael S. Tsirkin wrote:
> > > On Mon, Jan 19, 2026 at 09:38:41AM +0000, Daniel P. Berrangé wrote:
> > > > 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.
> > >
> > > Not sure. But what we can do is add another flag to detect new kernels.
> > > I'll try to think of a good name but suggestions are welcome.
> >
> > How can we detect the kernel ? There's no feature flag that can be
> > negotiated or detected to report the changed kernel behaviour
> > AFAICS. We have no visibility of kernel version, and even if we did,
> > the possibility of backports would make that unreliable too. The
> > inability to auto-detect anything is what makes the kernel behaviour
> > change so awful.
> >
> > We can add a nother qemu flag "console-size-inverted" to flip QEMU
> > between the 2 behaviours, but that still won't let us be able to
> > enable 'console-size' by default without guaranteed regressions.
> > The 'console-size-inverted' flag would merely flip the breakage
> > between different groups of guest OS.
>
> We could add a new virtio feature flag, and by default only enable
> resizing when the guest supports this new flag. Kernels that support
> the flag would work by default, and kernels that have the correct order
> but don't yet support the flag would require manually enabling the
> feature.
Right. For now. In X years when we see downstreams backporting the
feature, things can change.
> In any case, we will probably need to add some documentation for the
> property. I'm trying to find a good place for it, but it seems that the
> virtconsole and virtio-serial-bus devices are not actually documented
> anywhere at all. They should probably be documented in the man page,
> right?
>
> >
> > > > > 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