aboutsummaryrefslogtreecommitdiff
path: root/target-s390x/kvm.c
diff options
context:
space:
mode:
authorAnthony Liguori <aliguori@us.ibm.com>2012-06-11 12:15:51 -0500
committerAnthony Liguori <aliguori@us.ibm.com>2012-06-11 12:15:51 -0500
commite4d40816f152b0021e0bdc2413f4b72fa9ea5e00 (patch)
treed0c01cf2343e035f5bafb0e4794dc8c6e3bc4e4d /target-s390x/kvm.c
parentdf33219191a8f8ac672f674ec1fd4e1837d760a3 (diff)
parent3edb8f92e8b5f18797693d8ed9fad3962e11e25d (diff)
downloadqemu-e4d40816f152b0021e0bdc2413f4b72fa9ea5e00.zip
qemu-e4d40816f152b0021e0bdc2413f4b72fa9ea5e00.tar.gz
qemu-e4d40816f152b0021e0bdc2413f4b72fa9ea5e00.tar.bz2
Merge remote-tracking branch 'afaerber-or/qom-cpu-3a' into staging
* afaerber-or/qom-cpu-3a: (27 commits) target-s390x: Pass S390CPU to s390_cpu_restart() s390-virtio: Let s390_cpu_addr2state() return S390CPU s390-virtio: Use cpu_s390x_init() to obtain S390CPU target-s390x: Let cpu_s390x_init() return S390CPU xen_machine_pv: Use cpu_x86_init() to obtain X86CPU arm_pic: Pass ARMCPU to arm_pic_init_cpu() arm_boot: Pass ARMCPU to arm_load_kernel() xilinx_zynq: Use cpu_arm_init() to obtain ARMCPU pxa2xx_gpio: Store ARMCPU in PXA2xxGPIOInfo pxa2xx_pic: Store ARMCPU in PXA2xxPICState pxa2xx: Pass ARMCPU to pxa2xx_pic_init() exynos4210: Use cpu_arm_init() to store ARMCPU vexpress: Use cpu_arm_init() to obtain ARMCPU realview: Use cpu_arm_init() to obtain ARMCPU arm_boot: Pass ARMCPU to arm_boot_info::secondary_cpu_reset_hook() arm_boot: Pass ARMCPU to arm_boot_info::write_secondary_boot() versatilepb: Use cpu_arm_init() to obtain ARMCPU musicpal: Use cpu_arm_init() to obtain ARMCPU integratorcp: Use cpu_arm_init() to obtain ARMCPU strongarm: Use cpu_arm_init() to store ARMCPU in StrongARMState ...
Diffstat (limited to 'target-s390x/kvm.c')
-rw-r--r--target-s390x/kvm.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index 90aad61..5800fd6 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -292,8 +292,10 @@ static int handle_diag(CPUS390XState *env, struct kvm_run *run, int ipb_code)
return r;
}
-static int s390_cpu_restart(CPUS390XState *env)
+static int s390_cpu_restart(S390CPU *cpu)
{
+ CPUS390XState *env = &cpu->env;
+
kvm_s390_interrupt(env, KVM_S390_RESTART, 0);
s390_add_running_cpu(env);
qemu_cpu_kick(env);
@@ -333,6 +335,7 @@ static int handle_sigp(CPUS390XState *env, struct kvm_run *run, uint8_t ipa1)
uint16_t cpu_addr;
uint8_t t;
int r = -1;
+ S390CPU *target_cpu;
CPUS390XState *target_env;
cpu_synchronize_state(env);
@@ -353,14 +356,15 @@ static int handle_sigp(CPUS390XState *env, struct kvm_run *run, uint8_t ipa1)
parameter = env->regs[t] & 0x7ffffe00;
cpu_addr = env->regs[ipa1 & 0x0f];
- target_env = s390_cpu_addr2state(cpu_addr);
- if (!target_env) {
+ target_cpu = s390_cpu_addr2state(cpu_addr);
+ if (target_cpu == NULL) {
goto out;
}
+ target_env = &target_cpu->env;
switch (order_code) {
case SIGP_RESTART:
- r = s390_cpu_restart(target_env);
+ r = s390_cpu_restart(target_cpu);
break;
case SIGP_STORE_STATUS_ADDR:
r = s390_store_status(target_env, parameter);