+++ /dev/null
-From 9c808765e88efb6fa6af7e2206ef89512f1840a7 Mon Sep 17 00:00:00 2001
-From: Marc Zyngier <marc.zyngier@arm.com>
-Date: Fri, 15 Jan 2016 17:41:08 +0000
-Subject: hrtimer: Add support for CLOCK_MONOTONIC_RAW
-
-From: Marc Zyngier <marc.zyngier@arm.com>
-
-commit 9c808765e88efb6fa6af7e2206ef89512f1840a7 upstream.
-
-The KVM/ARM timer implementation arms a hrtimer when a vcpu is
-blocked (usually because it is waiting for an interrupt)
-while its timer is going to kick in the future.
-
-It is essential that this timer doesn't get adjusted, or the
-guest will end up being woken-up at the wrong time (NTP running
-on the host seems to confuse the hell out of some guests).
-
-In order to allow this, let's add CLOCK_MONOTONIC_RAW support
-to hrtimer (it is so far only supported for posix timers). It also
-has the (limited) benefit of fixing de0421d53bfb ("mac80211_hwsim:
-shuffle code to prepare for dynamic radios"), which already uses
-this functionnality without realizing wasn't implemented (just being
-lucky...).
-
-Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
-Cc: Tomasz Nowicki <tn@semihalf.com>
-Cc: Christoffer Dall <christoffer.dall@linaro.org>
-Link: http://lkml.kernel.org/r/1452879670-16133-2-git-send-email-marc.zyngier@arm.com
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Cc: Felix Fietkau <nbd@nbd.name>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- include/linux/hrtimer.h | 1 +
- kernel/time/hrtimer.c | 11 ++++++++++-
- 2 files changed, 11 insertions(+), 1 deletion(-)
-
---- a/include/linux/hrtimer.h
-+++ b/include/linux/hrtimer.h
-@@ -153,6 +153,7 @@ enum hrtimer_base_type {
- HRTIMER_BASE_REALTIME,
- HRTIMER_BASE_BOOTTIME,
- HRTIMER_BASE_TAI,
-+ HRTIMER_BASE_MONOTONIC_RAW,
- HRTIMER_MAX_CLOCK_BASES,
- };
-
---- a/kernel/time/hrtimer.c
-+++ b/kernel/time/hrtimer.c
-@@ -90,6 +90,11 @@ DEFINE_PER_CPU(struct hrtimer_cpu_base,
- .clockid = CLOCK_TAI,
- .get_time = &ktime_get_clocktai,
- },
-+ {
-+ .index = HRTIMER_BASE_MONOTONIC_RAW,
-+ .clockid = CLOCK_MONOTONIC_RAW,
-+ .get_time = &ktime_get_raw,
-+ },
- }
- };
-
-@@ -99,6 +104,7 @@ static const int hrtimer_clock_to_base_t
-
- [CLOCK_REALTIME] = HRTIMER_BASE_REALTIME,
- [CLOCK_MONOTONIC] = HRTIMER_BASE_MONOTONIC,
-+ [CLOCK_MONOTONIC_RAW] = HRTIMER_BASE_MONOTONIC_RAW,
- [CLOCK_BOOTTIME] = HRTIMER_BASE_BOOTTIME,
- [CLOCK_TAI] = HRTIMER_BASE_TAI,
- };
-@@ -1292,7 +1298,10 @@ static void __hrtimer_run_queues(struct
- if (!(active & 0x01))
- continue;
-
-- basenow = ktime_add(now, base->offset);
-+ if (unlikely(base->index == HRTIMER_BASE_MONOTONIC_RAW))
-+ basenow = ktime_get_raw();
-+ else
-+ basenow = ktime_add(now, base->offset);
-
- while ((node = timerqueue_getnext(&base->active))) {
- struct hrtimer *timer;