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);
|
||||
}
|
||||
|
||||
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.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ static inline G_NORETURN void target_cpu_loop(CPUARMState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case EXCP_SWI:
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ static inline G_NORETURN void target_cpu_loop(CPUARMState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
switch (trapnr) {
|
||||
case EXCP_UDEF:
|
||||
case EXCP_NOCP:
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ static inline G_NORETURN void target_cpu_loop(CPUX86State *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case 0x80: {
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ static inline G_NORETURN void target_cpu_loop(CPURISCVState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
signo = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ static inline G_NORETURN void target_cpu_loop(CPUX86State *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
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_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 */
|
||||
void cpu_class_init_props(DeviceClass *dc);
|
||||
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 cpu_can_run(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_destroyed(CPUState *cpu);
|
||||
void cpu_handle_guest_debug(CPUState *cpu);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ void cpu_loop(CPUARMState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case EXCP_SWI:
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ void cpu_loop(CPUAlphaState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case EXCP_RESET:
|
||||
|
|
|
|||
|
|
@ -295,7 +295,7 @@ void cpu_loop(CPUARMState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch(trapnr) {
|
||||
case EXCP_UDEF:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ void cpu_loop(CPUHexagonState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case EXCP_INTERRUPT:
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ void cpu_loop(CPUHPPAState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case EXCP_SYSCALL:
|
||||
|
|
|
|||
|
|
@ -214,7 +214,7 @@ void cpu_loop(CPUX86State *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch(trapnr) {
|
||||
case 0x80:
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ void cpu_loop(CPULoongArchState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case EXCP_INTERRUPT:
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ void cpu_loop(CPUM68KState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch(trapnr) {
|
||||
case EXCP_ILLEGAL:
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ void cpu_loop(CPUMBState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case EXCP_INTERRUPT:
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ void cpu_loop(CPUMIPSState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch(trapnr) {
|
||||
case EXCP_SYSCALL:
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ void cpu_loop(CPUOpenRISCState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case EXCP_SYSCALL:
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ void cpu_loop(CPUPPCState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
arch_interrupt = true;
|
||||
switch (trapnr) {
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ void cpu_loop(CPURISCVState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case EXCP_INTERRUPT:
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ void cpu_loop(CPUS390XState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case EXCP_INTERRUPT:
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ void cpu_loop(CPUSH4State *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case 0x160:
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ void cpu_loop (CPUSPARCState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case TARGET_TT_SYSCALL:
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ void cpu_loop(CPUXtensaState *env)
|
|||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
process_queued_cpu_work(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
env->sregs[PS] &= ~PS_EXCM;
|
||||
switch (trapnr) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue