From 47b3842791088069a6f9ecd94a3b71a51bd91d5b Mon Sep 17 00:00:00 2001 From: Jan Kiszka Date: Tue, 1 Feb 2011 22:15:54 +0100 Subject: [PATCH] kvm: Refactor qemu_kvm_eat_signals We do not use the timeout, so drop its logic. As we always poll our signals, we do not need to drop the global lock. Removing those calls allows some further simplifications. Also fix the error processing of sigpending at this chance. Signed-off-by: Jan Kiszka Reviewed-by: Paolo Bonzini Signed-off-by: Marcelo Tosatti --- cpus.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/cpus.c b/cpus.c index f27dfbd..d9c9111 100644 --- a/cpus.c +++ b/cpus.c @@ -644,31 +644,22 @@ static void sigbus_handler(int n, struct qemu_signalfd_siginfo *siginfo, } } -static void qemu_kvm_eat_signal(CPUState *env, int timeout) +static void qemu_kvm_eat_signals(CPUState *env) { - struct timespec ts; - int r, e; + struct timespec ts = { 0, 0 }; siginfo_t siginfo; sigset_t waitset; sigset_t chkset; - - ts.tv_sec = timeout / 1000; - ts.tv_nsec = (timeout % 1000) * 1000000; + int r; sigemptyset(&waitset); sigaddset(&waitset, SIG_IPI); sigaddset(&waitset, SIGBUS); do { - qemu_mutex_unlock(&qemu_global_mutex); - r = sigtimedwait(&waitset, &siginfo, &ts); - e = errno; - - qemu_mutex_lock(&qemu_global_mutex); - - if (r == -1 && !(e == EAGAIN || e == EINTR)) { - fprintf(stderr, "sigtimedwait: %s\n", strerror(e)); + if (r == -1 && !(errno == EAGAIN || errno == EINTR)) { + perror("sigtimedwait"); exit(1); } @@ -684,7 +675,7 @@ static void qemu_kvm_eat_signal(CPUState *env, int timeout) r = sigpending(&chkset); if (r == -1) { - fprintf(stderr, "sigpending: %s\n", strerror(e)); + perror("sigpending"); exit(1); } } while (sigismember(&chkset, SIG_IPI) || sigismember(&chkset, SIGBUS)); @@ -695,7 +686,7 @@ static void qemu_kvm_wait_io_event(CPUState *env) while (!cpu_has_work(env)) qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000); - qemu_kvm_eat_signal(env, 0); + qemu_kvm_eat_signals(env); qemu_wait_io_event_common(env); } -- 2.7.4