From e56bd45d640b12437a56c6e569f2308e9d523fac Mon Sep 17 00:00:00 2001 From: sungmin ha Date: Sat, 6 Apr 2013 18:18:15 +0900 Subject: [PATCH] virtio-kbd: increased virtio keyboard queue and fixed overwrite bug Signed-off-by: SungMin Ha --- package/changelog | 3 +++ package/pkginfo.manifest | 2 +- tizen/src/hw/maru_virtio_keyboard.c | 13 +++++++++++-- tizen/src/hw/maru_virtio_keyboard.h | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/package/changelog b/package/changelog index 7197343..c2e2972 100644 --- a/package/changelog +++ b/package/changelog @@ -1,3 +1,6 @@ +* 1.5.24 +- increased virtio keyboard queue and fixed overwrite bug +== SungMin Ha 2013-04-06 * 1.5.23 - no need to get the shmkey from another shm == GiWoong Kim 2013-04-03 diff --git a/package/pkginfo.manifest b/package/pkginfo.manifest index d46344e..0aacd9e 100644 --- a/package/pkginfo.manifest +++ b/package/pkginfo.manifest @@ -1,4 +1,4 @@ -Version: 1.5.23 +Version: 1.5.24 Maintainer: Yeong-Kyoon Lee Source: emulator diff --git a/tizen/src/hw/maru_virtio_keyboard.c b/tizen/src/hw/maru_virtio_keyboard.c index 97f4d2a..6cae72f 100644 --- a/tizen/src/hw/maru_virtio_keyboard.c +++ b/tizen/src/hw/maru_virtio_keyboard.c @@ -84,6 +84,14 @@ void virtio_keyboard_notify(void *opaque) while ((written_cnt--)) { kbdevt = &vkbd->kbdqueue.kbdevent[vkbd->kbdqueue.rptr]; + while (((EmulKbdEvent*)(elem.in_sg[index].iov_base))->code != 0) { + if (++index == VIRTIO_KBD_QUEUE_SIZE) { + index--; + TRACE("virtio queue is full.\n"); + break; + } + } + /* Copy keyboard data into guest side. */ TRACE("copy: keycode %d, type %d, elem_index %d\n", kbdevt->code, kbdevt->type, index); @@ -98,6 +106,7 @@ void virtio_keyboard_notify(void *opaque) vkbd->kbdqueue.rptr++; if (vkbd->kbdqueue.rptr == VIRTIO_KBD_QUEUE_SIZE) { vkbd->kbdqueue.rptr = 0; + TRACE("kbdqueue is full.\n"); } } qemu_mutex_unlock(&vkbd->event_mutex); @@ -235,7 +244,7 @@ VirtIODevice *virtio_keyboard_init(DeviceState *dev) vkbd->vdev.get_features = virtio_keyboard_get_features; - vkbd->vq = virtio_add_queue(&vkbd->vdev, 64, virtio_keyboard_handle); + vkbd->vq = virtio_add_queue(&vkbd->vdev, 128, virtio_keyboard_handle); vkbd->qdev = dev; /* bottom half */ @@ -243,7 +252,7 @@ VirtIODevice *virtio_keyboard_init(DeviceState *dev) /* register keyboard handler */ qemu_add_kbd_event_handler(virtio_keyboard_event, vkbd); - + return &vkbd->vdev; } diff --git a/tizen/src/hw/maru_virtio_keyboard.h b/tizen/src/hw/maru_virtio_keyboard.h index a744760c..4cd9b4c 100644 --- a/tizen/src/hw/maru_virtio_keyboard.h +++ b/tizen/src/hw/maru_virtio_keyboard.h @@ -39,7 +39,7 @@ extern "C" { #include "hw/virtio.h" #define VIRTIO_KBD_DEVICE_NAME "virtio-keyboard" -#define VIRTIO_KBD_QUEUE_SIZE 10 +#define VIRTIO_KBD_QUEUE_SIZE 100 typedef struct EmulKbdEvent { uint16_t code; -- 2.7.4