diff options
| author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2012-02-17 04:29:23 -0500 |
|---|---|---|
| committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2012-02-17 04:29:33 -0500 |
| commit | cf1eb40f8f5ea12c9e569e7282161fc7f194fd62 (patch) | |
| tree | 768a78bd496b7a385bd2b05d5dde4563c84728cd | |
| parent | 656d9125376006cf696b0836f1c6723a892629ca (diff) | |
[S390] correct ktime to tod clock comparator conversion
The conversion of the ktime to a value suitable for the clock comparator
does not take changes to wall_to_monotonic into account. In fact the
conversion just needs the boot clock (sched_clock_base_cc) and the
total_sleep_time.
This is applicable to 3.2+ kernels.
CC: stable@vger.kernel.org
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| -rw-r--r-- | arch/s390/kernel/time.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index fa02f443f5f6..14da278febbf 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
| @@ -113,11 +113,14 @@ static void fixup_clock_comparator(unsigned long long delta) | |||
| 113 | static int s390_next_ktime(ktime_t expires, | 113 | static int s390_next_ktime(ktime_t expires, |
| 114 | struct clock_event_device *evt) | 114 | struct clock_event_device *evt) |
| 115 | { | 115 | { |
| 116 | struct timespec ts; | ||
| 116 | u64 nsecs; | 117 | u64 nsecs; |
| 117 | 118 | ||
| 118 | nsecs = ktime_to_ns(ktime_sub(expires, ktime_get_monotonic_offset())); | 119 | ts.tv_sec = ts.tv_nsec = 0; |
| 120 | monotonic_to_bootbased(&ts); | ||
| 121 | nsecs = ktime_to_ns(ktime_add(timespec_to_ktime(ts), expires)); | ||
| 119 | do_div(nsecs, 125); | 122 | do_div(nsecs, 125); |
| 120 | S390_lowcore.clock_comparator = TOD_UNIX_EPOCH + (nsecs << 9); | 123 | S390_lowcore.clock_comparator = sched_clock_base_cc + (nsecs << 9); |
| 121 | set_clock_comparator(S390_lowcore.clock_comparator); | 124 | set_clock_comparator(S390_lowcore.clock_comparator); |
| 122 | return 0; | 125 | return 0; |
| 123 | } | 126 | } |
