From: Greg Kroah-Hartman Date: Sat, 28 Apr 2018 05:53:50 +0000 (+0200) Subject: fix up 4.4 kvm 390 patch X-Git-Tag: v3.18.107~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d5a3b3232fec46010126f276cd55b7952a3bd239;p=thirdparty%2Fkernel%2Fstable-queue.git fix up 4.4 kvm 390 patch --- diff --git a/queue-4.4/kvm-s390-wire-up-bpb-feature.patch b/queue-4.4/kvm-s390-wire-up-bpb-feature.patch index 4114e76d44b..be938d1fab8 100644 --- a/queue-4.4/kvm-s390-wire-up-bpb-feature.patch +++ b/queue-4.4/kvm-s390-wire-up-bpb-feature.patch @@ -22,12 +22,13 @@ Reviewed-by: Cornelia Huck Signed-off-by: Radim Krčmář Signed-off-by: Martin Schwidefsky Signed-off-by: Greg Kroah-Hartman + --- arch/s390/include/asm/kvm_host.h | 3 ++- arch/s390/include/uapi/asm/kvm.h | 3 +++ - arch/s390/kvm/kvm-s390.c | 13 ++++++++++++- + arch/s390/kvm/kvm-s390.c | 12 ++++++++++++ include/uapi/linux/kvm.h | 1 + - 4 files changed, 18 insertions(+), 2 deletions(-) + 4 files changed, 18 insertions(+), 1 deletion(-) --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h @@ -47,7 +48,7 @@ Signed-off-by: Greg Kroah-Hartman #define KVM_SYNC_ARCH0 (1UL << 4) #define KVM_SYNC_PFAULT (1UL << 5) #define KVM_SYNC_VRS (1UL << 6) -+#define KVM_SYNC_BPBC (1UL << 10) ++#define KVM_SYNC_BPBC (1UL << 10) /* definition of registers in kvm_run */ struct kvm_sync_regs { __u64 prefix; /* prefix register */ @@ -72,24 +73,16 @@ Signed-off-by: Greg Kroah-Hartman default: r = 0; } -@@ -1262,6 +1265,8 @@ int kvm_arch_vcpu_init(struct kvm_vcpu * - KVM_SYNC_CRS | - KVM_SYNC_ARCH0 | +@@ -1264,6 +1267,8 @@ int kvm_arch_vcpu_init(struct kvm_vcpu * KVM_SYNC_PFAULT; -+ if (test_kvm_facility(vcpu->kvm, 82)) -+ vcpu->run->kvm_valid_regs |= KVM_SYNC_BPBC; if (test_kvm_facility(vcpu->kvm, 129)) vcpu->run->kvm_valid_regs |= KVM_SYNC_VRS; ++ if (test_kvm_facility(vcpu->kvm, 82)) ++ vcpu->run->kvm_valid_regs |= KVM_SYNC_BPBC; -@@ -1286,7 +1291,6 @@ void kvm_arch_vcpu_load(struct kvm_vcpu - if (test_fp_ctl(current->thread.fpu.fpc)) - /* User space provided an invalid FPC, let's clear it */ - current->thread.fpu.fpc = 0; -- - save_access_regs(vcpu->arch.host_acrs); - restore_access_regs(vcpu->run->s.regs.acrs); - gmap_enable(vcpu->arch.gmap); -@@ -1327,6 +1331,7 @@ static void kvm_s390_vcpu_initial_reset( + if (kvm_is_ucontrol(vcpu->kvm)) + return __kvm_ucontrol_vcpu_init(vcpu); +@@ -1327,6 +1332,7 @@ static void kvm_s390_vcpu_initial_reset( current->thread.fpu.fpc = 0; vcpu->arch.sie_block->gbea = 1; vcpu->arch.sie_block->pp = 0; @@ -97,26 +90,26 @@ Signed-off-by: Greg Kroah-Hartman vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID; kvm_clear_async_pf_completion_queue(vcpu); if (!kvm_s390_user_cpu_state_ctrl(vcpu->kvm)) -@@ -2162,6 +2167,7 @@ static void store_regs(struct kvm_vcpu * - kvm_run->s.regs.pft = vcpu->arch.pfault_token; - kvm_run->s.regs.pfs = vcpu->arch.pfault_select; - kvm_run->s.regs.pfc = vcpu->arch.pfault_compare; -+ kvm_run->s.regs.bpbc = (vcpu->arch.sie_block->fpf & FPF_BPBC) == FPF_BPBC; - } - - int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) -@@ -2194,6 +2200,11 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_v - kvm_run->exit_reason = KVM_EXIT_INTR; - rc = -EINTR; +@@ -2145,6 +2151,11 @@ static void sync_regs(struct kvm_vcpu *v + if (vcpu->arch.pfault_token == KVM_S390_PFAULT_TOKEN_INVALID) + kvm_clear_async_pf_completion_queue(vcpu); } + if ((kvm_run->kvm_dirty_regs & KVM_SYNC_BPBC) && + test_kvm_facility(vcpu->kvm, 82)) { + vcpu->arch.sie_block->fpf &= ~FPF_BPBC; + vcpu->arch.sie_block->fpf |= kvm_run->s.regs.bpbc ? FPF_BPBC : 0; + } + kvm_run->kvm_dirty_regs = 0; + } + +@@ -2162,6 +2173,7 @@ static void store_regs(struct kvm_vcpu * + kvm_run->s.regs.pft = vcpu->arch.pfault_token; + kvm_run->s.regs.pfs = vcpu->arch.pfault_select; + kvm_run->s.regs.pfc = vcpu->arch.pfault_compare; ++ kvm_run->s.regs.bpbc = (vcpu->arch.sie_block->fpf & FPF_BPBC) == FPF_BPBC; + } - if (guestdbg_exit_pending(vcpu) && !rc) { - kvm_s390_prepare_debug_exit(vcpu); + int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -831,6 +831,7 @@ struct kvm_ppc_smmu_info {