[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 11/22] kvm: Refactor qemu_kvm_eat_signals
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] [PATCH 11/22] kvm: Refactor qemu_kvm_eat_signals |
Date: |
Thu, 27 Jan 2011 14:09:55 +0100 |
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 <address@hidden>
Reviewed-by: Paolo Bonzini <address@hidden>
---
cpus.c | 23 +++++++----------------
1 files changed, 7 insertions(+), 16 deletions(-)
diff --git a/cpus.c b/cpus.c
index 03c89b4..9071848 100644
--- a/cpus.c
+++ b/cpus.c
@@ -631,31 +631,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);
}
@@ -671,7 +662,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));
@@ -682,7 +673,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);
}
--
1.7.1
[Qemu-devel] [PATCH 04/22] Leave inner main_loop faster on pending requests, Jan Kiszka, 2011/01/27
[Qemu-devel] [PATCH 11/22] kvm: Refactor qemu_kvm_eat_signals,
Jan Kiszka <=
[Qemu-devel] [PATCH 19/22] kvm: Remove static return code of kvm_handle_io, Jan Kiszka, 2011/01/27
[Qemu-devel] [PATCH 05/22] kvm: Report proper error on GET_VCPU_MMAP_SIZE failures, Jan Kiszka, 2011/01/27
[Qemu-devel] [PATCH 06/22] kvm: Drop redundant kvm_enabled from kvm_cpu_thread_fn, Jan Kiszka, 2011/01/27
[Qemu-devel] [PATCH 13/22] Set up signalfd under !CONFIG_IOTHREAD, Jan Kiszka, 2011/01/27
[Qemu-devel] [PATCH 16/22] Introduce VCPU self-signaling service, Jan Kiszka, 2011/01/27
[Qemu-devel] [PATCH 02/22] Stop current VCPU on synchronous reset requests, Jan Kiszka, 2011/01/27
[Qemu-devel] [PATCH 08/22] kvm: Provide sigbus services arch-independently, Jan Kiszka, 2011/01/27