]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
fix up 4.4 kvm 390 patch
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 28 Apr 2018 05:53:50 +0000 (07:53 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 28 Apr 2018 05:53:50 +0000 (07:53 +0200)
queue-4.4/kvm-s390-wire-up-bpb-feature.patch

index 4114e76d44bcd5118d3c31b9985bcb657525729b..be938d1fab870ecf68f3868bc471f82bf5015543 100644 (file)
@@ -22,12 +22,13 @@ Reviewed-by: Cornelia Huck <cohuck@redhat.com>
 Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
 Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
 ---
  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 <gregkh@linuxfoundation.org>
  #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 <gregkh@linuxfoundation.org>
        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 <gregkh@linuxfoundation.org>
        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 {