From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O8qew-0000r1-NM for qemu-devel@nongnu.org; Mon, 03 May 2010 04:05:46 -0400 Received: from [140.186.70.92] (port=39998 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O8qet-0000pv-LF for qemu-devel@nongnu.org; Mon, 03 May 2010 04:05:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O8qer-0000JW-Cp for qemu-devel@nongnu.org; Mon, 03 May 2010 04:05:43 -0400 Received: from mx1.redhat.com ([209.132.183.28]:13263) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O8qeq-0000JA-GQ for qemu-devel@nongnu.org; Mon, 03 May 2010 04:05:41 -0400 Date: Mon, 3 May 2010 13:33:45 +0530 From: Amit Shah Message-ID: <20100503080345.GA4536@amit-x200.redhat.com> References: <1272868593-3795-1-git-send-email-amit.shah@redhat.com> <1272868593-3795-2-git-send-email-amit.shah@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1272868593-3795-2-git-send-email-amit.shah@redhat.com> Subject: [Qemu-devel] Re: [PATCH 2/2] virtio-console: Notify resize to the guest. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: Kusanagi Kouichi , qemu list On (Mon) May 03 2010 [12:06:33], Amit Shah wrote: > From: Kusanagi Kouichi > > 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 > Signed-off-by: Amit Shah > --- > 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