|
@@ -205,13 +205,10 @@ static int handle_store_cpu_address(struct kvm_vcpu *vcpu)
|
|
|
int kvm_s390_skey_check_enable(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
int rc;
|
|
|
- struct kvm_s390_sie_block *sie_block = vcpu->arch.sie_block;
|
|
|
|
|
|
trace_kvm_s390_skey_related_inst(vcpu);
|
|
|
/* Already enabled? */
|
|
|
- if (vcpu->kvm->arch.use_skf &&
|
|
|
- !(sie_block->ictl & (ICTL_ISKE | ICTL_SSKE | ICTL_RRBE)) &&
|
|
|
- !kvm_s390_test_cpuflags(vcpu, CPUSTAT_KSS))
|
|
|
+ if (vcpu->arch.skey_enabled)
|
|
|
return 0;
|
|
|
|
|
|
rc = s390_enable_skey();
|
|
@@ -222,9 +219,10 @@ int kvm_s390_skey_check_enable(struct kvm_vcpu *vcpu)
|
|
|
if (kvm_s390_test_cpuflags(vcpu, CPUSTAT_KSS))
|
|
|
kvm_s390_clear_cpuflags(vcpu, CPUSTAT_KSS);
|
|
|
if (!vcpu->kvm->arch.use_skf)
|
|
|
- sie_block->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE;
|
|
|
+ vcpu->arch.sie_block->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE;
|
|
|
else
|
|
|
- sie_block->ictl &= ~(ICTL_ISKE | ICTL_SSKE | ICTL_RRBE);
|
|
|
+ vcpu->arch.sie_block->ictl &= ~(ICTL_ISKE | ICTL_SSKE | ICTL_RRBE);
|
|
|
+ vcpu->arch.skey_enabled = true;
|
|
|
return 0;
|
|
|
}
|
|
|
|