sched_clock: Make ARM's sched_clock generic for all architectures

Nothing about the sched_clock implementation in the ARM port is
specific to the architecture. Generalize the code so that other
architectures can use it by selecting GENERIC_SCHED_CLOCK.

Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
[jstultz: Merge minor collisions with other patches in my tree]
Signed-off-by: John Stultz <john.stultz@linaro.org>
This commit is contained in:
Stephen Boyd 2013-06-01 23:39:40 -07:00 коммит произвёл John Stultz
Родитель ffbfb5e316
Коммит 38ff87f77a
36 изменённых файлов: 45 добавлений и 38 удалений

Просмотреть файл

@ -14,6 +14,7 @@ config ARM
select GENERIC_IRQ_PROBE select GENERIC_IRQ_PROBE
select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW
select GENERIC_PCI_IOMAP select GENERIC_PCI_IOMAP
select GENERIC_SCHED_CLOCK
select GENERIC_SMP_IDLE_THREAD select GENERIC_SMP_IDLE_THREAD
select GENERIC_IDLE_POLL_SETUP select GENERIC_IDLE_POLL_SETUP
select GENERIC_STRNCPY_FROM_USER select GENERIC_STRNCPY_FROM_USER

Просмотреть файл

@ -28,8 +28,8 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/sched_clock.h>
#include <asm/sched_clock.h>
#include <asm/hardware/arm_timer.h> #include <asm/hardware/arm_timer.h>
#include <asm/hardware/timer-sp.h> #include <asm/hardware/timer-sp.h>

Просмотреть файл

@ -16,7 +16,7 @@ CFLAGS_REMOVE_return_address.o = -pg
# Object file lists. # Object file lists.
obj-y := elf.o entry-armv.o entry-common.o irq.o opcodes.o \ obj-y := elf.o entry-armv.o entry-common.o irq.o opcodes.o \
process.o ptrace.o return_address.o sched_clock.o \ process.o ptrace.o return_address.o \
setup.o signal.o stacktrace.o sys_arm.o time.o traps.o setup.o signal.o stacktrace.o sys_arm.o time.o traps.o
obj-$(CONFIG_ATAGS) += atags_parse.o obj-$(CONFIG_ATAGS) += atags_parse.o

Просмотреть файл

@ -11,9 +11,9 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/sched_clock.h>
#include <asm/delay.h> #include <asm/delay.h>
#include <asm/sched_clock.h>
#include <clocksource/arm_arch_timer.h> #include <clocksource/arm_arch_timer.h>

Просмотреть файл

@ -24,9 +24,9 @@
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/clocksource.h> #include <linux/clocksource.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/sched_clock.h>
#include <asm/thread_info.h> #include <asm/thread_info.h>
#include <asm/sched_clock.h>
#include <asm/stacktrace.h> #include <asm/stacktrace.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
@ -120,6 +120,4 @@ void __init time_init(void)
machine_desc->init_time(); machine_desc->init_time();
else else
clocksource_of_init(); clocksource_of_init();
sched_clock_postinit();
} }

Просмотреть файл

@ -18,8 +18,8 @@
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/sched_clock.h>
#include <asm/sched_clock.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>

Просмотреть файл

@ -26,8 +26,8 @@
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/sched_clock.h>
#include <asm/sched_clock.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include "common.h" #include "common.h"

Просмотреть файл

@ -41,6 +41,7 @@
#include <linux/stat.h> #include <linux/stat.h>
#include <linux/sys_soc.h> #include <linux/sys_soc.h>
#include <linux/termios.h> #include <linux/termios.h>
#include <linux/sched_clock.h>
#include <video/vga.h> #include <video/vga.h>
#include <mach/hardware.h> #include <mach/hardware.h>
@ -49,7 +50,6 @@
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/param.h> /* HZ */ #include <asm/param.h> /* HZ */
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/sched_clock.h>
#include <mach/lm.h> #include <mach/lm.h>
#include <mach/irqs.h> #include <mach/irqs.h>

Просмотреть файл

@ -30,6 +30,7 @@
#include <linux/export.h> #include <linux/export.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/cpu.h> #include <linux/cpu.h>
#include <linux/sched_clock.h>
#include <mach/udc.h> #include <mach/udc.h>
#include <mach/hardware.h> #include <mach/hardware.h>
@ -38,7 +39,6 @@
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/sched_clock.h>
#include <asm/system_misc.h> #include <asm/system_misc.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>

Просмотреть файл

