Skip to content

Commit

Permalink
timekeeping: add CONFIG_LEGACY_TIMER_TICK
Browse files Browse the repository at this point in the history
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: Geert Uytterhoeven <geert@linux-m68k.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
  • Loading branch information
Arnd Bergmann committed Oct 30, 2020
1 parent 77f6c0b commit b355016
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/linux/timekeeping.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 7 additions & 0 deletions kernel/time/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
1 change: 1 addition & 0 deletions kernel/time/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 19 additions & 0 deletions kernel/time/tick-legacy.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// 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);
}

0 comments on commit b355016

Please sign in to comment.