Commit b3550164 authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

timekeeping: add CONFIG_LEGACY_TIMER_TICK



All platforms that currently do not use generic clockevents roughly call
the same set of functions in their timer interrupts: xtime_update(),
update_process_times() and profile_tick(), sometimes in a different
sequence.

Add a helper function that performs all three of them, to make the
callers more uniform and simplify the interface.

Reviewed-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parent 77f6c0b8
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ extern int timekeeping_suspended;
/* Architecture timer tick functions: */
extern void update_process_times(int user);
extern void xtime_update(unsigned long ticks);
extern void legacy_timer_tick(unsigned long ticks);

/*
 * Get and set timeofday
+7 −0
Original line number Diff line number Diff line
@@ -57,6 +57,13 @@ config POSIX_CPU_TIMERS_TASK_WORK
	bool
	default y if POSIX_TIMERS && HAVE_POSIX_CPU_TIMERS_TASK_WORK

config LEGACY_TIMER_TICK
	bool
	help
	  The legacy timer tick helper is used by platforms that
	  lack support for the generic clockevent framework.
	  New platforms should use generic clockevents instead.

if GENERIC_CLOCKEVENTS
menu "Timers subsystem"

+1 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ ifeq ($(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST),y)
endif
obj-$(CONFIG_GENERIC_SCHED_CLOCK)		+= sched_clock.o
obj-$(CONFIG_TICK_ONESHOT)			+= tick-oneshot.o tick-sched.o
obj-$(CONFIG_LEGACY_TIMER_TICK)			+= tick-legacy.o
obj-$(CONFIG_HAVE_GENERIC_VDSO)			+= vsyscall.o
obj-$(CONFIG_DEBUG_FS)				+= timekeeping_debug.o
obj-$(CONFIG_TEST_UDELAY)			+= test_udelay.o
+19 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
/*
 * Timer tick function for architectures that lack generic clockevents,
 * consolidated here from m68k/ia64/parisc/arm.
 */

#include <linux/irq.h>
#include <linux/profile.h>
#include <linux/timekeeper_internal.h>

#include "tick-internal.h"

void legacy_timer_tick(unsigned long ticks)
{
	if (ticks)
		xtime_update(ticks);
	update_process_times(user_mode(get_irq_regs()));
	profile_tick(CPU_PROFILING);
}