From: Sasha Levin <levinsasha928@gmail.com>
To: penberg@kernel.org
Cc: john@jfloren.net, kvm@vger.kernel.org, mingo@elte.hu,
asias.hejun@gmail.com, gorcunov@gmail.com,
prasadjoshi124@gmail.com, Sasha Levin <levinsasha928@gmail.com>
Subject: [PATCH 2/6] kvm tools: Exit VCPU thread only when SIGKVMEXIT is received
Date: Thu, 26 May 2011 17:25:46 +0300 [thread overview]
Message-ID: <1306419950-19064-2-git-send-email-levinsasha928@gmail.com> (raw)
In-Reply-To: <1306419950-19064-1-git-send-email-levinsasha928@gmail.com>
Currently the VCPU loop would exit when the thread received any signal.
Change behaviour to exit only when SIGKVMEXIT is received. This change
prevents from the guest to terminate when unrelated signals are processed
by the thread (for example, when attaching a debugger).
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
---
tools/kvm/include/kvm/kvm-cpu.h | 2 ++
tools/kvm/kvm-cpu.c | 15 ++++++++++-----
tools/kvm/kvm-run.c | 2 +-
3 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/tools/kvm/include/kvm/kvm-cpu.h b/tools/kvm/include/kvm/kvm-cpu.h
index f241e86..b2b6fce 100644
--- a/tools/kvm/include/kvm/kvm-cpu.h
+++ b/tools/kvm/include/kvm/kvm-cpu.h
@@ -21,6 +21,8 @@ struct kvm_cpu {
struct kvm_fpu fpu;
struct kvm_msrs *msrs; /* dynamically allocated */
+
+ u8 is_running;
};
struct kvm_cpu *kvm_cpu__init(struct kvm *kvm, unsigned long cpu_id);
diff --git a/tools/kvm/kvm-cpu.c b/tools/kvm/kvm-cpu.c
index 331e025..de0591f 100644
--- a/tools/kvm/kvm-cpu.c
+++ b/tools/kvm/kvm-cpu.c
@@ -14,6 +14,8 @@
#include <errno.h>
#include <stdio.h>
+extern __thread struct kvm_cpu *current_kvm_cpu;
+
static inline bool is_in_protected_mode(struct kvm_cpu *vcpu)
{
return vcpu->sregs.cr0 & 0x01;
@@ -87,6 +89,8 @@ struct kvm_cpu *kvm_cpu__init(struct kvm *kvm, unsigned long cpu_id)
if (vcpu->kvm_run == MAP_FAILED)
die("unable to mmap vcpu fd");
+ vcpu->is_running = true;
+
return vcpu;
}
@@ -381,7 +385,10 @@ void kvm_cpu__run(struct kvm_cpu *vcpu)
static void kvm_cpu_exit_handler(int signum)
{
- /* Don't do anything here */
+ if (current_kvm_cpu->is_running) {
+ current_kvm_cpu->is_running = false;
+ pthread_kill(pthread_self(), SIGKVMEXIT);
+ }
}
int kvm_cpu__start(struct kvm_cpu *cpu)
@@ -437,10 +444,8 @@ int kvm_cpu__start(struct kvm_cpu *cpu)
break;
}
case KVM_EXIT_INTR:
- /*
- * Currently we only handle exit signal, which means
- * we just exit if KVM_RUN exited due to a signal.
- */
+ if (cpu->is_running)
+ break;
goto exit_kvm;
case KVM_EXIT_SHUTDOWN:
goto exit_kvm;
diff --git a/tools/kvm/kvm-run.c b/tools/kvm/kvm-run.c
index adbb25b..d757761 100644
--- a/tools/kvm/kvm-run.c
+++ b/tools/kvm/kvm-run.c
@@ -48,7 +48,7 @@
static struct kvm *kvm;
static struct kvm_cpu *kvm_cpus[KVM_NR_CPUS];
-static __thread struct kvm_cpu *current_kvm_cpu;
+__thread struct kvm_cpu *current_kvm_cpu;
static u64 ram_size;
static u8 image_count;
--
1.7.5.rc3
next prev parent reply other threads:[~2011-05-26 14:26 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-26 14:25 [PATCH 1/6] kvm tools: Prevent double assignment of guest memory info Sasha Levin
2011-05-26 14:25 ` Sasha Levin [this message]
2011-05-26 14:25 ` [PATCH 3/6] kvm tools: Protect IRQ allocations by a mutex Sasha Levin
2011-05-26 14:25 ` [PATCH 4/6] kvm tools: Add rwlock wrapper Sasha Levin
2011-05-26 16:02 ` Pekka Enberg
2011-05-26 16:19 ` Sasha Levin
2011-05-26 18:05 ` Ingo Molnar
2011-05-26 18:11 ` Avi Kivity
2011-05-26 18:21 ` Pekka Enberg
2011-05-26 18:57 ` Sasha Levin
2011-05-26 23:09 ` Mathieu Desnoyers
2011-05-27 10:19 ` Sasha Levin
2011-05-27 10:36 ` Ingo Molnar
2011-05-27 15:52 ` Sasha Levin
2011-05-27 17:10 ` Ingo Molnar
2011-05-27 20:19 ` Sasha Levin
2011-05-28 15:24 ` Ingo Molnar
2011-05-28 16:44 ` Paul E. McKenney
2011-05-28 19:45 ` Sasha Levin
2011-05-29 6:47 ` Avi Kivity
2011-05-29 7:19 ` Ingo Molnar
2011-05-29 15:31 ` Paul E. McKenney
2011-05-29 15:51 ` Paul E. McKenney
2011-05-29 19:54 ` Ingo Molnar
2011-05-30 3:12 ` Paul E. McKenney
2011-05-29 16:22 ` Sasha Levin
2011-05-27 13:14 ` Mathieu Desnoyers
2011-05-29 17:01 ` RCU red-black tree (was: Re: [PATCH 4/6] kvm tools: Add rwlock wrapper) Mathieu Desnoyers
2011-05-29 17:48 ` Sasha Levin
2011-05-30 2:54 ` Mathieu Desnoyers
2011-05-30 6:07 ` Sasha Levin
2011-05-30 11:30 ` Mathieu Desnoyers
2011-05-30 17:38 ` Mathieu Desnoyers
2011-05-30 17:50 ` Mathieu Desnoyers
2011-05-30 17:52 ` Sasha Levin
2011-05-30 18:57 ` Mathieu Desnoyers
2011-05-30 19:11 ` Sasha Levin
2011-05-31 13:05 ` Sasha Levin
2011-05-31 13:09 ` Ingo Molnar
2011-05-31 13:20 ` Sasha Levin
2011-05-31 15:25 ` Ingo Molnar
2011-05-31 19:09 ` Prasad Joshi
2011-05-31 19:31 ` Ingo Molnar
2011-06-02 14:55 ` Mathieu Desnoyers
2011-05-30 3:38 ` Paul E. McKenney
2011-05-30 11:18 ` Mathieu Desnoyers
2011-05-26 20:25 ` [PATCH 4/6] kvm tools: Add rwlock wrapper Ingo Molnar
2011-05-26 23:05 ` Mathieu Desnoyers
2011-05-27 0:58 ` Paul E. McKenney
2011-05-27 9:12 ` Ingo Molnar
2011-05-27 12:48 ` Mathieu Desnoyers
2011-05-27 13:19 ` Ingo Molnar
2011-05-27 13:29 ` Mathieu Desnoyers
2011-05-27 13:36 ` Ingo Molnar
2011-05-27 17:22 ` Paul E. McKenney
2011-05-27 10:25 ` Ingo Molnar
2011-05-27 11:07 ` Ingo Molnar
2011-05-27 11:10 ` Ingo Molnar
2011-05-27 11:24 ` Ingo Molnar
2011-05-27 14:18 ` Mathieu Desnoyers
2011-05-27 14:11 ` Mathieu Desnoyers
2011-05-28 18:12 ` Avi Kivity
2011-05-28 18:32 ` Ingo Molnar
2011-05-29 6:41 ` Avi Kivity
2011-05-29 7:35 ` Ingo Molnar
2011-05-29 7:54 ` Avi Kivity
2011-05-29 12:37 ` Ingo Molnar
2011-05-29 12:48 ` Avi Kivity
2011-05-29 14:27 ` Ingo Molnar
2011-05-29 15:00 ` Avi Kivity
2011-05-29 15:38 ` Paul E. McKenney
2011-05-29 19:33 ` Ingo Molnar
2011-05-30 3:07 ` Paul E. McKenney
2011-05-30 8:12 ` Ingo Molnar
2011-05-27 13:22 ` Mathieu Desnoyers
2011-05-27 13:31 ` Ingo Molnar
2011-05-28 18:14 ` Avi Kivity
2011-05-27 13:07 ` Ingo Molnar
2011-05-26 14:25 ` [PATCH 5/6] kvm tools: Protect MMIO tree by rwsem Sasha Levin
2011-05-26 14:25 ` [PATCH 6/6] kvm tools: Protect IOPORT " Sasha Levin
2011-05-26 16:01 ` Pekka Enberg
2011-05-26 16:19 ` Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1306419950-19064-2-git-send-email-levinsasha928@gmail.com \
--to=levinsasha928@gmail.com \
--cc=asias.hejun@gmail.com \
--cc=gorcunov@gmail.com \
--cc=john@jfloren.net \
--cc=kvm@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=penberg@kernel.org \
--cc=prasadjoshi124@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox