Re: [PATCH] KVM: s390: Enable specification exception interpretation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06.07.21 13:47, Janis Schoetterl-Glausch wrote:
When this feature is enabled the hardware is free to interpret
specification exceptions generated by the guest, instead of causing
program interruption interceptions.

This benefits (test) programs that generate a lot of specification
exceptions (roughly 4x increase in exceptions/sec).

Interceptions will occur as before if ICTL_PINT is set,
i.e. if guest debug is enabled.

Signed-off-by: Janis Schoetterl-Glausch <scgl@xxxxxxxxxxxxx>
---
I'll additionally send kvm-unit-tests for testing this feature.

  arch/s390/include/asm/kvm_host.h | 1 +
  arch/s390/kvm/kvm-s390.c         | 2 ++
  arch/s390/kvm/vsie.c             | 2 ++
  3 files changed, 5 insertions(+)

diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h
index 9b4473f76e56..3a5b5084cdbe 100644
--- a/arch/s390/include/asm/kvm_host.h
+++ b/arch/s390/include/asm/kvm_host.h
@@ -244,6 +244,7 @@ struct kvm_s390_sie_block {
  	__u8	fpf;			/* 0x0060 */
  #define ECB_GS		0x40
  #define ECB_TE		0x10
+#define ECB_SPECI	0x08
  #define ECB_SRSI	0x04
  #define ECB_HOSTPROTINT	0x02
  	__u8	ecb;			/* 0x0061 */
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index b655a7d82bf0..aadd589a3755 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -3200,6 +3200,8 @@ static int kvm_s390_vcpu_setup(struct kvm_vcpu *vcpu)
  		vcpu->arch.sie_block->ecb |= ECB_SRSI;
  	if (test_kvm_facility(vcpu->kvm, 73))
  		vcpu->arch.sie_block->ecb |= ECB_TE;
+	if (!kvm_is_ucontrol(vcpu->kvm))
+		vcpu->arch.sie_block->ecb |= ECB_SPECI;
if (test_kvm_facility(vcpu->kvm, 8) && vcpu->kvm->arch.use_pfmfi)
  		vcpu->arch.sie_block->ecb2 |= ECB2_PFMFI;
diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c
index 4002a24bc43a..acda4b6fc851 100644
--- a/arch/s390/kvm/vsie.c
+++ b/arch/s390/kvm/vsie.c
@@ -510,6 +510,8 @@ static int shadow_scb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
  			prefix_unmapped(vsie_page);
  		scb_s->ecb |= ECB_TE;
  	}
+	/* specification exception interpretation */
+	scb_s->ecb |= scb_o->ecb & ECB_SPECI;
  	/* branch prediction */
  	if (test_kvm_facility(vcpu->kvm, 82))
  		scb_s->fpf |= scb_o->fpf & FPF_BPBC;


I assume this is a new CPU feature, right? If so

a) How can we check whether we can actually safely enable it. (which facility do we have to check) b) Do we have to handle vSIE? Do we have to indicate a CPU feature that unlocks this feature?

--
Thanks,

David / dhildenb




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Kernel Development]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Info]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Linux Media]     [Device Mapper]

  Powered by Linux