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 --]
next 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).