diff options
| -rw-r--r-- | arch/s390/kernel/time.c | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 60a508a9b981..dd95f1631621 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
| @@ -108,20 +108,10 @@ static void fixup_clock_comparator(unsigned long long delta) | |||
| 108 | set_clock_comparator(S390_lowcore.clock_comparator); | 108 | set_clock_comparator(S390_lowcore.clock_comparator); |
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | static int s390_next_ktime(ktime_t expires, | 111 | static int s390_next_event(unsigned long delta, |
| 112 | struct clock_event_device *evt) | 112 | struct clock_event_device *evt) |
| 113 | { | 113 | { |
| 114 | struct timespec ts; | 114 | S390_lowcore.clock_comparator = get_tod_clock() + delta; |
| 115 | u64 nsecs; | ||
| 116 | |||
| 117 | ts.tv_sec = ts.tv_nsec = 0; | ||
| 118 | monotonic_to_bootbased(&ts); | ||
| 119 | nsecs = ktime_to_ns(ktime_add(timespec_to_ktime(ts), expires)); | ||
| 120 | do_div(nsecs, 125); | ||
| 121 | S390_lowcore.clock_comparator = sched_clock_base_cc + (nsecs << 9); | ||
| 122 | /* Program the maximum value if we have an overflow (== year 2042) */ | ||
| 123 | if (unlikely(S390_lowcore.clock_comparator < sched_clock_base_cc)) | ||
| 124 | S390_lowcore.clock_comparator = -1ULL; | ||
| 125 | set_clock_comparator(S390_lowcore.clock_comparator); | 115 | set_clock_comparator(S390_lowcore.clock_comparator); |
| 126 | return 0; | 116 | return 0; |
| 127 | } | 117 | } |
| @@ -146,15 +136,14 @@ void init_cpu_timer(void) | |||
| 146 | cpu = smp_processor_id(); | 136 | cpu = smp_processor_id(); |
| 147 | cd = &per_cpu(comparators, cpu); | 137 | cd = &per_cpu(comparators, cpu); |
| 148 | cd->name = "comparator"; | 138 | cd->name = "comparator"; |
| 149 | cd->features = CLOCK_EVT_FEAT_ONESHOT | | 139 | cd->features = CLOCK_EVT_FEAT_ONESHOT; |
| 150 | CLOCK_EVT_FEAT_KTIME; | ||
| 151 | cd->mult = 16777; | 140 | cd->mult = 16777; |
| 152 | cd->shift = 12; | 141 | cd->shift = 12; |
| 153 | cd->min_delta_ns = 1; | 142 | cd->min_delta_ns = 1; |
| 154 | cd->max_delta_ns = LONG_MAX; | 143 | cd->max_delta_ns = LONG_MAX; |
| 155 | cd->rating = 400; | 144 | cd->rating = 400; |
| 156 | cd->cpumask = cpumask_of(cpu); | 145 | cd->cpumask = cpumask_of(cpu); |
| 157 | cd->set_next_ktime = s390_next_ktime; | 146 | cd->set_next_event = s390_next_event; |
| 158 | cd->set_mode = s390_set_mode; | 147 | cd->set_mode = s390_set_mode; |
| 159 | 148 | ||
| 160 | clockevents_register_device(cd); | 149 | clockevents_register_device(cd); |
