Introduce VCPU self-signaling service

Introduce qemu_cpu_kick_self to send SIG_IPI to the calling VCPU
context. First user will be kvm.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
Jan Kiszka 2011-02-01 22:15:59 +01:00 committed by Marcelo Tosatti
parent 6d9cb73c1b
commit 46d62fac8a
2 changed files with 22 additions and 0 deletions

21
cpus.c
View File

@ -529,6 +529,17 @@ void qemu_cpu_kick(void *env)
return;
}
void qemu_cpu_kick_self(void)
{
#ifndef _WIN32
assert(cpu_single_env);
raise(SIG_IPI);
#else
abort();
#endif
}
void qemu_notify_event(void)
{
CPUState *env = cpu_single_env;
@ -831,6 +842,16 @@ void qemu_cpu_kick(void *_env)
}
}
void qemu_cpu_kick_self(void)
{
assert(cpu_single_env);
if (!cpu_single_env->thread_kicked) {
qemu_thread_signal(cpu_single_env->thread, SIG_IPI);
cpu_single_env->thread_kicked = true;
}
}
int qemu_cpu_self(void *_env)
{
CPUState *env = _env;

View File

@ -288,6 +288,7 @@ void qemu_notify_event(void);
/* Unblock cpu */
void qemu_cpu_kick(void *env);
void qemu_cpu_kick_self(void);
int qemu_cpu_self(void *env);
/* work queue */