From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:46939) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tk1ry-0001Kr-Bb for qemu-devel@nongnu.org; Sat, 15 Dec 2012 19:14:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Tk1rw-0004vt-Kd for qemu-devel@nongnu.org; Sat, 15 Dec 2012 19:14:14 -0500 Received: from cantor2.suse.de ([195.135.220.15]:33052 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tk1rw-0004vp-69 for qemu-devel@nongnu.org; Sat, 15 Dec 2012 19:14:12 -0500 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Sun, 16 Dec 2012 01:13:37 +0100 Message-Id: <1355616817-1260-12-git-send-email-afaerber@suse.de> In-Reply-To: <1355616817-1260-1-git-send-email-afaerber@suse.de> References: <1355616817-1260-1-git-send-email-afaerber@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH v2 11/11] cpu: Move kvm_run into CPUState List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Alexander Graf , Marcelo Tosatti , =?UTF-8?q?Andreas=20F=C3=A4rber?= , kvm@vger.kernel.org, Avi Kivity Pass CPUState / {X86,S390}CPU to helper functions. Signed-off-by: Andreas F=C3=A4rber --- cpu-defs.h | 4 +-- include/qemu/cpu.h | 2 ++ kvm-all.c | 8 +++--- target-i386/kvm.c | 9 +++--- target-s390x/kvm.c | 77 ++++++++++++++++++++++++++++------------------= ------ 5 Dateien ge=C3=A4ndert, 53 Zeilen hinzugef=C3=BCgt(+), 47 Zeilen entfer= nt(-) diff --git a/cpu-defs.h b/cpu-defs.h index 9ed54cf..caea72b 100644 --- a/cpu-defs.h +++ b/cpu-defs.h @@ -134,7 +134,6 @@ typedef struct icount_decr_u16 { } icount_decr_u16; #endif =20 -struct kvm_run; struct qemu_work_item; =20 typedef struct CPUBreakpoint { @@ -203,7 +202,6 @@ typedef struct CPUWatchpoint { /* user data */ = \ void *opaque; = \ = \ - const char *cpu_model_str; = \ - struct kvm_run *kvm_run; + const char *cpu_model_str; =20 #endif diff --git a/include/qemu/cpu.h b/include/qemu/cpu.h index 03962ef..fa3ffdb 100644 --- a/include/qemu/cpu.h +++ b/include/qemu/cpu.h @@ -53,6 +53,7 @@ typedef struct CPUClass { } CPUClass; =20 struct KVMState; +struct kvm_run; =20 /** * CPUState: @@ -85,6 +86,7 @@ struct CPUState { bool kvm_vcpu_dirty; #endif struct KVMState *kvm_state; + struct kvm_run *kvm_run; =20 /* TODO Move common fields from CPUArchState here. */ }; diff --git a/kvm-all.c b/kvm-all.c index ba139ab..f687229 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -240,9 +240,9 @@ int kvm_init_vcpu(CPUArchState *env) goto err; } =20 - env->kvm_run =3D mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_S= HARED, + cpu->kvm_run =3D mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_S= HARED, cpu->kvm_fd, 0); - if (env->kvm_run =3D=3D MAP_FAILED) { + if (cpu->kvm_run =3D=3D MAP_FAILED) { ret =3D -errno; DPRINTF("mmap'ing vcpu state failed\n"); goto err; @@ -250,7 +250,7 @@ int kvm_init_vcpu(CPUArchState *env) =20 if (s->coalesced_mmio && !s->coalesced_mmio_ring) { s->coalesced_mmio_ring =3D - (void *)env->kvm_run + s->coalesced_mmio * PAGE_SIZE; + (void *)cpu->kvm_run + s->coalesced_mmio * PAGE_SIZE; } =20 ret =3D kvm_arch_init_vcpu(cpu); @@ -1529,7 +1529,7 @@ void kvm_cpu_synchronize_post_init(CPUArchState *en= v) int kvm_cpu_exec(CPUArchState *env) { CPUState *cpu =3D ENV_GET_CPU(env); - struct kvm_run *run =3D env->kvm_run; + struct kvm_run *run =3D cpu->kvm_run; int ret, run_ret; =20 DPRINTF("kvm_cpu_exec()\n"); diff --git a/target-i386/kvm.c b/target-i386/kvm.c index ff5c9cd..53096c9 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -1859,9 +1859,11 @@ static int kvm_handle_halt(X86CPU *cpu) return 0; } =20 -static int kvm_handle_tpr_access(CPUX86State *env) +static int kvm_handle_tpr_access(X86CPU *cpu) { - struct kvm_run *run =3D env->kvm_run; + CPUX86State *env =3D &cpu->env; + CPUState *cs =3D CPU(cpu); + struct kvm_run *run =3D cs->kvm_run; =20 apic_handle_tpr_access_report(env->apic_state, run->tpr_access.rip, run->tpr_access.is_write ? TPR_ACCESS_= WRITE @@ -2067,7 +2069,6 @@ static bool host_supports_vmx(void) int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run) { X86CPU *cpu =3D X86_CPU(cs); - CPUX86State *env =3D &cpu->env; uint64_t code; int ret; =20 @@ -2080,7 +2081,7 @@ int kvm_arch_handle_exit(CPUState *cs, struct kvm_r= un *run) ret =3D 0; break; case KVM_EXIT_TPR_ACCESS: - ret =3D kvm_handle_tpr_access(env); + ret =3D kvm_handle_tpr_access(cpu); break; case KVM_EXIT_FAIL_ENTRY: code =3D run->fail_entry.hardware_entry_failure_reason; diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c index 4e34304..0b64092 100644 --- a/target-s390x/kvm.c +++ b/target-s390x/kvm.c @@ -98,13 +98,13 @@ int kvm_arch_put_registers(CPUState *cs, int level) int i; =20 /* always save the PSW and the GPRS*/ - env->kvm_run->psw_addr =3D env->psw.addr; - env->kvm_run->psw_mask =3D env->psw.mask; + cs->kvm_run->psw_addr =3D env->psw.addr; + cs->kvm_run->psw_mask =3D env->psw.mask; =20 - if (cap_sync_regs && env->kvm_run->kvm_valid_regs & KVM_SYNC_GPRS) { + if (cap_sync_regs && cs->kvm_run->kvm_valid_regs & KVM_SYNC_GPRS) { for (i =3D 0; i < 16; i++) { - env->kvm_run->s.regs.gprs[i] =3D env->regs[i]; - env->kvm_run->kvm_dirty_regs |=3D KVM_SYNC_GPRS; + cs->kvm_run->s.regs.gprs[i] =3D env->regs[i]; + cs->kvm_run->kvm_dirty_regs |=3D KVM_SYNC_GPRS; } } else { for (i =3D 0; i < 16; i++) { @@ -122,14 +122,14 @@ int kvm_arch_put_registers(CPUState *cs, int level) } =20 if (cap_sync_regs && - env->kvm_run->kvm_valid_regs & KVM_SYNC_ACRS && - env->kvm_run->kvm_valid_regs & KVM_SYNC_CRS) { + cs->kvm_run->kvm_valid_regs & KVM_SYNC_ACRS && + cs->kvm_run->kvm_valid_regs & KVM_SYNC_CRS) { for (i =3D 0; i < 16; i++) { - env->kvm_run->s.regs.acrs[i] =3D env->aregs[i]; - env->kvm_run->s.regs.crs[i] =3D env->cregs[i]; + cs->kvm_run->s.regs.acrs[i] =3D env->aregs[i]; + cs->kvm_run->s.regs.crs[i] =3D env->cregs[i]; } - env->kvm_run->kvm_dirty_regs |=3D KVM_SYNC_ACRS; - env->kvm_run->kvm_dirty_regs |=3D KVM_SYNC_CRS; + cs->kvm_run->kvm_dirty_regs |=3D KVM_SYNC_ACRS; + cs->kvm_run->kvm_dirty_regs |=3D KVM_SYNC_CRS; } else { for (i =3D 0; i < 16; i++) { sregs.acrs[i] =3D env->aregs[i]; @@ -142,9 +142,9 @@ int kvm_arch_put_registers(CPUState *cs, int level) } =20 /* Finally the prefix */ - if (cap_sync_regs && env->kvm_run->kvm_valid_regs & KVM_SYNC_PREFIX)= { - env->kvm_run->s.regs.prefix =3D env->psa; - env->kvm_run->kvm_dirty_regs |=3D KVM_SYNC_PREFIX; + if (cap_sync_regs && cs->kvm_run->kvm_valid_regs & KVM_SYNC_PREFIX) = { + cs->kvm_run->s.regs.prefix =3D env->psa; + cs->kvm_run->kvm_dirty_regs |=3D KVM_SYNC_PREFIX; } else { /* prefix is only supported via sync regs */ } @@ -161,13 +161,13 @@ int kvm_arch_get_registers(CPUState *cs) int i; =20 /* get the PSW */ - env->psw.addr =3D env->kvm_run->psw_addr; - env->psw.mask =3D env->kvm_run->psw_mask; + env->psw.addr =3D cs->kvm_run->psw_addr; + env->psw.mask =3D cs->kvm_run->psw_mask; =20 /* the GPRS */ - if (cap_sync_regs && env->kvm_run->kvm_valid_regs & KVM_SYNC_GPRS) { + if (cap_sync_regs && cs->kvm_run->kvm_valid_regs & KVM_SYNC_GPRS) { for (i =3D 0; i < 16; i++) { - env->regs[i] =3D env->kvm_run->s.regs.gprs[i]; + env->regs[i] =3D cs->kvm_run->s.regs.gprs[i]; } } else { ret =3D kvm_vcpu_ioctl(cs, KVM_GET_REGS, ®s); @@ -181,11 +181,11 @@ int kvm_arch_get_registers(CPUState *cs) =20 /* The ACRS and CRS */ if (cap_sync_regs && - env->kvm_run->kvm_valid_regs & KVM_SYNC_ACRS && - env->kvm_run->kvm_valid_regs & KVM_SYNC_CRS) { + cs->kvm_run->kvm_valid_regs & KVM_SYNC_ACRS && + cs->kvm_run->kvm_valid_regs & KVM_SYNC_CRS) { for (i =3D 0; i < 16; i++) { - env->aregs[i] =3D env->kvm_run->s.regs.acrs[i]; - env->cregs[i] =3D env->kvm_run->s.regs.crs[i]; + env->aregs[i] =3D cs->kvm_run->s.regs.acrs[i]; + env->cregs[i] =3D cs->kvm_run->s.regs.crs[i]; } } else { ret =3D kvm_vcpu_ioctl(cs, KVM_GET_SREGS, &sregs); @@ -199,8 +199,8 @@ int kvm_arch_get_registers(CPUState *cs) } =20 /* Finally the prefix */ - if (cap_sync_regs && env->kvm_run->kvm_valid_regs & KVM_SYNC_PREFIX)= { - env->psa =3D env->kvm_run->s.regs.prefix; + if (cap_sync_regs && cs->kvm_run->kvm_valid_regs & KVM_SYNC_PREFIX) = { + env->psa =3D cs->kvm_run->s.regs.prefix; } else { /* no prefix without sync regs */ } @@ -331,10 +331,13 @@ static void enter_pgmcheck(S390CPU *cpu, uint16_t c= ode) kvm_s390_interrupt(cpu, KVM_S390_PROGRAM_INT, code); } =20 -static inline void setcc(CPUS390XState *env, uint64_t cc) +static inline void setcc(S390CPU *cpu, uint64_t cc) { - env->kvm_run->psw_mask &=3D ~(3ull << 44); - env->kvm_run->psw_mask |=3D (cc & 3) << 44; + CPUS390XState *env =3D &cpu->env; + CPUState *cs =3D CPU(cpu); + + cs->kvm_run->psw_mask &=3D ~(3ull << 44); + cs->kvm_run->psw_mask |=3D (cc & 3) << 44; =20 env->psw.mask &=3D ~(3ul << 44); env->psw.mask |=3D (cc & 3) << 44; @@ -356,7 +359,7 @@ static int kvm_sclp_service_call(S390CPU *cpu, struct= kvm_run *run, if (r < 0) { enter_pgmcheck(cpu, -r); } - setcc(env, r); + setcc(cpu, r); =20 return 0; } @@ -446,8 +449,9 @@ static int s390_cpu_initial_reset(S390CPU *cpu) return 0; } =20 -static int handle_sigp(CPUS390XState *env, struct kvm_run *run, uint8_t = ipa1) +static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1) { + CPUS390XState *env =3D &cpu->env; uint8_t order_code; uint32_t parameter; uint16_t cpu_addr; @@ -499,7 +503,7 @@ static int handle_sigp(CPUS390XState *env, struct kvm= _run *run, uint8_t ipa1) } =20 out: - setcc(env, r ? 3 : 0); + setcc(cpu, r ? 3 : 0); return 0; } =20 @@ -520,7 +524,7 @@ static int handle_instruction(S390CPU *cpu, struct kv= m_run *run) r =3D handle_diag(env, run, ipb_code); break; case IPA0_SIGP: - r =3D handle_sigp(env, run, ipa1); + r =3D handle_sigp(cpu, run, ipa1); break; } =20 @@ -530,28 +534,29 @@ static int handle_instruction(S390CPU *cpu, struct = kvm_run *run) return 0; } =20 -static bool is_special_wait_psw(CPUS390XState *env) +static bool is_special_wait_psw(CPUState *cs) { /* signal quiesce */ - return env->kvm_run->psw_addr =3D=3D 0xfffUL; + return cs->kvm_run->psw_addr =3D=3D 0xfffUL; } =20 static int handle_intercept(S390CPU *cpu) { CPUS390XState *env =3D &cpu->env; - struct kvm_run *run =3D env->kvm_run; + CPUState *cs =3D CPU(cpu); + struct kvm_run *run =3D cs->kvm_run; int icpt_code =3D run->s390_sieic.icptcode; int r =3D 0; =20 dprintf("intercept: 0x%x (at 0x%lx)\n", icpt_code, - (long)env->kvm_run->psw_addr); + (long)cs->kvm_run->psw_addr); switch (icpt_code) { case ICPT_INSTRUCTION: r =3D handle_instruction(cpu, run); break; case ICPT_WAITPSW: if (s390_del_running_cpu(env) =3D=3D 0 && - is_special_wait_psw(env)) { + is_special_wait_psw(cs)) { qemu_system_shutdown_request(); } r =3D EXCP_HALTED; --=20 1.7.10.4