[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 29/32] sysret/sysexit arch specific accelerator
From: |
Glauber Costa |
Subject: |
[Qemu-devel] [PATCH 29/32] sysret/sysexit arch specific accelerator |
Date: |
Thu, 23 Oct 2008 12:19:13 -0200 |
let arch-specific accelerator hook into the end of syscall
return functions sysret and sysexit.
Signed-off-by: Glauber Costa <address@hidden>
---
kqemu.c | 11 +++++++++++
target-i386/accel86.h | 8 ++++++++
target-i386/op_helper.c | 15 +--------------
3 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/kqemu.c b/kqemu.c
index 0bea20e..1934aa5 100644
--- a/kqemu.c
+++ b/kqemu.c
@@ -1195,10 +1195,21 @@ static void kqemu_interrupt_return(CPUState *env)
}
}
+static void kqemu_syscall_return(CPUState *env)
+{
+ if (kqemu_kernel_flags_ok(env)) {
+ if (env->hflags & HF_LMA_MASK)
+ CC_OP = CC_OP_EFLAGS;
+ env->exception_index = -1;
+ cpu_loop_exit();
+ }
+}
+
QEMUAccel86 kqemu_accel86 = {
.get_msr = kqemu_get_msr,
.set_msr = kqemu_set_msr,
.interrupt_return = kqemu_interrupt_return,
+ .syscall_return = kqemu_syscall_return,
};
QEMUAccel kqemu_accel = {
diff --git a/target-i386/accel86.h b/target-i386/accel86.h
index c3201f5..1624a64 100644
--- a/target-i386/accel86.h
+++ b/target-i386/accel86.h
@@ -7,6 +7,7 @@ typedef struct QEMUAccel86 {
int (*get_msr)(int msr, uint64_t *value);
int (*set_msr)(int msr, uint64_t value);
void (*interrupt_return)(CPUState *env);
+ void (*syscall_return)(CPUState *env);
} QEMUAccel86;
#define accel86_call_func ((QEMUAccel86 *)(current_accel->arch))
@@ -32,5 +33,12 @@ static inline void accel_interrupt_return(CPUState *env)
accel86_call_func->interrupt_return(env);
}
+static inline void accel_syscall_return(CPUState *env)
+{
+ if (!current_accel->arch)
+ return;
+ accel86_call_func->syscall_return(env);
+}
+
#endif
diff --git a/target-i386/op_helper.c b/target-i386/op_helper.c
index 61ba6fc..a831a4d 100644
--- a/target-i386/op_helper.c
+++ b/target-i386/op_helper.c
@@ -1104,14 +1104,7 @@ void helper_sysret(int dflag)
env->eflags |= IF_MASK;
cpu_x86_set_cpl(env, 3);
}
-#ifdef USE_KQEMU
- if (kqemu_is_ok(env)) {
- if (env->hflags & HF_LMA_MASK)
- CC_OP = CC_OP_EFLAGS;
- env->exception_index = -1;
- cpu_loop_exit();
- }
-#endif
+ accel_syscall_return(env);
}
/* real mode interrupt */
@@ -3003,12 +2996,6 @@ void helper_sysexit(int dflag)
}
ESP = ECX;
EIP = EDX;
-#ifdef USE_KQEMU
- if (kqemu_is_ok(env)) {
- env->exception_index = -1;
- cpu_loop_exit();
- }
-#endif
}
#if defined(CONFIG_USER_ONLY)
--
1.5.5.1
- Re: [Qemu-devel] [PATCH 20/32] accel_trace_io, (continued)
- [Qemu-devel] [PATCH 31/32] remove kqemu_is_ok tests., Glauber Costa, 2008/10/23
- [Qemu-devel] [PATCH 30/32] lcall/lret arch specific accel hooks, Glauber Costa, 2008/10/23
- [Qemu-devel] [PATCH 25/32] provide accel hook for cpu_exec, Glauber Costa, 2008/10/23
- [Qemu-devel] [PATCH 32/32] clean up kqemu code, Glauber Costa, 2008/10/23
- [Qemu-devel] [PATCH 29/32] sysret/sysexit arch specific accelerator,
Glauber Costa <=
- [Qemu-devel] [PATCH 28/32] iret arch specific accelerator, Glauber Costa, 2008/10/23
- [Qemu-devel] [PATCH 19/32] add hook to cpu_register_physical_memory, Glauber Costa, 2008/10/23
- [Qemu-devel] Re: [PATCH 0/32] New shot at accelerators, Jan Kiszka, 2008/10/23
- [Qemu-devel] Re: [PATCH 0/32] New shot at accelerators, Anthony Liguori, 2008/10/23