mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
accel/tcg: Rename user-mode do_interrupt hack as fake_user_interrupt
do_interrupt() is sysemu specific. However due to some X86
specific hack, it is also used in user-mode emulation, which
is why it couldn't be restricted to CONFIG_SOFTMMU (see the
comment around added in commit 7827168471
: "cpu: tcg_ops:
move to tcg-cpu-ops.h, keep a pointer in CPUClass").
Keep the hack but rename the handler as fake_user_interrupt()
and restrict do_interrupt() to sysemu.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Warner Losh <imp@bsdimp.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20210911165434.531552-6-f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
b40db05daa
commit
120964219d
3 changed files with 20 additions and 12 deletions
|
@ -651,8 +651,8 @@ static inline bool cpu_handle_exception(CPUState *cpu, int *ret)
|
|||
loop */
|
||||
#if defined(TARGET_I386)
|
||||
CPUClass *cc = CPU_GET_CLASS(cpu);
|
||||
cc->tcg_ops->do_interrupt(cpu);
|
||||
#endif
|
||||
cc->tcg_ops->fake_user_interrupt(cpu);
|
||||
#endif /* TARGET_I386 */
|
||||
*ret = cpu->exception_index;
|
||||
cpu->exception_index = -1;
|
||||
return true;
|
||||
|
|
|
@ -37,14 +37,6 @@ struct TCGCPUOps {
|
|||
void (*cpu_exec_exit)(CPUState *cpu);
|
||||
/** @cpu_exec_interrupt: Callback for processing interrupts in cpu_exec */
|
||||
bool (*cpu_exec_interrupt)(CPUState *cpu, int interrupt_request);
|
||||
/**
|
||||
* @do_interrupt: Callback for interrupt handling.
|
||||
*
|
||||
* note that this is in general SOFTMMU only, but it actually isn't
|
||||
* because of an x86 hack (accel/tcg/cpu-exec.c), so we cannot put it
|
||||
* in the SOFTMMU section in general.
|
||||
*/
|
||||
void (*do_interrupt)(CPUState *cpu);
|
||||
/**
|
||||
* @tlb_fill: Handle a softmmu tlb miss or user-only address fault
|
||||
*
|
||||
|
@ -61,6 +53,20 @@ struct TCGCPUOps {
|
|||
void (*debug_excp_handler)(CPUState *cpu);
|
||||
|
||||
#ifdef NEED_CPU_H
|
||||
#if defined(CONFIG_USER_ONLY) && defined(TARGET_I386)
|
||||
/**
|
||||
* @fake_user_interrupt: Callback for 'fake exception' handling.
|
||||
*
|
||||
* Simulate 'fake exception' which will be handled outside the
|
||||
* cpu execution loop (hack for x86 user mode).
|
||||
*/
|
||||
void (*fake_user_interrupt)(CPUState *cpu);
|
||||
#else
|
||||
/**
|
||||
* @do_interrupt: Callback for interrupt handling.
|
||||
*/
|
||||
void (*do_interrupt)(CPUState *cpu);
|
||||
#endif /* !CONFIG_USER_ONLY || !TARGET_I386 */
|
||||
#ifdef CONFIG_SOFTMMU
|
||||
/**
|
||||
* @do_transaction_failed: Callback for handling failed memory transactions
|
||||
|
|
|
@ -73,9 +73,11 @@ static const struct TCGCPUOps x86_tcg_ops = {
|
|||
.cpu_exec_enter = x86_cpu_exec_enter,
|
||||
.cpu_exec_exit = x86_cpu_exec_exit,
|
||||
.cpu_exec_interrupt = x86_cpu_exec_interrupt,
|
||||
.do_interrupt = x86_cpu_do_interrupt,
|
||||
.tlb_fill = x86_cpu_tlb_fill,
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
.fake_user_interrupt = x86_cpu_do_interrupt,
|
||||
#else
|
||||
.do_interrupt = x86_cpu_do_interrupt,
|
||||
.debug_excp_handler = breakpoint_handler,
|
||||
.debug_check_breakpoint = x86_debug_check_breakpoint,
|
||||
#endif /* !CONFIG_USER_ONLY */
|
||||
|
|
Loading…
Reference in a new issue