aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Hildenbrand <david@redhat.com>2018-04-27 08:36:13 -0400
committerChristian Borntraeger <borntraeger@de.ibm.com>2018-05-17 03:02:37 -0400
commit33d1b2729e409e8327dec2d13a9144dfa76a947c (patch)
treeeb18b2f8c207f54f54a5a25a11337e9e0acd3162
parent9ac96d759fa2de2386a4fccab80880f99d1161d2 (diff)
KVM: s390: generalize kvm_s390_get_tod_clock_ext()
Move the Multiple-epoch facility handling into it and rename it to kvm_s390_get_tod_clock(). This leaves us with: - kvm_s390_set_tod_clock() - kvm_s390_get_tod_clock() - kvm_s390_get_tod_clock_fast() So all Multiple-epoch facility is hidden in these functions. Signed-off-by: David Hildenbrand <david@redhat.com> Reviewed-by: Collin Walling <walling@linux.ibm.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Signed-off-by: Janosch Frank <frankja@linux.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-rw-r--r--arch/s390/kvm/kvm-s390.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index fd7ce3ab45eb..e521f7699032 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -1040,8 +1040,8 @@ static int kvm_s390_set_tod(struct kvm *kvm, struct kvm_device_attr *attr)
1040 return ret; 1040 return ret;
1041} 1041}
1042 1042
1043static void kvm_s390_get_tod_clock_ext(struct kvm *kvm, 1043static void kvm_s390_get_tod_clock(struct kvm *kvm,
1044 struct kvm_s390_vm_tod_clock *gtod) 1044 struct kvm_s390_vm_tod_clock *gtod)
1045{ 1045{
1046 struct kvm_s390_tod_clock_ext htod; 1046 struct kvm_s390_tod_clock_ext htod;
1047 1047
@@ -1050,10 +1050,12 @@ static void kvm_s390_get_tod_clock_ext(struct kvm *kvm,
1050 get_tod_clock_ext((char *)&htod); 1050 get_tod_clock_ext((char *)&htod);
1051 1051
1052 gtod->tod = htod.tod + kvm->arch.epoch; 1052 gtod->tod = htod.tod + kvm->arch.epoch;
1053 gtod->epoch_idx = htod.epoch_idx + kvm->arch.epdx; 1053 gtod->epoch_idx = 0;
1054 1054 if (test_kvm_facility(kvm, 139)) {
1055 if (gtod->tod < htod.tod) 1055 gtod->epoch_idx = htod.epoch_idx + kvm->arch.epdx;
1056 gtod->epoch_idx += 1; 1056 if (gtod->tod < htod.tod)
1057 gtod->epoch_idx += 1;
1058 }
1057 1059
1058 preempt_enable(); 1060 preempt_enable();
1059} 1061}
@@ -1063,12 +1065,7 @@ static int kvm_s390_get_tod_ext(struct kvm *kvm, struct kvm_device_attr *attr)
1063 struct kvm_s390_vm_tod_clock gtod; 1065 struct kvm_s390_vm_tod_clock gtod;
1064 1066
1065 memset(&gtod, 0, sizeof(gtod)); 1067 memset(&gtod, 0, sizeof(gtod));
1066 1068 kvm_s390_get_tod_clock(kvm, &gtod);
1067 if (test_kvm_facility(kvm, 139))
1068 kvm_s390_get_tod_clock_ext(kvm, &gtod);
1069 else
1070 gtod.tod = kvm_s390_get_tod_clock_fast(kvm);
1071
1072 if (copy_to_user((void __user *)attr->addr, &gtod, sizeof(gtod))) 1069 if (copy_to_user((void __user *)attr->addr, &gtod, sizeof(gtod)))
1073 return -EFAULT; 1070 return -EFAULT;
1074 1071