cpu: hook plugin vcpu events
Signed-off-by: Emilio G. Cota <cota@braap.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
This commit is contained in:
parent
c36f7a642c
commit
30865f3168
10
cpus.c
10
cpus.c
@ -45,6 +45,7 @@
|
|||||||
#include "exec/exec-all.h"
|
#include "exec/exec-all.h"
|
||||||
|
|
||||||
#include "qemu/thread.h"
|
#include "qemu/thread.h"
|
||||||
|
#include "qemu/plugin.h"
|
||||||
#include "sysemu/cpus.h"
|
#include "sysemu/cpus.h"
|
||||||
#include "sysemu/qtest.h"
|
#include "sysemu/qtest.h"
|
||||||
#include "qemu/main-loop.h"
|
#include "qemu/main-loop.h"
|
||||||
@ -1264,9 +1265,18 @@ static void qemu_tcg_rr_wait_io_event(void)
|
|||||||
|
|
||||||
static void qemu_wait_io_event(CPUState *cpu)
|
static void qemu_wait_io_event(CPUState *cpu)
|
||||||
{
|
{
|
||||||
|
bool slept = false;
|
||||||
|
|
||||||
while (cpu_thread_is_idle(cpu)) {
|
while (cpu_thread_is_idle(cpu)) {
|
||||||
|
if (!slept) {
|
||||||
|
slept = true;
|
||||||
|
qemu_plugin_vcpu_idle_cb(cpu);
|
||||||
|
}
|
||||||
qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
|
qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
|
||||||
}
|
}
|
||||||
|
if (slept) {
|
||||||
|
qemu_plugin_vcpu_resume_cb(cpu);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
/* Eat dummy APC queued by qemu_cpu_kick_thread. */
|
/* Eat dummy APC queued by qemu_cpu_kick_thread. */
|
||||||
|
2
exec.c
2
exec.c
@ -975,6 +975,8 @@ void cpu_exec_realizefn(CPUState *cpu, Error **errp)
|
|||||||
}
|
}
|
||||||
tlb_init(cpu);
|
tlb_init(cpu);
|
||||||
|
|
||||||
|
qemu_plugin_vcpu_init_hook(cpu);
|
||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
|
if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
|
||||||
vmstate_register(NULL, cpu->cpu_index, &vmstate_cpu_common, cpu);
|
vmstate_register(NULL, cpu->cpu_index, &vmstate_cpu_common, cpu);
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include "hw/boards.h"
|
#include "hw/boards.h"
|
||||||
#include "hw/qdev-properties.h"
|
#include "hw/qdev-properties.h"
|
||||||
#include "trace-root.h"
|
#include "trace-root.h"
|
||||||
|
#include "qemu/plugin.h"
|
||||||
|
|
||||||
CPUInterruptHandler cpu_interrupt_handler;
|
CPUInterruptHandler cpu_interrupt_handler;
|
||||||
|
|
||||||
@ -352,6 +353,7 @@ static void cpu_common_unrealizefn(DeviceState *dev, Error **errp)
|
|||||||
CPUState *cpu = CPU(dev);
|
CPUState *cpu = CPU(dev);
|
||||||
/* NOTE: latest generic point before the cpu is fully unrealized */
|
/* NOTE: latest generic point before the cpu is fully unrealized */
|
||||||
trace_fini_vcpu(cpu);
|
trace_fini_vcpu(cpu);
|
||||||
|
qemu_plugin_vcpu_exit_hook(cpu);
|
||||||
cpu_exec_unrealizefn(cpu);
|
cpu_exec_unrealizefn(cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user