aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJanosch Frank <frankja@linux.vnet.ibm.com>2016-08-04 03:57:36 -0400
committerChristian Borntraeger <borntraeger@de.ibm.com>2017-01-30 05:17:28 -0500
commitcd1836f583d78bdd15ef748f4d85bf007569c7ad (patch)
treeae8d9a7818721f5e006d19d8ea538bb4089cce0b
parenta679c547d19ded9b7d1a88e17cf5e5b69ac619b6 (diff)
KVM: s390: instruction-execution-protection support
The new Instruction Execution Protection needs to be enabled before the guest can use it. Therefore we pass the IEP facility bit to the guest and enable IEP interpretation. Signed-off-by: Janosch Frank <frankja@linux.vnet.ibm.com> Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-rw-r--r--arch/s390/kvm/kvm-s390.c2
-rw-r--r--arch/s390/kvm/vsie.c3
-rw-r--r--arch/s390/tools/gen_facilities.c1
3 files changed, 6 insertions, 0 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index bec71e902be3..e5130818fb03 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -1938,6 +1938,8 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
1938 1938
1939 if (test_kvm_facility(vcpu->kvm, 8) && sclp.has_pfmfi) 1939 if (test_kvm_facility(vcpu->kvm, 8) && sclp.has_pfmfi)
1940 vcpu->arch.sie_block->ecb2 |= 0x08; 1940 vcpu->arch.sie_block->ecb2 |= 0x08;
1941 if (test_kvm_facility(vcpu->kvm, 130))
1942 vcpu->arch.sie_block->ecb2 |= 0x20;
1941 vcpu->arch.sie_block->eca = 0x1002000U; 1943 vcpu->arch.sie_block->eca = 0x1002000U;
1942 if (sclp.has_cei) 1944 if (sclp.has_cei)
1943 vcpu->arch.sie_block->eca |= 0x80000000U; 1945 vcpu->arch.sie_block->eca |= 0x80000000U;
diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c
index d8673e243f13..ed62c6d57d93 100644
--- a/arch/s390/kvm/vsie.c
+++ b/arch/s390/kvm/vsie.c
@@ -324,6 +324,9 @@ static int shadow_scb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
324 /* Run-time-Instrumentation */ 324 /* Run-time-Instrumentation */
325 if (test_kvm_facility(vcpu->kvm, 64)) 325 if (test_kvm_facility(vcpu->kvm, 64))
326 scb_s->ecb3 |= scb_o->ecb3 & 0x01U; 326 scb_s->ecb3 |= scb_o->ecb3 & 0x01U;
327 /* Instruction Execution Prevention */
328 if (test_kvm_facility(vcpu->kvm, 130))
329 scb_s->ecb2 |= scb_o->ecb2 & 0x20U;
327 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_SIIF)) 330 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_SIIF))
328 scb_s->eca |= scb_o->eca & 0x00000001U; 331 scb_s->eca |= scb_o->eca & 0x00000001U;
329 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_IB)) 332 if (test_kvm_cpu_feat(vcpu->kvm, KVM_S390_VM_CPU_FEAT_IB))
diff --git a/arch/s390/tools/gen_facilities.c b/arch/s390/tools/gen_facilities.c
index b6ac8dfee001..0cf802de52a1 100644
--- a/arch/s390/tools/gen_facilities.c
+++ b/arch/s390/tools/gen_facilities.c
@@ -80,6 +80,7 @@ static struct facility_def facility_defs[] = {
80 76, /* msa extension 3 */ 80 76, /* msa extension 3 */
81 77, /* msa extension 4 */ 81 77, /* msa extension 4 */
82 78, /* enhanced-DAT 2 */ 82 78, /* enhanced-DAT 2 */
83 130, /* instruction-execution-protection */
83 131, /* enhanced-SOP 2 and side-effect */ 84 131, /* enhanced-SOP 2 and side-effect */
84 -1 /* END */ 85 -1 /* END */
85 } 86 }