diff options
author | David Hildenbrand <david@redhat.com> | 2018-04-27 08:36:13 -0400 |
---|---|---|
committer | Christian Borntraeger <borntraeger@de.ibm.com> | 2018-05-17 03:02:37 -0400 |
commit | 33d1b2729e409e8327dec2d13a9144dfa76a947c (patch) | |
tree | eb18b2f8c207f54f54a5a25a11337e9e0acd3162 | |
parent | 9ac96d759fa2de2386a4fccab80880f99d1161d2 (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.c | 21 |
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 | ||
1043 | static void kvm_s390_get_tod_clock_ext(struct kvm *kvm, | 1043 | static 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(>od, 0, sizeof(gtod)); | 1067 | memset(>od, 0, sizeof(gtod)); |
1066 | 1068 | kvm_s390_get_tod_clock(kvm, >od); | |
1067 | if (test_kvm_facility(kvm, 139)) | ||
1068 | kvm_s390_get_tod_clock_ext(kvm, >od); | ||
1069 | else | ||
1070 | gtod.tod = kvm_s390_get_tod_clock_fast(kvm); | ||
1071 | |||
1072 | if (copy_to_user((void __user *)attr->addr, >od, sizeof(gtod))) | 1069 | if (copy_to_user((void __user *)attr->addr, >od, sizeof(gtod))) |
1073 | return -EFAULT; | 1070 | return -EFAULT; |
1074 | 1071 | ||