[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/2] s390x: pv: Fix diag318 PV fencing
From: |
Janosch Frank |
Subject: |
[PATCH 2/2] s390x: pv: Fix diag318 PV fencing |
Date: |
Wed, 21 Oct 2020 09:43:45 -0400 |
Diag318 fencing needs to be determined on the current VM PV state and
not on the state that the VM has when we create the CPU model.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reported-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Fixes: fabdada935 ("s390: guest support for diagnose 0x318")
Tested-by: Marc Hartmayer <mhartmay@linux.ibm.com>
---
hw/s390x/sclp.c | 10 ++++++++++
target/s390x/kvm.c | 3 +--
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
index 0cf2290826..69aba402d3 100644
--- a/hw/s390x/sclp.c
+++ b/hw/s390x/sclp.c
@@ -22,6 +22,7 @@
#include "hw/s390x/event-facility.h"
#include "hw/s390x/s390-pci-bus.h"
#include "hw/s390x/ipl.h"
+#include "hw/s390x/pv.h"
static inline SCLPDevice *get_sclp_device(void)
{
@@ -142,6 +143,15 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
if (s390_has_feat(S390_FEAT_EXTENDED_LENGTH_SCCB)) {
s390_get_feat_block(S390_FEAT_TYPE_SCLP_FAC134,
&read_info->fac134);
+ /*
+ * Diag318 is not available in protected mode and will result
+ * in an operation exception. As we can dynamically move in
+ * and out of protected mode, we need to fence the feature
+ * here rather than when creating the CPU model.
+ */
+ if (s390_is_pv()) {
+ read_info->fac134 &= ~0x80;
+ }
}
read_info->facilities = cpu_to_be64(SCLP_HAS_CPU_INFO |
diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
index f13eff688c..baa070fdf7 100644
--- a/target/s390x/kvm.c
+++ b/target/s390x/kvm.c
@@ -2498,8 +2498,7 @@ void kvm_s390_get_host_cpu_model(S390CPUModel *model,
Error **errp)
*/
set_bit(S390_FEAT_EXTENDED_LENGTH_SCCB, model->features);
- /* DIAGNOSE 0x318 is not supported under protected virtualization */
- if (!s390_is_pv() && kvm_check_extension(kvm_state, KVM_CAP_S390_DIAG318))
{
+ if (kvm_check_extension(kvm_state, KVM_CAP_S390_DIAG318)) {
set_bit(S390_FEAT_DIAG_318, model->features);
}
--
2.25.1
- [PATCH 0/2] s390x: pv: Diag318 fixes, Janosch Frank, 2020/10/21
- [PATCH 1/2] s390x: pv: Remove sclp boundary checks, Janosch Frank, 2020/10/21
- [PATCH 2/2] s390x: pv: Fix diag318 PV fencing,
Janosch Frank <=
- Re: [PATCH 2/2] s390x: pv: Fix diag318 PV fencing, David Hildenbrand, 2020/10/21
- Re: [PATCH 2/2] s390x: pv: Fix diag318 PV fencing, Janosch Frank, 2020/10/21
- Re: [PATCH 2/2] s390x: pv: Fix diag318 PV fencing, David Hildenbrand, 2020/10/21
- [PATCH] s390x: pv: Fix diag318 PV fencing, Janosch Frank, 2020/10/22
- Re: [PATCH] s390x: pv: Fix diag318 PV fencing, David Hildenbrand, 2020/10/22
- Re: [PATCH] s390x: pv: Fix diag318 PV fencing, Janosch Frank, 2020/10/22
- Re: [PATCH] s390x: pv: Fix diag318 PV fencing, David Hildenbrand, 2020/10/22
- Re: [PATCH] s390x: pv: Fix diag318 PV fencing, Halil Pasic, 2020/10/22