[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 14/24] translate-all: Move tcg_handle_interrupt() to
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 14/24] translate-all: Move tcg_handle_interrupt() to -common |
Date: |
Wed, 16 Sep 2015 14:29:45 +0200 |
From: Peter Crosthwaite <address@hidden>
Move this function to common code. It has no arch specific
dependencies. Prepares support for multi-arch where the translate-all
interface needs to be virtualised. One less thing to virtualise.
Reviewed-by: Richard Henderson <address@hidden>
Signed-off-by: Peter Crosthwaite <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
Makefile.target | 1 +
translate-all.c | 30 ------------------------------
translate-common.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 54 insertions(+), 30 deletions(-)
create mode 100644 translate-common.c
diff --git a/Makefile.target b/Makefile.target
index 0d8c504..43b3eb1 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -85,6 +85,7 @@ all: $(PROGS) stap
#########################################################
# cpu emulator library
obj-y = exec.o translate-all.o cpu-exec.o
+obj-y += translate-common.o
obj-y += cpu-exec-common.o
obj-y += tcg/tcg.o tcg/tcg-op.o tcg/optimize.o
obj-$(CONFIG_TCG_INTERPRETER) += tci.o
diff --git a/translate-all.c b/translate-all.c
index 0b8b34b..0140255 100644
--- a/translate-all.c
+++ b/translate-all.c
@@ -1491,36 +1491,6 @@ void tb_check_watchpoint(CPUState *cpu)
}
#ifndef CONFIG_USER_ONLY
-/* mask must never be zero, except for A20 change call */
-static void tcg_handle_interrupt(CPUState *cpu, int mask)
-{
- int old_mask;
-
- old_mask = cpu->interrupt_request;
- cpu->interrupt_request |= mask;
-
- /*
- * If called from iothread context, wake the target cpu in
- * case its halted.
- */
- if (!qemu_cpu_is_self(cpu)) {
- qemu_cpu_kick(cpu);
- return;
- }
-
- if (use_icount) {
- cpu->icount_decr.u16.high = 0xffff;
- if (!cpu->can_do_io
- && (mask & ~old_mask) != 0) {
- cpu_abort(cpu, "Raised interrupt while not in I/O function");
- }
- } else {
- cpu->tcg_exit_req = 1;
- }
-}
-
-CPUInterruptHandler cpu_interrupt_handler = tcg_handle_interrupt;
-
/* in deterministic execution mode, instructions doing device I/Os
must be at the end of the TB */
void cpu_io_recompile(CPUState *cpu, uintptr_t retaddr)
diff --git a/translate-common.c b/translate-common.c
new file mode 100644
index 0000000..681e2bf
--- /dev/null
+++ b/translate-common.c
@@ -0,0 +1,53 @@
+/*
+ * Host code generation common components
+ *
+ * Copyright (c) 2015 Peter Crosthwaite <address@hidden>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "qemu-common.h"
+#include "qom/cpu.h"
+
+#ifndef CONFIG_USER_ONLY
+/* mask must never be zero, except for A20 change call */
+static void tcg_handle_interrupt(CPUState *cpu, int mask)
+{
+ int old_mask;
+
+ old_mask = cpu->interrupt_request;
+ cpu->interrupt_request |= mask;
+
+ /*
+ * If called from iothread context, wake the target cpu in
+ * case its halted.
+ */
+ if (!qemu_cpu_is_self(cpu)) {
+ qemu_cpu_kick(cpu);
+ return;
+ }
+
+ if (use_icount) {
+ cpu->icount_decr.u16.high = 0xffff;
+ if (!cpu->can_do_io
+ && (mask & ~old_mask) != 0) {
+ cpu_abort(cpu, "Raised interrupt while not in I/O function");
+ }
+ } else {
+ cpu->tcg_exit_req = 1;
+ }
+}
+
+CPUInterruptHandler cpu_interrupt_handler = tcg_handle_interrupt;
+#endif
--
2.5.0
- [Qemu-devel] [PULL 06/24] kvm: Add kvm system event crash handler, (continued)
- [Qemu-devel] [PULL 06/24] kvm: Add kvm system event crash handler, Paolo Bonzini, 2015/09/16
- [Qemu-devel] [PULL 03/24] update-linux-headers: copy standard-headers files one by one, Paolo Bonzini, 2015/09/16
- [Qemu-devel] [PULL 04/24] target-i386: move asm-x86/hyperv.h to standard-headers, Paolo Bonzini, 2015/09/16
- [Qemu-devel] [PULL 05/24] cpu: Add crash_occurred flag into CPUState, Paolo Bonzini, 2015/09/16
- [Qemu-devel] [PULL 08/24] hmp-commands-info: move info_cmds content out of monitor.c, Paolo Bonzini, 2015/09/16
- [Qemu-devel] [PULL 07/24] i386/kvm: Hyper-v crash msrs set/get'ers and migration, Paolo Bonzini, 2015/09/16
- [Qemu-devel] [PULL 10/24] hmp-commands.hx: fix end of table info, Paolo Bonzini, 2015/09/16
- [Qemu-devel] [PULL 12/24] qemu-char: Use g_new() & friends where that makes obvious sense, Paolo Bonzini, 2015/09/16
- [Qemu-devel] [PULL 11/24] monitor: added generation of documentation for hmp-commands-info.hx, Paolo Bonzini, 2015/09/16
- [Qemu-devel] [PULL 13/24] cpu-exec: Migrate some generic fns to cpu-exec-common, Paolo Bonzini, 2015/09/16
- [Qemu-devel] [PULL 14/24] translate-all: Move tcg_handle_interrupt() to -common,
Paolo Bonzini <=
- [Qemu-devel] [PULL 16/24] tcg: Move tci_tb_ptr to -common, Paolo Bonzini, 2015/09/16
[Qemu-devel] [PULL 15/24] tcg: split tcg_op_defs to -common, Paolo Bonzini, 2015/09/16
[Qemu-devel] [PULL 09/24] monitor: remove target-specific code from monitor.c, Paolo Bonzini, 2015/09/16
[Qemu-devel] [PULL 18/24] cputlb: move CPU_LOOP() for tlb_reset() to exec.c, Paolo Bonzini, 2015/09/16
[Qemu-devel] [PULL 17/24] translate: move real_host_page setting to -common, Paolo Bonzini, 2015/09/16