Filip Hejsek <filip.hej...@gmail.com> writes: > On Fri, 2025-09-12 at 16:01 +0200, Markus Armbruster wrote: >> Cc: libvirt >> >> Filip Hejsek <filip.hej...@gmail.com> writes: >> >> > From: Szymon Lukasz <noh4...@gmail.com> >> > >> > The managment software can use this command to notify QEMU about the >> > size of the terminal connected to a chardev, QEMU can then forward this >> > information to the guest if the chardev is connected to a virtio console >> > device. >> > >> > Signed-off-by: Szymon Lukasz <noh4...@gmail.com> >> > Suggested-by: Daniel P. Berrangé <berra...@redhat.com> >> > Signed-off-by: Filip Hejsek <filip.hej...@gmail.com> >> > --- >> > chardev/char.c | 14 ++++++++++++++ >> > qapi/char.json | 22 ++++++++++++++++++++++ >> > 2 files changed, 36 insertions(+) >> > >> > diff --git a/chardev/char.c b/chardev/char.c >> > index >> > b45d79cb9b57643827eb7479257fdda2cf6b0434..6e3ade98614c949be8041ec5905a490ff536dee9 >> > 100644 >> > --- a/chardev/char.c >> > +++ b/chardev/char.c >> > @@ -1269,6 +1269,20 @@ bool qmp_add_client_char(int fd, bool has_skipauth, >> > bool skipauth, >> > return true; >> > } >> > >> > +void qmp_chardev_resize(const char *id, uint16_t cols, uint16_t rows, >> > + Error **errp) >> > +{ >> > + Chardev *chr; >> > + >> > + chr = qemu_chr_find(id); >> > + if (chr == NULL) { >> > + error_setg(errp, "Chardev '%s' not found", id); >> > + return; >> > + } >> > + >> > + qemu_chr_resize(chr, cols, rows); >> > +} >> > + >> > /* >> > * Add a timeout callback for the chardev (in milliseconds), return >> > * the GSource object created. Please use this to add timeout hook for >> > diff --git a/qapi/char.json b/qapi/char.json >> > index >> > f0a53f742c8bee24c377551803a864fd36ac78cf..0a26c5eee6b71bc5de127a91b253cc69a9fe8ce6 >> > 100644 >> > --- a/qapi/char.json >> > +++ b/qapi/char.json >> > @@ -874,6 +874,28 @@ >> > { 'command': 'chardev-send-break', >> > 'data': { 'id': 'str' } } >> > >> > +## >> > +# @chardev-resize: >> >> This name doesn't tell me what is being resized. PATCH 04 uses >> "winsize", which is better. The (losely) related SIGWINCH suggests >> "window change" or "window size change". Below, you use "terminal >> size". > > How about chardev-console-resize? That would match the name of the > virtio event (VIRTIO_CONSOLE_RESIZE).
Not bad. It could become slightly bad if we make devices other than "consoles" make us of it. Would that be possible? >> > +# >> > +# Notifies a chardev about the current size of the terminal connected >> > +# to this chardev. >> >> Yes, but what is it good for? Your commit message tells: "managment >> software can use this command to notify QEMU about the size of the >> terminal connected to a chardev, QEMU can then forward this information >> to the guest if the chardev is connected to a virtio console device." > > How about: > > Notifies a chardev about the current size of the terminal connected > to this chardev. The information will be forwarded to the guest if > the chardev is connected to a virtio console device. Works for me. >> > +# >> > +# @id: the chardev's ID, must exist >> > +# @cols: the number of columns >> > +# @rows: the number of rows >> >> Blank lines between the argument descriptions, bease. >> >> What's the initial size? > > 0x0 A clearly invalid size. I guess it effectively means "unknown size". Should we document that? >> Do we need a way to query the size? > > I don't think it is necessary. What would be the usecase for that? I don't know, but it's my standard question when I see an interface to set something without an interface to get it. Its purpose is to make us think, not to make us at the get blindly. >> > +# >> > +# Since: 10.2 >> > +# >> > +# .. qmp-example:: >> > +# >> > +# -> { "execute": "chardev-resize", "arguments": { "id": "foo", >> > "cols": 80, "rows": 24 } } >> > +# <- { "return": {} } >> > +## >> > +{ 'command': 'chardev-resize', >> > + 'data': { 'id': 'str', >> > + 'cols': 'uint16', >> > + 'rows': 'uint16' } } >> > + >> > ## >> > # @VSERPORT_CHANGE: >> > #