@ -28,8 +28,8 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/sched_clock.h>
#include <asm/sched_clock.h>
#include <mach/addr-map.h> #include <mach/addr-map.h>
#include <mach/regs-timers.h> #include <mach/regs-timers.h>
#include <mach/regs-apbc.h> #include <mach/regs-apbc.h>

Просмотреть файл

@ -23,10 +23,10 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/sched_clock.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <asm/localtimer.h> #include <asm/localtimer.h>
#include <asm/sched_clock.h>
#include "common.h" #include "common.h"

Просмотреть файл

@ -43,9 +43,9 @@
#include <linux/clocksource.h> #include <linux/clocksource.h>
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/sched_clock.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/sched_clock.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>

Просмотреть файл

@ -41,10 +41,10 @@
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/platform_data/dmtimer-omap.h> #include <linux/platform_data/dmtimer-omap.h>
#include <linux/sched_clock.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <asm/smp_twd.h> #include <asm/smp_twd.h>
#include <asm/sched_clock.h>
#include "omap_hwmod.h" #include "omap_hwmod.h"
#include "omap_device.h" #include "omap_device.h"

Просмотреть файл

@ -16,11 +16,11 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/sched_clock.h>
#include <asm/div64.h> #include <asm/div64.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <asm/sched_clock.h>
#include <mach/regs-ost.h> #include <mach/regs-ost.h>
#include <mach/irqs.h> #include <mach/irqs.h>

Просмотреть файл

@ -14,9 +14,9 @@
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/timex.h> #include <linux/timex.h>
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/sched_clock.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <asm/sched_clock.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/irqs.h> #include <mach/irqs.h>

Просмотреть файл

@ -18,12 +18,12 @@
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/sched_clock.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/irqs.h> #include <mach/irqs.h>
/* Generic stuff */ /* Generic stuff */
#include <asm/sched_clock.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>

Просмотреть файл

@ -22,9 +22,9 @@
#include <linux/clocksource.h> #include <linux/clocksource.h>
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/export.h> #include <linux/export.h>
#include <linux/sched_clock.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/sched_clock.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>

Просмотреть файл

@ -18,9 +18,9 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/clocksource.h> #include <linux/clocksource.h>
#include <linux/sched_clock.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <asm/sched_clock.h>
#include <plat/counter-32k.h> #include <plat/counter-32k.h>

Просмотреть файл

@ -16,7 +16,7 @@
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <asm/sched_clock.h> #include <linux/sched_clock.h>
/* /*
* MBus bridge block registers. * MBus bridge block registers.

Просмотреть файл

@ -15,12 +15,12 @@
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/sched_clock.h>
#include <asm/smp_twd.h> #include <asm/smp_twd.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/sched_clock.h>
#include <mach/map.h> #include <mach/map.h>
#include <plat/devs.h> #include <plat/devs.h>

Просмотреть файл

@ -20,8 +20,8 @@
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/sched_clock.h>
#include <asm/sched_clock.h>
#include <plat/sched_clock.h> #include <plat/sched_clock.h>
static void __iomem *ctr; static void __iomem *ctr;

Просмотреть файл

@ -28,8 +28,8 @@
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/sched_clock.h>
#include <asm/sched_clock.h>
#include <asm/irq.h> #include <asm/irq.h>
#define REG_CONTROL 0x00 #define REG_CONTROL 0x00

Просмотреть файл

@ -14,8 +14,7 @@
*/ */
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/clksrc-dbx500-prcmu.h> #include <linux/clksrc-dbx500-prcmu.h>
#include <linux/sched_clock.h>
#include <asm/sched_clock.h>
#define RATE_32K 32768 #define RATE_32K 32768

Просмотреть файл

@ -20,8 +20,7 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/sched_clock.h>
#include <asm/sched_clock.h>
static void timer_get_base_and_rate(struct device_node *np, static void timer_get_base_and_rate(struct device_node *np,
void __iomem **base, u32 *rate) void __iomem **base, u32 *rate)

Просмотреть файл

