mirror of
https://github.com/xemu-project/xemu.git
synced 2026-07-11 01:24:41 +02:00
accel/mshv: Add vCPU signal handling
Implement signal handling for MSHV vCPUs to support asynchronous interrupts from the main thread. Signed-off-by: Magnus Kulke <magnuskulke@linux.microsoft.com> Link: https://lore.kernel.org/r/20250916164847.77883-12-magnuskulke@linux.microsoft.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
committed by
Paolo Bonzini
parent
4dc5d42572
commit
575df4df54
@@ -524,6 +524,35 @@ static int mshv_cpu_exec(CPUState *cpu)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* The signal handler is triggered when QEMU's main thread receives a SIG_IPI
|
||||
* (SIGUSR1). This signal causes the current CPU thread to be kicked, forcing a
|
||||
* VM exit on the CPU. The VM exit generates an exit reason that breaks the loop
|
||||
* (see mshv_cpu_exec). If the exit is due to a Ctrl+A+x command, the system
|
||||
* will shut down. For other cases, the system will continue running.
|
||||
*/
|
||||
static void sa_ipi_handler(int sig)
|
||||
{
|
||||
/* TODO: call IOCTL to set_immediate_exit, once implemented. */
|
||||
|
||||
qemu_cpu_kick_self();
|
||||
}
|
||||
|
||||
static void init_signal(CPUState *cpu)
|
||||
{
|
||||
/* init cpu signals */
|
||||
struct sigaction sigact;
|
||||
sigset_t set;
|
||||
|
||||
memset(&sigact, 0, sizeof(sigact));
|
||||
sigact.sa_handler = sa_ipi_handler;
|
||||
sigaction(SIG_IPI, &sigact, NULL);
|
||||
|
||||
pthread_sigmask(SIG_BLOCK, NULL, &set);
|
||||
sigdelset(&set, SIG_IPI);
|
||||
pthread_sigmask(SIG_SETMASK, &set, NULL);
|
||||
}
|
||||
|
||||
static void *mshv_vcpu_thread(void *arg)
|
||||
{
|
||||
CPUState *cpu = arg;
|
||||
@@ -540,6 +569,7 @@ static void *mshv_vcpu_thread(void *arg)
|
||||
error_report("Failed to init vcpu %d", cpu->cpu_index);
|
||||
goto cleanup;
|
||||
}
|
||||
init_signal(cpu);
|
||||
|
||||
/* signal CPU creation */
|
||||
cpu_thread_signal_created(cpu);
|
||||
|
||||
Reference in New Issue
Block a user