qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Andreas Färber" <afaerber@suse.de>
To: qemu-devel@nongnu.org
Cc: "Riku Voipio" <riku.voipio@iki.fi>, "Andreas Färber" <afaerber@suse.de>
Subject: [Qemu-devel] [PATCH qom-cpu 58/59] linux-user: Change thread_env to CPUState
Date: Sun,  9 Jun 2013 21:13:25 +0200	[thread overview]
Message-ID: <1370805206-26574-59-git-send-email-afaerber@suse.de> (raw)
In-Reply-To: <1370805206-26574-1-git-send-email-afaerber@suse.de>

Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 linux-user/elfload.c   | 16 +++++++++-------
 linux-user/linuxload.c |  3 ++-
 linux-user/main.c      | 10 +++++-----
 linux-user/qemu.h      |  2 +-
 linux-user/signal.c    | 12 +++++++-----
 linux-user/syscall.c   |  6 +++---
 6 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index cb21487..5e702a1 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -125,7 +125,7 @@ typedef abi_int         target_pid_t;
 static const char *get_elf_platform(void)
 {
     static char elf_platform[] = "i386";
-    int family = (thread_env->cpuid_version >> 8) & 0xff;
+    int family = object_property_get_int(OBJECT(thread_cpu), "family", NULL);
     if (family > 6)
         family = 6;
     if (family >= 3)
@@ -137,7 +137,9 @@ static const char *get_elf_platform(void)
 
 static uint32_t get_elf_hwcap(void)
 {
-    return thread_env->features[FEAT_1_EDX];
+    X86CPU *cpu = X86_CPU(thread_cpu);
+
+    return cpu->env.features[FEAT_1_EDX];
 }
 
 #ifdef TARGET_X86_64
@@ -404,7 +406,7 @@ static int validate_guest_space(unsigned long guest_base,
 
 static uint32_t get_elf_hwcap(void)
 {
-    CPUARMState *e = thread_env;
+    ARMCPU *cpu = ARM_CPU(thread_cpu);
     uint32_t hwcaps = 0;
 
     hwcaps |= ARM_HWCAP_ARM_SWP;
@@ -415,7 +417,7 @@ static uint32_t get_elf_hwcap(void)
 
     /* probe for the extra features */
 #define GET_FEATURE(feat, hwcap) \
-    do {if (arm_feature(e, feat)) { hwcaps |= hwcap; } } while (0)
+    do { if (arm_feature(&cpu->env, feat)) { hwcaps |= hwcap; } } while (0)
     GET_FEATURE(ARM_FEATURE_VFP, ARM_HWCAP_ARM_VFP);
     GET_FEATURE(ARM_FEATURE_IWMMXT, ARM_HWCAP_ARM_IWMMXT);
     GET_FEATURE(ARM_FEATURE_THUMB2EE, ARM_HWCAP_ARM_THUMBEE);
@@ -619,13 +621,13 @@ enum {
 
 static uint32_t get_elf_hwcap(void)
 {
-    CPUPPCState *e = thread_env;
+    PowerPCCPU *cpu = POWERPC_CPU(thread_cpu);
     uint32_t features = 0;
 
     /* We don't have to be terribly complete here; the high points are
        Altivec/FP/SPE support.  Anything else is just a bonus.  */
 #define GET_FEATURE(flag, feature)                                      \
-    do {if (e->insns_flags & flag) features |= feature; } while(0)
+    do { if (cpu->env.insns_flags & flag) { features |= feature; } } while (0)
     GET_FEATURE(PPC_64B, QEMU_PPC_FEATURE_64);
     GET_FEATURE(PPC_FLOAT, QEMU_PPC_FEATURE_HAS_FPU);
     GET_FEATURE(PPC_ALTIVEC, QEMU_PPC_FEATURE_HAS_ALTIVEC);
@@ -2629,7 +2631,7 @@ static void fill_note_info_for_thread(CPUState *cpu, void *data)
     struct elf_note_info *info = data;
     CPUArchState *env = cpu->env_ptr;
 
-    if (env == thread_env) {
+    if (cpu == thread_cpu) {
         return;
     }
     fill_thread_info(info, env);
diff --git a/linux-user/linuxload.c b/linux-user/linuxload.c
index 381ab89..5cd6d91 100644
--- a/linux-user/linuxload.c
+++ b/linux-user/linuxload.c
@@ -89,7 +89,8 @@ static int prepare_binprm(struct linux_binprm *bprm)
 abi_ulong loader_build_argptr(int envc, int argc, abi_ulong sp,
                               abi_ulong stringp, int push_ptr)
 {
-    TaskState *ts = (TaskState *)thread_env->opaque;
+    CPUArchState *env = thread_cpu->env_ptr;
+    TaskState *ts = (TaskState *)env->opaque;
     int n = sizeof(abi_ulong);
     abi_ulong envp;
     abi_ulong argv;
diff --git a/linux-user/main.c b/linux-user/main.c
index 647c764..d4cdc4d 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -120,7 +120,7 @@ void fork_end(int child)
     if (child) {
         /* Child processes created by fork() only have a single thread.
            Discard information about the parent threads.  */
-        first_cpu = ENV_GET_CPU(thread_env);
+        first_cpu = thread_cpu;
         first_cpu->next_cpu = NULL;
         pending_cpus = 0;
         pthread_mutex_init(&exclusive_lock, NULL);
@@ -128,7 +128,7 @@ void fork_end(int child)
         pthread_cond_init(&exclusive_cond, NULL);
         pthread_cond_init(&exclusive_resume, NULL);
         pthread_mutex_init(&tcg_ctx.tb_ctx.tb_lock, NULL);
-        gdbserver_fork(thread_env);
+        gdbserver_fork((CPUArchState *)thread_cpu->env_ptr);
     } else {
         pthread_mutex_unlock(&exclusive_lock);
         pthread_mutex_unlock(&tcg_ctx.tb_ctx.tb_lock);
@@ -233,7 +233,7 @@ void fork_start(void)
 void fork_end(int child)
 {
     if (child) {
-        gdbserver_fork(thread_env);
+        gdbserver_fork((CPUArchState *)thread_cpu->env_ptr);
     }
 }
 
@@ -3151,7 +3151,7 @@ void cpu_loop(CPUS390XState *env)
 
 #endif /* TARGET_S390X */
 
-THREAD CPUArchState *thread_env;
+THREAD CPUState *thread_cpu;
 
 void task_settid(TaskState *ts)
 {
@@ -3641,7 +3641,7 @@ int main(int argc, char **argv, char **envp)
     cpu_reset(ENV_GET_CPU(env));
 #endif
 
-    thread_env = env;
+    thread_cpu = ENV_GET_CPU(env);
 
     if (getenv("QEMU_STRACE")) {
         do_strace = 1;
diff --git a/linux-user/qemu.h b/linux-user/qemu.h
index b10e957..d7f27ea 100644
--- a/linux-user/qemu.h
+++ b/linux-user/qemu.h
@@ -197,7 +197,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
                     abi_long arg5, abi_long arg6, abi_long arg7,
                     abi_long arg8);
 void gemu_log(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
-extern THREAD CPUArchState *thread_env;
+extern THREAD CPUState *thread_cpu;
 void cpu_loop(CPUArchState *env);
 char *target_strerror(int err);
 int get_osversion(void);
diff --git a/linux-user/signal.c b/linux-user/signal.c
index c4e20dc..42d8911 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -388,17 +388,18 @@ static inline void free_sigqueue(CPUArchState *env, struct sigqueue *q)
 /* abort execution with signal */
 static void QEMU_NORETURN force_sig(int target_sig)
 {
-    TaskState *ts = (TaskState *)thread_env->opaque;
+    CPUArchState *env = thread_cpu->env_ptr;
+    TaskState *ts = (TaskState *)env->opaque;
     int host_sig, core_dumped = 0;
     struct sigaction act;
     host_sig = target_to_host_signal(target_sig);
-    gdb_signalled(thread_env, target_sig);
+    gdb_signalled(env, target_sig);
 
     /* dump core if supported by target binary format */
     if (core_dump_signal(target_sig) && (ts->bprm->core_dump != NULL)) {
         stop_all_tasks();
         core_dumped =
-            ((*ts->bprm->core_dump)(target_sig, thread_env) == 0);
+            ((*ts->bprm->core_dump)(target_sig, env) == 0);
     }
     if (core_dumped) {
         /* we already dumped the core of target process, we don't want
@@ -503,6 +504,7 @@ int queue_signal(CPUArchState *env, int sig, target_siginfo_t *info)
 static void host_signal_handler(int host_signum, siginfo_t *info,
                                 void *puc)
 {
+    CPUArchState *env = thread_cpu->env_ptr;
     int sig;
     target_siginfo_t tinfo;
 
@@ -522,9 +524,9 @@ static void host_signal_handler(int host_signum, siginfo_t *info,
     fprintf(stderr, "qemu: got signal %d\n", sig);
 #endif
     host_to_target_siginfo_noswap(&tinfo, info);
-    if (queue_signal(thread_env, sig, &tinfo) == 1) {
+    if (queue_signal(env, sig, &tinfo) == 1) {
         /* interrupt the virtual CPU as soon as possible */
-        cpu_exit(ENV_GET_CPU(thread_env));
+        cpu_exit(thread_cpu);
     }
 }
 
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 38c1f5a..f8bbb3c 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -4334,8 +4334,8 @@ static void *clone_func(void *arg)
 
     env = info->env;
     cpu = ENV_GET_CPU(env);
-    thread_env = env;
-    ts = (TaskState *)thread_env->opaque;
+    thread_cpu = cpu;
+    ts = (TaskState *)env->opaque;
     info->tid = gettid();
     cpu->host_tid = info->tid;
     task_settid(ts);
@@ -5241,7 +5241,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
               sys_futex(g2h(ts->child_tidptr), FUTEX_WAKE, INT_MAX,
                         NULL, NULL, 0);
           }
-          thread_env = NULL;
+          thread_cpu = NULL;
           object_unref(OBJECT(ENV_GET_CPU(cpu_env)));
           g_free(ts);
           pthread_exit(NULL);
-- 
1.8.1.4

  parent reply	other threads:[~2013-06-09 19:14 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-09 19:12 [Qemu-devel] [PATCH qom-cpu 00/59] QOM CPUState, part 10: CPU loops Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 01/59] kvm: Change kvm_cpu_synchronize_state() argument to CPUState Andreas Färber
2013-06-10  1:58   ` li guang
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 02/59] kvm: Change cpu_synchronize_state() " Andreas Färber
2013-06-10  2:00   ` li guang
2013-06-10 23:23     ` Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 03/59] cpus: Simplify cpu_synchronize_all_post_reset() Andreas Färber
2013-06-10  2:04   ` li guang
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 04/59] cpus: Simplify cpu_synchronize_all_post_init() Andreas Färber
2013-06-10  2:04   ` li guang
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 05/59] cpus: Simplify pause_all_vcpus() Andreas Färber
2013-06-10  2:14   ` li guang
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 06/59] cpus: Simplify resume_all_vcpus() Andreas Färber
2013-06-10  2:14   ` li guang
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 07/59] cpus: Simplify set_numa_modes() Andreas Färber
2013-06-10  2:15   ` li guang
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 08/59] cpus: Simplify qmp_inject_nmi() Andreas Färber
2013-06-10  2:19   ` li guang
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 09/59] cpus: Simplify hw_error() Andreas Färber
2013-06-10  2:19   ` li guang
2013-06-10 21:48   ` Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 10/59] cpus: Simplify qemu_tcg_wait_io_event() and qemu_tcg_cpu_thread_fn() Andreas Färber
2013-06-10  2:20   ` li guang
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 11/59] monitor: Simplify do_inject_mce() Andreas Färber
2013-06-10  2:47   ` li guang
2013-06-10 17:14   ` Luiz Capitulino
2013-06-10 22:15     ` Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 12/59] gdbstub: Simplify find_cpu() Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 13/59] cpu: Change cpu_exit() argument to CPUState Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 14/59] cpus: Change cpu_thread_is_idle() " Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 15/59] cpus: Change qemu_kvm_wait_io_event() " Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 16/59] kvm: Change kvm_set_signal_mask() " Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 17/59] cpus: Change qemu_kvm_init_cpu_signals() " Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 18/59] cpu: Turn cpu_dump_{state, statistics}() into CPUState hooks Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 19/59] kvm: Change kvm_handle_internal_error() argument to CPUState Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 20/59] kvm: Change kvm_cpu_exec() " Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 21/59] gdbstub: Set gdb_set_stop_cpu() " Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 22/59] cpus: Change cpu_handle_guest_debug() " Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 23/59] cpus: Change qemu_kvm_start_vcpu() " Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 24/59] cpus: Change qemu_dummy_start_vcpu() " Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 25/59] cpu: Change qemu_init_vcpu() " Andreas Färber
2013-06-11  2:39   ` li guang
2013-06-16  8:27     ` Andreas Färber
2013-06-16 16:35       ` Andreas Färber
2013-06-18  2:23         ` li guang
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 26/59] hwaddr: Make hwaddr type usable beyond softmmu Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 27/59] cpu: Turn cpu_unassigned_access() into a CPUState hook Andreas Färber
2013-06-10 22:05   ` Andreas Färber
2013-06-11 11:51     ` Stefano Stabellini
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 28/59] cpu: Replace cpu_single_env with CPUState cpu_single_cpu Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 29/59] cputlb: Simplify cpu_tlb_reset_dirty_all() Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 30/59] exec: Simplify tcg_commit() Andreas Färber
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 31/59] monitor: Simplify do_info_numa() Andreas Färber
2013-06-10  7:20   ` Markus Armbruster
2013-06-10 21:23     ` Andreas Färber
2013-06-11  7:41       ` Markus Armbruster
2013-06-16 16:41         ` Andreas Färber
2013-06-16 20:31           ` Michael S. Tsirkin
2013-06-09 19:12 ` [Qemu-devel] [PATCH qom-cpu 32/59] kvm: Simplify kvm_{insert, remove, remove_all}_breakpoint[s]() Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 33/59] kvm: Simplify kvm_remove_all_breakpoints() further Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 34/59] kvm: Change kvm_remove_all_breakpoints() argument to CPUState Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 35/59] linux-user: Simplify start_exclusive() Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 36/59] linux-user/elfload: Abstract fill_note_info() with qemu_for_each_cpu() Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 37/59] target-i386: Abstract cpu_x86_inject_mce() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 38/59] translate-all: Abstract tb_flush() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 39/59] translate-all: Abstract tb_phys_invalidate() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 40/59] target-ppc: Abstract helper_msgsnd() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 41/59] target-mips: Abstract helper_dvpe() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 42/59] target-mips: Abstract helper_evpe() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 43/59] kvmclock: Abstract kvmclock_vm_state_change() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 44/59] kvmvapic: Abstract vapic_enable_tpr_reporting() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 45/59] pc: Abstract pic_irq_request() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 46/59] ppc: Abstract ppce500_set_mpic_proxy() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 47/59] spapr: Abstract spapr_fix_cpu_dt() " Andreas Färber
2013-06-11  2:43   ` David Gibson
2013-06-11 10:12     ` Andreas Färber
2013-06-12 14:28       ` Alexey Kardashevskiy
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 48/59] cpus: Abstract all_cpu_threads_idle() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 49/59] cpus: Abstract all_vcpus_paused() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 50/59] cpus: Abstract qmp_query_cpus() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 51/59] exec: Abstract qemu_get_cpu() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 52/59] gdbstub: Abstract gdb_breakpoint_{insert, remove}() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 53/59] gdbstub: Abstract gdb_breakpoint_remove_all() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 54/59] spapr: Abstract spapr_create_fdt_skel() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 55/59] spapr_rtas: Abstract rtas_query_cpu_stopped_state() with qemu_get_cpu() Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 56/59] spapr_rtas: Abstract rtas_start_cpu() " Andreas Färber
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 57/59] cpu: Make first_cpu and next_cpu CPUState (WIP) Andreas Färber
2013-06-09 20:08   ` Andreas Färber
2013-06-09 21:13   ` Andreas Färber
2013-06-09 19:13 ` Andreas Färber [this message]
2013-06-09 19:13 ` [Qemu-devel] [PATCH qom-cpu 59/59] bsd-user: Change thread_env to CPUState Andreas Färber
2013-06-10 14:17 ` [Qemu-devel] [PATCH qom-cpu 00/59] QOM CPUState, part 10: CPU loops Stefano Stabellini
2013-06-10 14:47   ` Andreas Färber
2013-06-10 15:36     ` Stefano Stabellini
2013-06-13  0:12 ` Andreas Färber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1370805206-26574-59-git-send-email-afaerber@suse.de \
    --to=afaerber@suse.de \
    --cc=qemu-devel@nongnu.org \
    --cc=riku.voipio@iki.fi \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).