Re: [PATCH] virtio: console: Make resize control event handling compliant with spec

From: Amit Shah
Date: Thu Mar 27 2025 - 06:41:17 EST


On Thu, 2025-03-20 at 18:26 +0100, Maximilian Immanuel Brandtner wrote:
> According to section 5.3.6.2 of the virtio spec a control buffer with
> the event VIRITO_CONSOLE_RESIZE is followed by a
> virtio_console_resize
> struct containing 2 little endian 16bit integerts cols,rows. The
> kernel
> implementation assums native endianness (which results in mangled
> values
> on big endian architectures)(a seperate patch by Halil Pasic will
> deal with
> that issue) and swaps the ordering of columns and rows.
> This patch changes the ordering of rows and columns to columns then
> rows.

It's clearer and cleaner to only describe the issue you're solving
here; the other patch will take care of the other issue.

You can add more info here, like: the console resize messages via the
config space (section 5.3.4) are used for resizing, and that works fine
for single-console devices. However, for multi-console devices
(enabled by multiport) had the spec and Linux implementation out of
sync. As far as I know, there are no device-side implementations of
mutiport console, so patching Linux is the way to go. (You can replace
the 'I' with my name as the maintainer there.)

> Fixes: 8345adbf96fc1 ("virtio: console: Accept console size along
> with resize control message")
> Signed-off-by: Maximilian Immanuel Brandtner <maxbr@xxxxxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx # v2.6.35+
> ---
>  drivers/char/virtio_console.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/char/virtio_console.c
> b/drivers/char/virtio_console.c
> index 24442485e73e..9668e89873cf 100644
> --- a/drivers/char/virtio_console.c
> +++ b/drivers/char/virtio_console.c
> @@ -1579,8 +1579,8 @@ static void handle_control_message(struct
> virtio_device *vdev,
>   break;
>   case VIRTIO_CONSOLE_RESIZE: {
>   struct {
> - __u16 rows;
>   __u16 cols;
> + __u16 rows;
>   } size;
>  
>   if (!is_console_port(port))


Thanks,

Amit