qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Dinesh Subhraveti" <subhraveti@gmail.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH] No keyboard / mouse after reboot
Date: Mon, 13 Jul 2009 16:26:14 -0700	[thread overview]
Message-ID: <04b201ca0411$514a9d40$732d2b09@DineshThinkpad> (raw)

[-- Attachment #1: Type: text/plain, Size: 1935 bytes --]

At system initialization, some guests conclude that i8042 controller is missing when the PS2 buffer is full.  As a result, the guest comes up with no keyboard or mouse.  The behavior is seen when the user types or mouses over the VNC window during the BIOS phase of a reboot, causing the PS2 buffer to fill up.  It doesn't occur when the system boots the first time, since the device is initially disabled and doesn't accept events.

This patch tunes Qemu parameters to reasonable values which make the guest happy.  Linux assumes the size of PS2 buffer to be 16 bytes, while Qemu defines it as 256.  Reducing PS2_QUEUE_SIZE to 15 ensures that the guest never sees the buffer to be full.

However, PS2 mouse event handler drops mouse events unless there is at least 16 bytes of buffer space left in the queue (to account for mouse movements that consume multiple events).  With PS2_QUEUE_SIZE reduced to 15, there will never be 16 bytes left in the queue and no mouse event ever gets in.  So the size of reserved buffer space is reduced to 8.

With these changes, both keyboard and mouse remain responsive after reboot, even when typed or moused over during reboot.  Tested with SLES 11 GM 64-bit guest.

---
diff --git a/hw/ps2.c b/hw/ps2.c
index fb77005..51a3ab8 100644
--- a/hw/ps2.c
+++ b/hw/ps2.c
@@ -70,7 +70,7 @@
 #define MOUSE_STATUS_ENABLED    0x20
 #define MOUSE_STATUS_SCALE21    0x10

-#define PS2_QUEUE_SIZE 256
+#define PS2_QUEUE_SIZE 15

 typedef struct {
     uint8_t data[PS2_QUEUE_SIZE];
@@ -346,7 +346,7 @@ static void ps2_mouse_event(void *opaque,
     s->mouse_buttons = buttons_state;

     if (!(s->mouse_status & MOUSE_STATUS_REMOTE) &&
-        (s->common.queue.count < (PS2_QUEUE_SIZE - 16))) {
+        (s->common.queue.count < (PS2_QUEUE_SIZE - 8))) {
         for(;;) {
             /* if not remote, send event. Multiple events are sent if
                too big deltas */

[-- Attachment #2: Type: text/html, Size: 2920 bytes --]

             reply	other threads:[~2009-07-13 23:26 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-13 23:26 Dinesh Subhraveti [this message]
2009-07-14  1:10 ` [Qemu-devel] [PATCH] No keyboard / mouse after reboot Anthony Liguori
2009-07-14  1:42   ` [Qemu-devel] " Dinesh Subhraveti

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='04b201ca0411$514a9d40$732d2b09@DineshThinkpad' \
    --to=subhraveti@gmail.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).