Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 82e88ff1 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

hrtimer: Revert CLOCK_MONOTONIC_RAW support



Revert commits:
a6e707dd: KVM: arm/arm64: timer: Switch to CLOCK_MONOTONIC_RAW
9006a018: hrtimer: Catch illegal clockids
9c808765: hrtimer: Add support for CLOCK_MONOTONIC_RAW

Marc found out, that there are fundamental issues with that patch series
because __hrtimer_get_next_event() and hrtimer_forward() need support for
CLOCK_MONOTONIC_RAW. Nothing which is easily fixed, so revert the whole lot.

Reported-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
Link: http://lkml.kernel.org/r/56D6CEF0.8060607@arm.com


Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 232d2637
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -151,7 +151,6 @@ enum hrtimer_base_type {
	HRTIMER_BASE_REALTIME,
	HRTIMER_BASE_BOOTTIME,
	HRTIMER_BASE_TAI,
	HRTIMER_BASE_MONOTONIC_RAW,
	HRTIMER_MAX_CLOCK_BASES,
};

+2 −16
Original line number Diff line number Diff line
@@ -90,30 +90,19 @@ DEFINE_PER_CPU(struct hrtimer_cpu_base, hrtimer_bases) =
			.clockid = CLOCK_TAI,
			.get_time = &ktime_get_clocktai,
		},
		{
			.index = HRTIMER_BASE_MONOTONIC_RAW,
			.clockid = CLOCK_MONOTONIC_RAW,
			.get_time = &ktime_get_raw,
		},
	}
};

static const int hrtimer_clock_to_base_table[MAX_CLOCKS] = {
	/* Make sure we catch unsupported clockids */
	[0 ... MAX_CLOCKS - 1]	= HRTIMER_MAX_CLOCK_BASES,

	[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,
};

static inline int hrtimer_clockid_to_base(clockid_t clock_id)
{
	int base = hrtimer_clock_to_base_table[clock_id];
	BUG_ON(base == HRTIMER_MAX_CLOCK_BASES);
	return base;
	return hrtimer_clock_to_base_table[clock_id];
}

/*
@@ -1279,9 +1268,6 @@ static void __hrtimer_run_queues(struct hrtimer_cpu_base *cpu_base, ktime_t now)
		if (!(active & 0x01))
			continue;

		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))) {
+2 −2
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ static bool timer_is_armed(struct arch_timer_cpu *timer)
static void timer_arm(struct arch_timer_cpu *timer, u64 ns)
{
	timer->armed = true;
	hrtimer_start(&timer->timer, ktime_add_ns(ktime_get_raw(), ns),
	hrtimer_start(&timer->timer, ktime_add_ns(ktime_get(), ns),
		      HRTIMER_MODE_ABS);
}

@@ -308,7 +308,7 @@ void kvm_timer_vcpu_init(struct kvm_vcpu *vcpu)
	struct arch_timer_cpu *timer = &vcpu->arch.timer_cpu;

	INIT_WORK(&timer->expired, kvm_timer_inject_irq_work);
	hrtimer_init(&timer->timer, CLOCK_MONOTONIC_RAW, HRTIMER_MODE_ABS);
	hrtimer_init(&timer->timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
	timer->timer.function = kvm_timer_expire;
}