virtio-kbd: increased virtio keyboard queue and fixed overwrite bug
authorsungmin ha <sungmin82.ha@samsung.com>
Sat, 6 Apr 2013 09:18:15 +0000 (18:18 +0900)
committersungmin ha <sungmin82.ha@samsung.com>
Sat, 6 Apr 2013 09:18:15 +0000 (18:18 +0900)
Signed-off-by: SungMin Ha <sungmin82.ha@samsung.com>
package/changelog
package/pkginfo.manifest
tizen/src/hw/maru_virtio_keyboard.c
tizen/src/hw/maru_virtio_keyboard.h

index 7197343..c2e2972 100644 (file)
@@ -1,3 +1,6 @@
+* 1.5.24
+- increased virtio keyboard queue and fixed overwrite bug
+== SungMin Ha <sungmin82.ha@samsung.com> 2013-04-06
 * 1.5.23
 - no need to get the shmkey from another shm
 == GiWoong Kim <giwoong.kim@samsung.com> 2013-04-03
index d46344e..0aacd9e 100644 (file)
@@ -1,4 +1,4 @@
-Version: 1.5.23
+Version: 1.5.24
 Maintainer: Yeong-Kyoon Lee<yeongkyoon.lee@samsung.com>
 Source: emulator
 
index 97f4d2a..6cae72f 100644 (file)
@@ -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;
 }
 
index a744760..4cd9b4c 100644 (file)
@@ -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;