1. Some qemu function prototype modification.
graphic_console_init()
qemu_thread_create()
2. A "work_queue.c" is moved to "vigs".
Change-Id: I066734b08bb8ad59aeb5afb67049065048bcdd63
Signed-off-by: SeokYeon Hwang <syeon.hwang@samsung.com>
devices-dirs-y += core/
common-obj-y += $(devices-dirs-y)
obj-y += $(devices-dirs-y)
-obj-y += work_queue.o
obj-y += vigs_gl_pool.o
obj-y += vigs_gl_backend.o
obj-y += vigs_sw_backend.o
+obj-y += work_queue.o
# GL GLX backend
ifdef CONFIG_LINUX
obj-y += vigs_gl_backend_glx.o
s->fence_ack_bh = qemu_bh_new(vigs_fence_ack_bh, s);
- s->con = graphic_console_init(DEVICE(dev), &vigs_hw_ops, s);
+ s->con = graphic_console_init(DEVICE(dev), 0, &vigs_hw_ops, s);
if (!s->con) {
goto fail;
vigs_vector_init(&gl_backend->v1, 0);
vigs_vector_init(&gl_backend->v2, 0);
- gl_backend->read_pixels_queue = work_queue_create();
+ gl_backend->read_pixels_queue = work_queue_create("vigs_work_queue");
return true;
--- /dev/null
+#include "work_queue.h"
+
+static void *work_queue_run(void *arg)
+{
+ struct work_queue *wq = arg;
+
+ qemu_mutex_lock(&wq->mutex);
+
+ while (true) {
+ struct work_queue_item *wq_item;
+
+ while (wq->num_items == 0) {
+ if (wq->destroying) {
+ goto out;
+ }
+
+ qemu_cond_signal(&wq->wait_cond);
+ qemu_cond_wait(&wq->add_cond, &wq->mutex);
+ }
+
+ wq_item = QTAILQ_FIRST(&wq->items);
+ QTAILQ_REMOVE(&wq->items, wq_item, entry);
+
+ qemu_mutex_unlock(&wq->mutex);
+
+ wq_item->func(wq_item);
+
+ qemu_mutex_lock(&wq->mutex);
+
+ --wq->num_items;
+ }
+
+out:
+ qemu_mutex_unlock(&wq->mutex);
+
+ return NULL;
+}
+
+void work_queue_item_init(struct work_queue_item *wq_item,
+ work_queue_func func)
+{
+ memset(wq_item, 0, sizeof(*wq_item));
+
+ wq_item->func = func;
+}
+
+struct work_queue *work_queue_create(const char *name)
+{
+ struct work_queue *wq;
+
+ wq = g_malloc0(sizeof(*wq));
+
+ qemu_mutex_init(&wq->mutex);
+ qemu_cond_init(&wq->add_cond);
+ qemu_cond_init(&wq->wait_cond);
+
+ QTAILQ_INIT(&wq->items);
+
+ qemu_thread_create(&wq->thread, name,
+ work_queue_run,
+ wq,
+ QEMU_THREAD_JOINABLE);
+
+ return wq;
+}
+
+void work_queue_add_item(struct work_queue *wq,
+ struct work_queue_item *wq_item)
+{
+ qemu_mutex_lock(&wq->mutex);
+
+ QTAILQ_INSERT_TAIL(&wq->items, wq_item, entry);
+ ++wq->num_items;
+
+ qemu_mutex_unlock(&wq->mutex);
+
+ qemu_cond_signal(&wq->add_cond);
+}
+
+void work_queue_wait(struct work_queue *wq)
+{
+ if (wq->num_items == 0) {
+ return;
+ }
+
+ qemu_mutex_lock(&wq->mutex);
+
+ while (wq->num_items > 0) {
+ qemu_cond_wait(&wq->wait_cond, &wq->mutex);
+ }
+
+ qemu_mutex_unlock(&wq->mutex);
+}
+
+void work_queue_destroy(struct work_queue *wq)
+{
+ wq->destroying = true;
+ qemu_cond_signal(&wq->add_cond);
+
+ qemu_thread_join(&wq->thread);
+
+ qemu_cond_destroy(&wq->wait_cond);
+ qemu_cond_destroy(&wq->add_cond);
+ qemu_mutex_destroy(&wq->mutex);
+
+ g_free(wq);
+}
--- /dev/null
+#ifndef _QEMU_WORK_QUEUE_H
+#define _QEMU_WORK_QUEUE_H
+
+#include "qemu-common.h"
+#include "qemu/queue.h"
+#include "qemu/thread.h"
+
+struct work_queue_item;
+
+typedef void (*work_queue_func)(struct work_queue_item */*wq_item*/);
+
+struct work_queue_item
+{
+ QTAILQ_ENTRY(work_queue_item) entry;
+
+ work_queue_func func;
+};
+
+struct work_queue
+{
+ QemuThread thread;
+ QemuMutex mutex;
+ QemuCond add_cond;
+ QemuCond wait_cond;
+
+ QTAILQ_HEAD(, work_queue_item) items;
+
+ int num_items;
+
+ bool destroying;
+};
+
+void work_queue_item_init(struct work_queue_item *wq_item,
+ work_queue_func func);
+
+struct work_queue *work_queue_create(const char *name);
+
+void work_queue_add_item(struct work_queue *wq,
+ struct work_queue_item *wq_item);
+
+void work_queue_wait(struct work_queue *wq);
+
+void work_queue_destroy(struct work_queue *wq);
+
+#endif
+++ /dev/null
-#include "work_queue.h"
-
-static void *work_queue_run(void *arg)
-{
- struct work_queue *wq = arg;
-
- qemu_mutex_lock(&wq->mutex);
-
- while (true) {
- struct work_queue_item *wq_item;
-
- while (wq->num_items == 0) {
- if (wq->destroying) {
- goto out;
- }
-
- qemu_cond_signal(&wq->wait_cond);
- qemu_cond_wait(&wq->add_cond, &wq->mutex);
- }
-
- wq_item = QTAILQ_FIRST(&wq->items);
- QTAILQ_REMOVE(&wq->items, wq_item, entry);
-
- qemu_mutex_unlock(&wq->mutex);
-
- wq_item->func(wq_item);
-
- qemu_mutex_lock(&wq->mutex);
-
- --wq->num_items;
- }
-
-out:
- qemu_mutex_unlock(&wq->mutex);
-
- return NULL;
-}
-
-void work_queue_item_init(struct work_queue_item *wq_item,
- work_queue_func func)
-{
- memset(wq_item, 0, sizeof(*wq_item));
-
- wq_item->func = func;
-}
-
-struct work_queue *work_queue_create(void)
-{
- struct work_queue *wq;
-
- wq = g_malloc0(sizeof(*wq));
-
- qemu_mutex_init(&wq->mutex);
- qemu_cond_init(&wq->add_cond);
- qemu_cond_init(&wq->wait_cond);
-
- QTAILQ_INIT(&wq->items);
-
- qemu_thread_create(&wq->thread,
- work_queue_run,
- wq,
- QEMU_THREAD_JOINABLE);
-
- return wq;
-}
-
-void work_queue_add_item(struct work_queue *wq,
- struct work_queue_item *wq_item)
-{
- qemu_mutex_lock(&wq->mutex);
-
- QTAILQ_INSERT_TAIL(&wq->items, wq_item, entry);
- ++wq->num_items;
-
- qemu_mutex_unlock(&wq->mutex);
-
- qemu_cond_signal(&wq->add_cond);
-}
-
-void work_queue_wait(struct work_queue *wq)
-{
- if (wq->num_items == 0) {
- return;
- }
-
- qemu_mutex_lock(&wq->mutex);
-
- while (wq->num_items > 0) {
- qemu_cond_wait(&wq->wait_cond, &wq->mutex);
- }
-
- qemu_mutex_unlock(&wq->mutex);
-}
-
-void work_queue_destroy(struct work_queue *wq)
-{
- wq->destroying = true;
- qemu_cond_signal(&wq->add_cond);
-
- qemu_thread_join(&wq->thread);
-
- qemu_cond_destroy(&wq->wait_cond);
- qemu_cond_destroy(&wq->add_cond);
- qemu_mutex_destroy(&wq->mutex);
-
- g_free(wq);
-}
+++ /dev/null
-#ifndef _QEMU_WORK_QUEUE_H
-#define _QEMU_WORK_QUEUE_H
-
-#include "qemu-common.h"
-#include "qemu/queue.h"
-#include "qemu/thread.h"
-
-struct work_queue_item;
-
-typedef void (*work_queue_func)(struct work_queue_item */*wq_item*/);
-
-struct work_queue_item
-{
- QTAILQ_ENTRY(work_queue_item) entry;
-
- work_queue_func func;
-};
-
-struct work_queue
-{
- QemuThread thread;
- QemuMutex mutex;
- QemuCond add_cond;
- QemuCond wait_cond;
-
- QTAILQ_HEAD(, work_queue_item) items;
-
- int num_items;
-
- bool destroying;
-};
-
-void work_queue_item_init(struct work_queue_item *wq_item,
- work_queue_func func);
-
-struct work_queue *work_queue_create(void);
-
-void work_queue_add_item(struct work_queue *wq,
- struct work_queue_item *wq_item);
-
-void work_queue_wait(struct work_queue *wq);
-
-void work_queue_destroy(struct work_queue *wq);
-
-#endif
#include "yagl_stats.h"
#include "yagl_transport.h"
#include "yagl_object_map.h"
-#include "work_queue.h"
#include "winsys.h"
#include "sysemu/kvm.h"
#include "sysemu/hax.h"
#include "yagl_types.h"
#include "yagl_event.h"
#include "yagl_tls.h"
-#include "work_queue.h"
+#include "vigs/work_queue.h"
#include "qemu/queue.h"
#include "qemu/thread.h"
#include <X11/Xlib.h>
#endif
#include "vigs/vigs_device.h"
-#include "work_queue.h"
+#include "vigs/work_queue.h"
extern int enable_yagl;
extern const char *yagl_backend;
extern int enable_vigs;