[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 13/14] link the main loop and its dependencies i
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [RFC PATCH 13/14] link the main loop and its dependencies into the tools |
Date: |
Fri, 16 Sep 2011 17:09:09 +0200 |
This completes the refactoring and lets the tools use the main loop
code from QEMU. This enables tools to operate fully asynchronously.
Advantages include better Windows portability (for some definition of
portability) over glib's.
Signed-off-by: Paolo Bonzini <address@hidden>
---
Makefile | 4 +++-
os-posix.c | 42 ------------------------------------------
os-win32.c | 5 -----
oslib-posix.c | 42 ++++++++++++++++++++++++++++++++++++++++++
oslib-win32.c | 5 +++++
qemu-tool.c | 45 ++++++++++++++++++++++++++-------------------
6 files changed, 76 insertions(+), 67 deletions(-)
diff --git a/Makefile b/Makefile
index f00afc2..6644259 100644
--- a/Makefile
+++ b/Makefile
@@ -143,7 +143,9 @@ qemu-img.o: qemu-img-cmds.h
qemu-img.o qemu-tool.o qemu-nbd.o qemu-io.o cmd.o qemu-ga.o:
$(GENERATED_HEADERS)
tools-obj-y = qemu-tool.o qemu-error.o $(oslib-obj-y) $(trace-obj-y) \
- $(block-obj-y) $(qobject-obj-y) $(version-obj-y) qemu-timer-common.o
+ $(block-obj-y) $(qobject-obj-y) $(version-obj-y) qemu-timer-common.o \
+ qemu-timer.o main-loop.o notify.o iohandler.o
+tools-obj-$(CONFIG_POSIX) += compatfd.o
qemu-img$(EXESUF): qemu-img.o $(tools-obj-y)
qemu-nbd$(EXESUF): qemu-nbd.o $(tools-obj-y)
diff --git a/os-posix.c b/os-posix.c
index dbf3b24..c0188b3 100644
--- a/os-posix.c
+++ b/os-posix.c
@@ -42,11 +42,6 @@
#ifdef CONFIG_LINUX
#include <sys/prctl.h>
-#include <sys/syscall.h>
-#endif
-
-#ifdef CONFIG_EVENTFD
-#include <sys/eventfd.h>
#endif
static struct passwd *user_pwd;
@@ -333,34 +328,6 @@ void os_set_line_buffering(void)
setvbuf(stdout, NULL, _IOLBF, 0);
}
-/*
- * Creates an eventfd that looks like a pipe and has EFD_CLOEXEC set.
- */
-int qemu_eventfd(int fds[2])
-{
-#ifdef CONFIG_EVENTFD
- int ret;
-
- ret = eventfd(0, 0);
- if (ret >= 0) {
- fds[0] = ret;
- qemu_set_cloexec(ret);
- if ((fds[1] = dup(ret)) == -1) {
- close(ret);
- return -1;
- }
- qemu_set_cloexec(fds[1]);
- return 0;
- }
-
- if (errno != ENOSYS) {
- return -1;
- }
-#endif
-
- return qemu_pipe(fds);
-}
-
int qemu_create_pidfile(const char *filename)
{
char buffer[128];
@@ -381,12 +348,3 @@ int qemu_create_pidfile(const char *filename)
return 0;
}
-
-int qemu_get_thread_id(void)
-{
-#if defined (__linux__)
- return syscall(SYS_gettid);
-#else
- return getpid();
-#endif
-}
diff --git a/os-win32.c b/os-win32.c
index 7909401..30a96ef 100644
--- a/os-win32.c
+++ b/os-win32.c
@@ -143,8 +143,3 @@ int qemu_create_pidfile(const char *filename)
}
return 0;
}
-
-int qemu_get_thread_id(void)
-{
- return GetCurrentThreadId();
-}
diff --git a/oslib-posix.c b/oslib-posix.c
index a304fb0..34b8107 100644
--- a/oslib-posix.c
+++ b/oslib-posix.c
@@ -47,7 +47,21 @@ extern int daemon(int, int);
#include "trace.h"
#include "qemu_socket.h"
+#ifdef CONFIG_LINUX
+#include <sys/syscall.h>
+#endif
+#ifdef CONFIG_EVENTFD
+#include <sys/eventfd.h>
+#endif
+int qemu_get_thread_id(void)
+{
+#if defined(__linux__)
+ return syscall(SYS_gettid);
+#else
+ return getpid();
+#endif
+}
int qemu_daemon(int nochdir, int noclose)
{
@@ -139,6 +153,34 @@ int qemu_pipe(int pipefd[2])
return ret;
}
+/*
+ * Creates an eventfd that looks like a pipe and has EFD_CLOEXEC set.
+ */
+int qemu_eventfd(int fds[2])
+{
+#ifdef CONFIG_EVENTFD
+ int ret;
+
+ ret = eventfd(0, 0);
+ if (ret >= 0) {
+ fds[0] = ret;
+ fds[1] = dup(ret);
+ if (fds[1] == -1) {
+ close(ret);
+ return -1;
+ }
+ qemu_set_cloexec(ret);
+ qemu_set_cloexec(fds[1]);
+ return 0;
+ }
+ if (errno != ENOSYS) {
+ return -1;
+ }
+#endif
+
+ return qemu_pipe(fds);
+}
+
int qemu_utimensat(int dirfd, const char *path, const struct timespec *times,
int flags)
{
diff --git a/oslib-win32.c b/oslib-win32.c
index 5f0759f..4b5b403 100644
--- a/oslib-win32.c
+++ b/oslib-win32.c
@@ -112,3 +112,8 @@ int qemu_gettimeofday(qemu_timeval *tp)
Do not set errno on error. */
return 0;
}
+
+int qemu_get_thread_id(void)
+{
+ return GetCurrentThreadId();
+}
diff --git a/qemu-tool.c b/qemu-tool.c
index eb89fe0..5a54e10 100644
--- a/qemu-tool.c
+++ b/qemu-tool.c
@@ -15,12 +15,12 @@
#include "monitor.h"
#include "qemu-timer.h"
#include "qemu-log.h"
+#include "main-loop.h"
+#include "qemu_socket.h"
+#include "slirp/libslirp.h"
#include <sys/time.h>
-QEMUClock *rt_clock;
-QEMUClock *vm_clock;
-
FILE *logfile;
struct QEMUBH
@@ -60,39 +60,46 @@ void monitor_protocol_event(MonitorEvent event, QObject
*data)
{
}
-int qemu_set_fd_handler2(int fd,
- IOCanReadHandler *fd_read_poll,
- IOHandler *fd_read,
- IOHandler *fd_write,
- void *opaque)
+int64 cpu_get_clock(void)
{
- return 0;
+ abort();
}
-void qemu_notify_event(void)
+int64 cpu_get_icount(void)
{
+ abort();
}
-QEMUTimer *qemu_new_timer(QEMUClock *clock, int scale,
- QEMUTimerCB *cb, void *opaque)
+void qemu_mutex_lock_iothread(void)
{
- return g_malloc(1);
}
-void qemu_free_timer(QEMUTimer *ts)
+void qemu_mutex_unlock_iothread(void)
{
- g_free(ts);
}
-void qemu_del_timer(QEMUTimer *ts)
+int use_icount;
+
+void qemu_clock_warp(QEMUClock *clock)
{
}
-void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
+VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
+ void *opaque)
{
+ return NULL;
}
-int64_t qemu_get_clock_ns(QEMUClock *clock)
+void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
+{
+}
+
+void slirp_select_fill(int *pnfds, fd_set *readfds,
+ fd_set *writefds, fd_set *xfds)
+{
+}
+
+void slirp_select_poll(fd_set *readfds, fd_set *writefds,
+ fd_set *xfds, int select_error)
{
- return 0;
}
--
1.7.6
- [Qemu-devel] [RFC PATCH 05/14] qemu-timer: move icount to cpus.c, (continued)
- [Qemu-devel] [RFC PATCH 05/14] qemu-timer: move icount to cpus.c, Paolo Bonzini, 2011/09/16
- [Qemu-devel] [RFC PATCH 06/14] qemu-timer: do not refer to vm_running, Paolo Bonzini, 2011/09/16
- [Qemu-devel] [RFC PATCH 08/14] create main-loop.h, Paolo Bonzini, 2011/09/16
- [Qemu-devel] [RFC PATCH 10/14] Revert to a hand-made select loop, Paolo Bonzini, 2011/09/16
- [Qemu-devel] [RFC PATCH 07/14] qemu-timer: move more stuff out of qemu-timer.c, Paolo Bonzini, 2011/09/16
- [Qemu-devel] [RFC PATCH 12/14] makefile: extract tools-obj-y, Paolo Bonzini, 2011/09/16
- [Qemu-devel] [RFC PATCH 11/14] simplify main loop functions, Paolo Bonzini, 2011/09/16
- [Qemu-devel] [RFC PATCH 03/14] qemu-timer: move common code to qemu_rearm_alarm_timer, Paolo Bonzini, 2011/09/16
- [Qemu-devel] [RFC PATCH 09/14] create main-loop.c, Paolo Bonzini, 2011/09/16
- [Qemu-devel] [RFC PATCH 14/14] qemu-nbd: use common main loop, Paolo Bonzini, 2011/09/16
- [Qemu-devel] [RFC PATCH 13/14] link the main loop and its dependencies into the tools,
Paolo Bonzini <=