|
@@ -176,21 +176,18 @@ static int handle_skey(struct kvm_vcpu *vcpu)
|
|
if (vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE)
|
|
if (vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE)
|
|
return kvm_s390_inject_program_int(vcpu, PGM_PRIVILEGED_OP);
|
|
return kvm_s390_inject_program_int(vcpu, PGM_PRIVILEGED_OP);
|
|
|
|
|
|
- vcpu->arch.sie_block->gpsw.addr =
|
|
|
|
- __rewind_psw(vcpu->arch.sie_block->gpsw, 4);
|
|
|
|
|
|
+ kvm_s390_rewind_psw(vcpu, 4);
|
|
VCPU_EVENT(vcpu, 4, "%s", "retrying storage key operation");
|
|
VCPU_EVENT(vcpu, 4, "%s", "retrying storage key operation");
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
static int handle_ipte_interlock(struct kvm_vcpu *vcpu)
|
|
static int handle_ipte_interlock(struct kvm_vcpu *vcpu)
|
|
{
|
|
{
|
|
- psw_t *psw = &vcpu->arch.sie_block->gpsw;
|
|
|
|
-
|
|
|
|
vcpu->stat.instruction_ipte_interlock++;
|
|
vcpu->stat.instruction_ipte_interlock++;
|
|
- if (psw_bits(*psw).p)
|
|
|
|
|
|
+ if (psw_bits(vcpu->arch.sie_block->gpsw).p)
|
|
return kvm_s390_inject_program_int(vcpu, PGM_PRIVILEGED_OP);
|
|
return kvm_s390_inject_program_int(vcpu, PGM_PRIVILEGED_OP);
|
|
wait_event(vcpu->kvm->arch.ipte_wq, !ipte_lock_held(vcpu));
|
|
wait_event(vcpu->kvm->arch.ipte_wq, !ipte_lock_held(vcpu));
|
|
- psw->addr = __rewind_psw(*psw, 4);
|
|
|
|
|
|
+ kvm_s390_rewind_psw(vcpu, 4);
|
|
VCPU_EVENT(vcpu, 4, "%s", "retrying ipte interlock operation");
|
|
VCPU_EVENT(vcpu, 4, "%s", "retrying ipte interlock operation");
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -721,8 +718,7 @@ static int handle_essa(struct kvm_vcpu *vcpu)
|
|
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
|
|
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
|
|
|
|
|
|
/* Rewind PSW to repeat the ESSA instruction */
|
|
/* Rewind PSW to repeat the ESSA instruction */
|
|
- vcpu->arch.sie_block->gpsw.addr =
|
|
|
|
- __rewind_psw(vcpu->arch.sie_block->gpsw, 4);
|
|
|
|
|
|
+ kvm_s390_rewind_psw(vcpu, 4);
|
|
vcpu->arch.sie_block->cbrlo &= PAGE_MASK; /* reset nceo */
|
|
vcpu->arch.sie_block->cbrlo &= PAGE_MASK; /* reset nceo */
|
|
cbrlo = phys_to_virt(vcpu->arch.sie_block->cbrlo);
|
|
cbrlo = phys_to_virt(vcpu->arch.sie_block->cbrlo);
|
|
down_read(&gmap->mm->mmap_sem);
|
|
down_read(&gmap->mm->mmap_sem);
|