@ -29,9 +29,9 @@
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/stmp_device.h> #include <linux/stmp_device.h>
#include <linux/sched_clock.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <asm/sched_clock.h>
/* /*
* There are 2 versions of the timrot on Freescale MXS-based SoCs. * There are 2 versions of the timrot on Freescale MXS-based SoCs.

Просмотреть файл

@ -18,8 +18,8 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/platform_data/clocksource-nomadik-mtu.h> #include <linux/platform_data/clocksource-nomadik-mtu.h>
#include <linux/sched_clock.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <asm/sched_clock.h>
/* /*
* The MTU device hosts four different counters, with 4 set of * The MTU device hosts four different counters, with 4 set of

Просмотреть файл

@ -21,10 +21,10 @@
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/sched_clock.h>
#include <clocksource/samsung_pwm.h> #include <clocksource/samsung_pwm.h>
#include <asm/sched_clock.h>
/* /*
* Clocksource driver * Clocksource driver

Просмотреть файл

@ -26,10 +26,10 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/sched_clock.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <asm/smp_twd.h> #include <asm/smp_twd.h>
#include <asm/sched_clock.h>
#define RTC_SECONDS 0x08 #define RTC_SECONDS 0x08
#define RTC_SHADOW_SECONDS 0x0c #define RTC_SHADOW_SECONDS 0x0c

Просмотреть файл

@ -27,8 +27,8 @@
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/sched_clock.h>
#include <asm/sched_clock.h>
#include <asm/localtimer.h> #include <asm/localtimer.h>
#include <linux/percpu.h> #include <linux/percpu.h>
/* /*

Просмотреть файл

@ -17,7 +17,7 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <asm/sched_clock.h> #include <linux/sched_clock.h>
#include <asm/localtimer.h> #include <asm/localtimer.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>

Просмотреть файл

@ -18,7 +18,7 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <asm/sched_clock.h> #include <linux/sched_clock.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#define SIRFSOC_TIMER_COUNTER_LO 0x0000 #define SIRFSOC_TIMER_COUNTER_LO 0x0000

Просмотреть файл

@ -5,10 +5,15 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#ifndef ASM_SCHED_CLOCK #ifndef LINUX_SCHED_CLOCK
#define ASM_SCHED_CLOCK #define LINUX_SCHED_CLOCK
#ifdef CONFIG_GENERIC_SCHED_CLOCK
extern void sched_clock_postinit(void); extern void sched_clock_postinit(void);
#else
static inline void sched_clock_postinit(void) { }
#endif
extern void setup_sched_clock(u32 (*read)(void), int bits, unsigned long rate); extern void setup_sched_clock(u32 (*read)(void), int bits, unsigned long rate);
extern unsigned long long (*sched_clock_func)(void); extern unsigned long long (*sched_clock_func)(void);

Просмотреть файл

@ -757,6 +757,9 @@ config LOG_BUF_SHIFT
config HAVE_UNSTABLE_SCHED_CLOCK config HAVE_UNSTABLE_SCHED_CLOCK
bool bool
config GENERIC_SCHED_CLOCK
bool
# #
# For architectures that want to enable the support for NUMA-affine scheduler # For architectures that want to enable the support for NUMA-affine scheduler
# balancing logic: # balancing logic:

Просмотреть файл

@ -74,6 +74,7 @@
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/blkdev.h> #include <linux/blkdev.h>
#include <linux/elevator.h> #include <linux/elevator.h>
#include <linux/sched_clock.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/bugs.h> #include <asm/bugs.h>
@ -555,6 +556,7 @@ asmlinkage void __init start_kernel(void)
softirq_init(); softirq_init();
timekeeping_init(); timekeeping_init();
time_init(); time_init();
sched_clock_postinit();
profile_init(); profile_init();
call_function_init(); call_function_init();
WARN(!irqs_disabled(), "Interrupts were enabled early\n"); WARN(!irqs_disabled(), "Interrupts were enabled early\n");

Просмотреть файл

@ -4,6 +4,7 @@ obj-y += timeconv.o posix-clock.o alarmtimer.o
obj-$(CONFIG_GENERIC_CLOCKEVENTS_BUILD) += clockevents.o obj-$(CONFIG_GENERIC_CLOCKEVENTS_BUILD) += clockevents.o
obj-$(CONFIG_GENERIC_CLOCKEVENTS) += tick-common.o obj-$(CONFIG_GENERIC_CLOCKEVENTS) += tick-common.o
obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) += tick-broadcast.o obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) += tick-broadcast.o
obj-$(CONFIG_GENERIC_SCHED_CLOCK) += sched_clock.o
obj-$(CONFIG_TICK_ONESHOT) += tick-oneshot.o obj-$(CONFIG_TICK_ONESHOT) += tick-oneshot.o
obj-$(CONFIG_TICK_ONESHOT) += tick-sched.o obj-$(CONFIG_TICK_ONESHOT) += tick-sched.o
obj-$(CONFIG_TIMER_STATS) += timer_stats.o obj-$(CONFIG_TIMER_STATS) += timer_stats.o

Просмотреть файл

@ -13,8 +13,7 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/syscore_ops.h> #include <linux/syscore_ops.h>
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/sched_clock.h>
#include <asm/sched_clock.h>
struct clock_data { struct clock_data {
u64 epoch_ns; u64 epoch_ns;