bsd-user, linux-user: introduce qemu_process_cpu_events
Add a user-mode emulation version of the function. More will be added later, for now it is just process_queued_cpu_work. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
871de7078f
commit
758e5de501
25 changed files with 36 additions and 23 deletions
|
|
@ -52,6 +52,11 @@ void qemu_cpu_kick(CPUState *cpu)
|
||||||
tcg_kick_vcpu_thread(cpu);
|
tcg_kick_vcpu_thread(cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void qemu_process_cpu_events(CPUState *cpu)
|
||||||
|
{
|
||||||
|
process_queued_cpu_work(cpu);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Adjust the pc to pass to cpu_restore_state; return the memop type.
|
* Adjust the pc to pass to cpu_restore_state; return the memop type.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ static inline G_NORETURN void target_cpu_loop(CPUARMState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case EXCP_SWI:
|
case EXCP_SWI:
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ static inline G_NORETURN void target_cpu_loop(CPUARMState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case EXCP_UDEF:
|
case EXCP_UDEF:
|
||||||
case EXCP_NOCP:
|
case EXCP_NOCP:
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@ static inline G_NORETURN void target_cpu_loop(CPUX86State *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case 0x80: {
|
case 0x80: {
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ static inline G_NORETURN void target_cpu_loop(CPURISCVState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
signo = 0;
|
signo = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@ static inline G_NORETURN void target_cpu_loop(CPUX86State *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case EXCP_SYSCALL:
|
case EXCP_SYSCALL:
|
||||||
|
|
|
||||||
|
|
@ -1145,6 +1145,15 @@ AddressSpace *cpu_get_address_space(CPUState *cpu, int asidx);
|
||||||
G_NORETURN void cpu_abort(CPUState *cpu, const char *fmt, ...)
|
G_NORETURN void cpu_abort(CPUState *cpu, const char *fmt, ...)
|
||||||
G_GNUC_PRINTF(2, 3);
|
G_GNUC_PRINTF(2, 3);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qemu_process_cpu_events:
|
||||||
|
* @cpu: CPU that left the execution loop
|
||||||
|
*
|
||||||
|
* Perform accelerator-independent work after the CPU has left
|
||||||
|
* the inner execution loop.
|
||||||
|
*/
|
||||||
|
void qemu_process_cpu_events(CPUState *cpu);
|
||||||
|
|
||||||
/* $(top_srcdir)/cpu.c */
|
/* $(top_srcdir)/cpu.c */
|
||||||
void cpu_class_init_props(DeviceClass *dc);
|
void cpu_class_init_props(DeviceClass *dc);
|
||||||
void cpu_exec_class_post_init(CPUClass *cc);
|
void cpu_exec_class_post_init(CPUClass *cc);
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ bool cpu_thread_is_idle(CPUState *cpu);
|
||||||
bool all_cpu_threads_idle(void);
|
bool all_cpu_threads_idle(void);
|
||||||
bool cpu_can_run(CPUState *cpu);
|
bool cpu_can_run(CPUState *cpu);
|
||||||
void qemu_process_cpu_events_common(CPUState *cpu);
|
void qemu_process_cpu_events_common(CPUState *cpu);
|
||||||
void qemu_process_cpu_events(CPUState *cpu);
|
|
||||||
void cpu_thread_signal_created(CPUState *cpu);
|
void cpu_thread_signal_created(CPUState *cpu);
|
||||||
void cpu_thread_signal_destroyed(CPUState *cpu);
|
void cpu_thread_signal_destroyed(CPUState *cpu);
|
||||||
void cpu_handle_guest_debug(CPUState *cpu);
|
void cpu_handle_guest_debug(CPUState *cpu);
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ void cpu_loop(CPUARMState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case EXCP_SWI:
|
case EXCP_SWI:
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ void cpu_loop(CPUAlphaState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case EXCP_RESET:
|
case EXCP_RESET:
|
||||||
|
|
|
||||||
|
|
@ -295,7 +295,7 @@ void cpu_loop(CPUARMState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch(trapnr) {
|
switch(trapnr) {
|
||||||
case EXCP_UDEF:
|
case EXCP_UDEF:
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ void cpu_loop(CPUHexagonState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case EXCP_INTERRUPT:
|
case EXCP_INTERRUPT:
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,7 @@ void cpu_loop(CPUHPPAState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case EXCP_SYSCALL:
|
case EXCP_SYSCALL:
|
||||||
|
|
|
||||||
|
|
@ -214,7 +214,7 @@ void cpu_loop(CPUX86State *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch(trapnr) {
|
switch(trapnr) {
|
||||||
case 0x80:
|
case 0x80:
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ void cpu_loop(CPULoongArchState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case EXCP_INTERRUPT:
|
case EXCP_INTERRUPT:
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ void cpu_loop(CPUM68KState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch(trapnr) {
|
switch(trapnr) {
|
||||||
case EXCP_ILLEGAL:
|
case EXCP_ILLEGAL:
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ void cpu_loop(CPUMBState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case EXCP_INTERRUPT:
|
case EXCP_INTERRUPT:
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ void cpu_loop(CPUMIPSState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch(trapnr) {
|
switch(trapnr) {
|
||||||
case EXCP_SYSCALL:
|
case EXCP_SYSCALL:
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ void cpu_loop(CPUOpenRISCState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case EXCP_SYSCALL:
|
case EXCP_SYSCALL:
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ void cpu_loop(CPUPPCState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
arch_interrupt = true;
|
arch_interrupt = true;
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ void cpu_loop(CPURISCVState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case EXCP_INTERRUPT:
|
case EXCP_INTERRUPT:
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ void cpu_loop(CPUS390XState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case EXCP_INTERRUPT:
|
case EXCP_INTERRUPT:
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ void cpu_loop(CPUSH4State *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case 0x160:
|
case 0x160:
|
||||||
|
|
|
||||||
|
|
@ -220,7 +220,7 @@ void cpu_loop (CPUSPARCState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case TARGET_TT_SYSCALL:
|
case TARGET_TT_SYSCALL:
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,7 @@ void cpu_loop(CPUXtensaState *env)
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
process_queued_cpu_work(cs);
|
qemu_process_cpu_events(cs);
|
||||||
|
|
||||||
env->sregs[PS] &= ~PS_EXCM;
|
env->sregs[PS] &= ~PS_EXCM;
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue