From 9751ec38c0a5e5482d8ac3d77b2672f8299a64d0 Mon Sep 17 00:00:00 2001 From: sungmin ha Date: Tue, 16 Dec 2014 15:21:14 +0900 Subject: [PATCH] hwkey: added virtqueue_add_inbuf before virtqueue_kick Change-Id: Icf632a24426b6fb51cf77d59cea07e4bc6e73b23 Signed-off-by: sungmin ha --- drivers/maru/maru_virtio_hwkey.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/maru/maru_virtio_hwkey.c b/drivers/maru/maru_virtio_hwkey.c index aa5db7dc55b4..6e139c57a644 100644 --- a/drivers/maru/maru_virtio_hwkey.c +++ b/drivers/maru/maru_virtio_hwkey.c @@ -87,6 +87,8 @@ static unsigned int index = 0; static void vq_hwkey_callback(struct virtqueue *vq) { struct EmulHwkeyEvent hwkey_event; + unsigned int len = 0; + void *token = NULL; #if 0 printk(KERN_INFO "vq hwkey callback\n"); #endif @@ -95,20 +97,24 @@ static void vq_hwkey_callback(struct virtqueue *vq) if (hwkey_event.event_type == 0) { break; } - printk(KERN_ERR "keycode: %d, event_type: %d, vqidx: %d\n", hwkey_event.keycode, hwkey_event.event_type, vqidx); + printk(KERN_INFO "keycode: %d, event_type: %d, vqidx: %d\n", hwkey_event.keycode, hwkey_event.event_type, vqidx); if (hwkey_event.event_type == KEY_PRESSED) { - input_event(vh->idev, EV_KEY, hwkey_event.keycode, true); + input_event(vh->idev, EV_KEY, hwkey_event.keycode, true); } else if (hwkey_event.event_type == KEY_RELEASED) { - input_event(vh->idev, EV_KEY, hwkey_event.keycode, false); + input_event(vh->idev, EV_KEY, hwkey_event.keycode, false); } else { - printk(KERN_ERR "Unknown event type\n"); - return; + printk(KERN_ERR "Unknown event type\n"); } input_sync(vh->idev); memset(&vh->vbuf[vqidx], 0x00, sizeof(hwkey_event)); + token = virtqueue_get_buf(vh->vq, &len); + if (len > 0) { + err = virtqueue_add_inbuf(vh->vq, vh->sg, MAX_BUF_COUNT, token, GFP_ATOMIC); + } + vqidx++; if (vqidx == MAX_BUF_COUNT) { vqidx = 0; -- 2.34.1