]> git.proxmox.com Git - mirror_qemu.git/commitdiff
accel/tcg: Use one_insn_per_tb global instead of old singlestep global
authorPeter Maydell <peter.maydell@linaro.org>
Mon, 17 Apr 2023 16:40:34 +0000 (17:40 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Tue, 2 May 2023 14:47:40 +0000 (15:47 +0100)
The only place left that looks at the old 'singlestep' global
variable is the TCG curr_cflags() function.  Replace the old global
with a new 'one_insn_per_tb' which is defined in tcg-all.c and
declared in accel/tcg/internal.h.  This keeps it restricted to the
TCG code, unlike 'singlestep' which was available to every file in
the system and defined in multiple different places for softmmu vs
linux-user vs bsd-user.

While we're making this change, use qatomic_read() and qatomic_set()
on the accesses to the new global, because TCG will read it without
holding a lock.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-id: 20230417164041.684562-4-peter.maydell@linaro.org

accel/tcg/cpu-exec.c
accel/tcg/internal.h
accel/tcg/tcg-all.c
bsd-user/main.c
include/exec/cpu-common.h
linux-user/main.c
softmmu/globals.c

index 8370c92c05e2dbf1e7886dcb1e26c8d2b332fbf6..bc0e1c3299a1f4246e6921a909a67e1bbc0c12c5 100644 (file)
@@ -159,7 +159,7 @@ uint32_t curr_cflags(CPUState *cpu)
      */
     if (unlikely(cpu->singlestep_enabled)) {
         cflags |= CF_NO_GOTO_TB | CF_NO_GOTO_PTR | CF_SINGLE_STEP | 1;
-    } else if (singlestep) {
+    } else if (qatomic_read(&one_insn_per_tb)) {
         cflags |= CF_NO_GOTO_TB | 1;
     } else if (qemu_loglevel_mask(CPU_LOG_TB_NOCHAIN)) {
         cflags |= CF_NO_GOTO_TB;
index 96f198b28b4d7f1778ff949c64225550326e5f43..7bb0fdbe1497b09cdb642f13ad5a2baa6c7d878a 100644 (file)
@@ -67,4 +67,6 @@ static inline target_ulong log_pc(CPUState *cpu, const TranslationBlock *tb)
 extern int64_t max_delay;
 extern int64_t max_advance;
 
+extern bool one_insn_per_tb;
+
 #endif /* ACCEL_TCG_INTERNAL_H */
index fcf361c8db6b2634f0b265935c2a0e23825464d7..a831f8d7c372d75ef8c55f9a4afb4ee7f6bef3b8 100644 (file)
@@ -31,6 +31,7 @@
 #include "qapi/error.h"
 #include "qemu/error-report.h"
 #include "qemu/accel.h"
+#include "qemu/atomic.h"
 #include "qapi/qapi-builtin-visit.h"
 #include "qemu/units.h"
 #if !defined(CONFIG_USER_ONLY)
@@ -110,6 +111,7 @@ static void tcg_accel_instance_init(Object *obj)
 }
 
 bool mttcg_enabled;
+bool one_insn_per_tb;
 
 static int tcg_init_machine(MachineState *ms)
 {
@@ -219,8 +221,8 @@ static void tcg_set_one_insn_per_tb(Object *obj, bool value, Error **errp)
 {
     TCGState *s = TCG_STATE(obj);
     s->one_insn_per_tb = value;
-    /* For the moment, set the global also: this changes the behaviour */
-    singlestep = value;
+    /* Set the global also: this changes the behaviour */
+    qatomic_set(&one_insn_per_tb, value);
 }
 
 static int tcg_gdbstub_supported_sstep_flags(void)
index 09b84da190cb93e2289c18069c4a22fe5b6bc649..a9e5a127d382e52bc7f390a71cc8aa4057b7ab15 100644 (file)
@@ -49,7 +49,6 @@
 #include "host-os.h"
 #include "target_arch_cpu.h"
 
-int singlestep;
 static bool opt_one_insn_per_tb;
 uintptr_t guest_base;
 bool have_guest_base;
index 565c2030c10cbfd1e3b69bcb2a196d8cbe9d9bd8..1be4a3117ef2ce9fd8d5c182a0f076ff654f8643 100644 (file)
@@ -163,8 +163,6 @@ int cpu_memory_rw_debug(CPUState *cpu, vaddr addr,
                         void *ptr, size_t len, bool is_write);
 
 /* vl.c */
-extern int singlestep;
-
 void list_cpus(void);
 
 #endif /* CPU_COMMON_H */
index 489694ad654c430630ba6df9c4b9b6a34c9f7249..c7020b413bcb8e8ec34c457d16a8e529eb5facbb 100644 (file)
@@ -68,7 +68,6 @@
 char *exec_path;
 char real_exec_path[PATH_MAX];
 
-int singlestep;
 static bool opt_one_insn_per_tb;
 static const char *argv0;
 static const char *gdbstub;
index 39678aa8c58b6d6f125f23adbd575bfaaf7023b6..e83b5428d122f1b4bbc0a542547de31d2e3058c8 100644 (file)
@@ -43,7 +43,6 @@ int vga_interface_type = VGA_NONE;
 bool vga_interface_created;
 Chardev *parallel_hds[MAX_PARALLEL_PORTS];
 int win2k_install_hack;
-int singlestep;
 int fd_bootchk = 1;
 int graphic_rotate;
 QEMUOptionRom option_rom[MAX_OPTION_ROMS];