On (Mon) May 03 2010 [12:06:33], Amit Shah wrote: > From: Kusanagi Kouichi <sl...@ac.auone-net.jp> > > I tested this patch as follows: I put printf()s into involved > functions. Then ran qemu on a terminal emulator, and resized it. The > guest kernel gets initial size, and follows host resize. Both singleport > and multiport work. > > Signed-off-by: Kusanagi Kouichi <sl...@ac.auone-net.jp> > Signed-off-by: Amit Shah <amit.s...@redhat.com> > --- > hw/virtio-console.c | 3 +++ > hw/virtio-serial-bus.c | 15 +++++++++++++++ > hw/virtio-serial.h | 11 +++++++++-- > 3 files changed, 27 insertions(+), 2 deletions(-) > > diff --git a/hw/virtio-console.c b/hw/virtio-console.c > index caea11f..58246d1 100644 > --- a/hw/virtio-console.c > +++ b/hw/virtio-console.c > @@ -55,6 +55,9 @@ static void chr_event(void *opaque, int event) > case CHR_EVENT_CLOSED: > virtio_serial_close(&vcon->port); > break; > + case CHR_EVENT_RESIZE: > + virtio_serial_resize_console(&vcon->port, vcon->chr->rows, > vcon->chr->cols); > + break; > } > } > > diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c > index 97694d5..8766f1d 100644 > --- a/hw/virtio-serial-bus.c > +++ b/hw/virtio-serial-bus.c > @@ -205,6 +205,20 @@ int virtio_serial_close(VirtIOSerialPort *port) > return 0; > } > > +void virtio_serial_resize_console(VirtIOSerialPort *port, int rows, int cols) > +{ > + VirtIOSerial *vser = port->vser; > + > + vser->config.rows = rows; > + vser->config.cols = cols; > + > + if (use_multiport(vser)) { > + send_control_event(port, VIRTIO_CONSOLE_RESIZE, 0);
Thinking about this, this isn't the right way of sending console resize updates: we write in the config space and send an update event via control messages. The control message could be processed after another config-space update for another port, leading to races. I think it's better to send the row and column sizes along with the resize message. We do something similar for sending the 'name'; we could also imbed a struct within the VIRTIO_CONSOLE_RESIZE message similarly. This would need some guest kernel changes too. Kusanagi, can you do it? For guest kernel changes, please work off linux-next.git for your changes. If not, I'll get to this in a couple of weeks' time. Thanks, Amit