aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kvm/sigp.c
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2012-01-11 05:20:32 -0500
committerAvi Kivity <avi@redhat.com>2012-03-05 07:52:22 -0500
commit5a32c1af56b3c74212b1de2a1d1658c303dd3516 (patch)
tree4eb6f52e1bdc4b2427fdea83c88a0c188ad54b4f /arch/s390/kvm/sigp.c
parent60b413c9248495ea400e80e08e4d1e28ed7ee05e (diff)
KVM: s390: provide general purpose guest registers via kvm_run
This patch adds the general purpose registers to the kvm_run structure. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/s390/kvm/sigp.c')
-rw-r--r--arch/s390/kvm/sigp.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/arch/s390/kvm/sigp.c b/arch/s390/kvm/sigp.c
index 0a7941d74bc6..30eb0f73f9d5 100644
--- a/arch/s390/kvm/sigp.c
+++ b/arch/s390/kvm/sigp.c
@@ -48,7 +48,7 @@
48 48
49 49
50static int __sigp_sense(struct kvm_vcpu *vcpu, u16 cpu_addr, 50static int __sigp_sense(struct kvm_vcpu *vcpu, u16 cpu_addr,
51 unsigned long *reg) 51 u64 *reg)
52{ 52{
53 struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int; 53 struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
54 int rc; 54 int rc;
@@ -220,7 +220,7 @@ static int __sigp_set_arch(struct kvm_vcpu *vcpu, u32 parameter)
220} 220}
221 221
222static int __sigp_set_prefix(struct kvm_vcpu *vcpu, u16 cpu_addr, u32 address, 222static int __sigp_set_prefix(struct kvm_vcpu *vcpu, u16 cpu_addr, u32 address,
223 unsigned long *reg) 223 u64 *reg)
224{ 224{
225 struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int; 225 struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
226 struct kvm_s390_local_interrupt *li = NULL; 226 struct kvm_s390_local_interrupt *li = NULL;
@@ -278,7 +278,7 @@ out_fi:
278} 278}
279 279
280static int __sigp_sense_running(struct kvm_vcpu *vcpu, u16 cpu_addr, 280static int __sigp_sense_running(struct kvm_vcpu *vcpu, u16 cpu_addr,
281 unsigned long *reg) 281 u64 *reg)
282{ 282{
283 int rc; 283 int rc;
284 struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int; 284 struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
@@ -316,7 +316,7 @@ int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu)
316 int base2 = vcpu->arch.sie_block->ipb >> 28; 316 int base2 = vcpu->arch.sie_block->ipb >> 28;
317 int disp2 = ((vcpu->arch.sie_block->ipb & 0x0fff0000) >> 16); 317 int disp2 = ((vcpu->arch.sie_block->ipb & 0x0fff0000) >> 16);
318 u32 parameter; 318 u32 parameter;
319 u16 cpu_addr = vcpu->arch.guest_gprs[r3]; 319 u16 cpu_addr = vcpu->run->s.regs.gprs[r3];
320 u8 order_code; 320 u8 order_code;
321 int rc; 321 int rc;
322 322
@@ -327,18 +327,18 @@ int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu)
327 327
328 order_code = disp2; 328 order_code = disp2;
329 if (base2) 329 if (base2)
330 order_code += vcpu->arch.guest_gprs[base2]; 330 order_code += vcpu->run->s.regs.gprs[base2];
331 331
332 if (r1 % 2) 332 if (r1 % 2)
333 parameter = vcpu->arch.guest_gprs[r1]; 333 parameter = vcpu->run->s.regs.gprs[r1];
334 else 334 else
335 parameter = vcpu->arch.guest_gprs[r1 + 1]; 335 parameter = vcpu->run->s.regs.gprs[r1 + 1];
336 336
337 switch (order_code) { 337 switch (order_code) {
338 case SIGP_SENSE: 338 case SIGP_SENSE:
339 vcpu->stat.instruction_sigp_sense++; 339 vcpu->stat.instruction_sigp_sense++;
340 rc = __sigp_sense(vcpu, cpu_addr, 340 rc = __sigp_sense(vcpu, cpu_addr,
341 &vcpu->arch.guest_gprs[r1]); 341 &vcpu->run->s.regs.gprs[r1]);
342 break; 342 break;
343 case SIGP_EXTERNAL_CALL: 343 case SIGP_EXTERNAL_CALL:
344 vcpu->stat.instruction_sigp_external_call++; 344 vcpu->stat.instruction_sigp_external_call++;
@@ -363,12 +363,12 @@ int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu)
363 case SIGP_SET_PREFIX: 363 case SIGP_SET_PREFIX:
364 vcpu->stat.instruction_sigp_prefix++; 364 vcpu->stat.instruction_sigp_prefix++;
365 rc = __sigp_set_prefix(vcpu, cpu_addr, parameter, 365 rc = __sigp_set_prefix(vcpu, cpu_addr, parameter,
366 &vcpu->arch.guest_gprs[r1]); 366 &vcpu->run->s.regs.gprs[r1]);
367 break; 367 break;
368 case SIGP_SENSE_RUNNING: 368 case SIGP_SENSE_RUNNING:
369 vcpu->stat.instruction_sigp_sense_running++; 369 vcpu->stat.instruction_sigp_sense_running++;
370 rc = __sigp_sense_running(vcpu, cpu_addr, 370 rc = __sigp_sense_running(vcpu, cpu_addr,
371 &vcpu->arch.guest_gprs[r1]); 371 &vcpu->run->s.regs.gprs[r1]);
372 break; 372 break;
373 case SIGP_RESTART: 373 case SIGP_RESTART:
374 vcpu->stat.instruction_sigp_restart++; 374 vcpu->stat.instruction_sigp_restart++;