[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH RFC] ps2: set the keybord output buffer size as the
From: |
arei.gonglei |
Subject: |
[Qemu-devel] [PATCH RFC] ps2: set the keybord output buffer size as the same as kernel |
Date: |
Thu, 17 Apr 2014 21:16:15 +0800 |
From: Gonglei <address@hidden>
According to the PS/2 Mouse/Keyboard Protocol, the keyboard outupt buffer size
is 16 bytes. And the PS2_QUEUE_SIZE 256 was introduced in Qemu from the very
beginning.
When I started a redhat5.6 32bit guest, meanwhile tapped the keyboard as
quickly as
possible, the screen would show me "i8042.c: No controller found". As a result,
I couldn't use the keyboard in the VNC client.
Previous discussion about the issue in maillist:
http://thread.gmane.org/gmane.comp.emulators.qemu/43294/focus=47180
This patch has been tested on redhat5.6 32-bit/suse11sp3 64-bit guests.
More easy meathod to reproduce:
1.boot a guest with libvirt.
2.connect to VNC client.
3.as you see the BIOS, bootloader, Linux booting, run the follow simply shell
script:
for((i=0;i<10000000;i++)) do virsh send-key redhat5.6 KEY_A; done
Actual results:
dmesg show "i8042.c: No controller found." And the keyboard is out of work.
Signed-off-by: Gonglei <address@hidden>
---
hw/input/ps2.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/hw/input/ps2.c b/hw/input/ps2.c
index 3412079..a754fef 100644
--- a/hw/input/ps2.c
+++ b/hw/input/ps2.c
@@ -71,7 +71,7 @@
#define MOUSE_STATUS_ENABLED 0x20
#define MOUSE_STATUS_SCALE21 0x10
-#define PS2_QUEUE_SIZE 256
+#define PS2_QUEUE_SIZE 16 /* Keyboard output buffer size */
typedef struct {
uint8_t data[PS2_QUEUE_SIZE];
@@ -137,7 +137,7 @@ void ps2_queue(void *opaque, int b)
PS2State *s = (PS2State *)opaque;
PS2Queue *q = &s->queue;
- if (q->count >= PS2_QUEUE_SIZE)
+ if (q->count >= PS2_QUEUE_SIZE - 1)
return;
q->data[q->wptr] = b;
if (++q->wptr == PS2_QUEUE_SIZE)
@@ -375,7 +375,7 @@ static void ps2_mouse_event(void *opaque,
}
if (!(s->mouse_status & MOUSE_STATUS_REMOTE) &&
- (s->common.queue.count < (PS2_QUEUE_SIZE - 16))) {
+ (s->common.queue.count < PS2_QUEUE_SIZE)) {
for(;;) {
/* if not remote, send event. Multiple events are sent if
too big deltas */
--
1.6.0.2
- [Qemu-devel] [PATCH RFC] ps2: set the keybord output buffer size as the same as kernel,
arei.gonglei <=
- Re: [Qemu-devel] [PATCH RFC] ps2: set the keybord output buffer size as the same as kernel, Gonglei (Arei), 2014/04/21
- Re: [Qemu-devel] [PATCH RFC] ps2: set the keybord output buffer size as the same as kernel, Gerd Hoffmann, 2014/04/22
- Re: [Qemu-devel] [PATCH RFC] ps2: set the keybord output buffer size as the same as kernel, Gonglei (Arei), 2014/04/22
- Re: [Qemu-devel] [PATCH RFC] ps2: set the keybord output buffer size as the same as kernel, Gerd Hoffmann, 2014/04/22
- Re: [Qemu-devel] [PATCH RFC] ps2: set the keybord output buffer size as the same as kernel, Juan Quintela, 2014/04/22
- Re: [Qemu-devel] [PATCH RFC] ps2: set the keybord output buffer size as the same as kernel, Gonglei (Arei), 2014/04/23
- Re: [Qemu-devel] [PATCH RFC] ps2: set the keybord output buffer size as the same as kernel, Gerd Hoffmann, 2014/04/23
- Re: [Qemu-devel] [PATCH RFC] ps2: set the keybord output buffer size as the same as kernel, Gonglei (Arei), 2014/04/23
- Re: [Qemu-devel] [PATCH RFC] ps2: set the keybord output buffer size as the same as kernel, Gerd Hoffmann, 2014/04/23
- Re: [Qemu-devel] [PATCH RFC] ps2: set the keybord output buffer size as the same as kernel, Gonglei (Arei), 2014/04/23