Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Stephen Boyd and committed by
John Stultz
38ff87f7 ffbfb5e3

+45 -38
+1
arch/arm/Kconfig
··· 14 14 select GENERIC_IRQ_PROBE 15 15 select GENERIC_IRQ_SHOW 16 16 select GENERIC_PCI_IOMAP 17 + select GENERIC_SCHED_CLOCK 17 18 select GENERIC_SMP_IDLE_THREAD 18 19 select GENERIC_IDLE_POLL_SETUP 19 20 select GENERIC_STRNCPY_FROM_USER
+1 -1
arch/arm/common/timer-sp.c
··· 28 28 #include <linux/of.h> 29 29 #include <linux/of_address.h> 30 30 #include <linux/of_irq.h> 31 + #include <linux/sched_clock.h> 31 32 32 - #include <asm/sched_clock.h> 33 33 #include <asm/hardware/arm_timer.h> 34 34 #include <asm/hardware/timer-sp.h> 35 35
+7 -2
arch/arm/include/asm/sched_clock.h include/linux/sched_clock.h
··· 5 5 * it under the terms of the GNU General Public License version 2 as 6 6 * published by the Free Software Foundation. 7 7 */ 8 - #ifndef ASM_SCHED_CLOCK 9 - #define ASM_SCHED_CLOCK 8 + #ifndef LINUX_SCHED_CLOCK 9 + #define LINUX_SCHED_CLOCK 10 10 11 + #ifdef CONFIG_GENERIC_SCHED_CLOCK 11 12 extern void sched_clock_postinit(void); 13 + #else 14 + static inline void sched_clock_postinit(void) { } 15 + #endif 16 + 12 17 extern void setup_sched_clock(u32 (*read)(void), int bits, unsigned long rate); 13 18 14 19 extern unsigned long long (*sched_clock_func)(void);
+1 -1
arch/arm/kernel/Makefile
··· 16 16 # Object file lists. 17 17 18 18 obj-y := elf.o entry-armv.o entry-common.o irq.o opcodes.o \ 19 - process.o ptrace.o return_address.o sched_clock.o \ 19 + process.o ptrace.o return_address.o \ 20 20 setup.o signal.o stacktrace.o sys_arm.o time.o traps.o 21 21 22 22 obj-$(CONFIG_ATAGS) += atags_parse.o
+1 -1
arch/arm/kernel/arch_timer.c
··· 11 11 #include <linux/init.h> 12 12 #include <linux/types.h> 13 13 #include <linux/errno.h> 14 + #include <linux/sched_clock.h> 14 15 15 16 #include <asm/delay.h> 16 - #include <asm/sched_clock.h> 17 17 18 18 #include <clocksource/arm_arch_timer.h> 19 19
+1 -2
arch/arm/kernel/sched_clock.c kernel/time/sched_clock.c
··· 13 13 #include <linux/sched.h> 14 14 #include <linux/syscore_ops.h> 15 15 #include <linux/timer.h> 16 - 17 - #include <asm/sched_clock.h> 16 + #include <linux/sched_clock.h> 18 17 19 18 struct clock_data { 20 19 u64 epoch_ns;
+1 -3
arch/arm/kernel/time.c
··· 24 24 #include <linux/timer.h> 25 25 #include <linux/clocksource.h> 26 26 #include <linux/irq.h> 27 + #include <linux/sched_clock.h> 27 28 28 29 #include <asm/thread_info.h> 29 - #include <asm/sched_clock.h> 30 30 #include <asm/stacktrace.h> 31 31 #include <asm/mach/arch.h> 32 32 #include <asm/mach/time.h> ··· 120 120 machine_desc->init_time(); 121 121 else 122 122 clocksource_of_init(); 123 - 124 - sched_clock_postinit(); 125 123 }
+1 -1
arch/arm/mach-davinci/time.c
··· 18 18 #include <linux/clk.h> 19 19 #include <linux/err.h> 20 20 #include <linux/platform_device.h> 21 + #include <linux/sched_clock.h> 21 22 22 - #include <asm/sched_clock.h> 23 23 #include <asm/mach/irq.h> 24 24 #include <asm/mach/time.h> 25 25
+1 -1
arch/arm/mach-imx/time.c
··· 26 26 #include <linux/clockchips.h> 27 27 #include <linux/clk.h> 28 28 #include <linux/err.h> 29 + #include <linux/sched_clock.h> 29 30 30 - #include <asm/sched_clock.h> 31 31 #include <asm/mach/time.h> 32 32 33 33 #include "common.h"
+1 -1
arch/arm/mach-integrator/integrator_ap.c
··· 41 41 #include <linux/stat.h> 42 42 #include <linux/sys_soc.h> 43 43 #include <linux/termios.h> 44 + #include <linux/sched_clock.h> 44 45 #include <video/vga.h> 45 46 46 47 #include <mach/hardware.h> ··· 50 49 #include <asm/setup.h> 51 50 #include <asm/param.h> /* HZ */ 52 51 #include <asm/mach-types.h> 53 - #include <asm/sched_clock.h> 54 52 55 53 #include <mach/lm.h> 56 54 #include <mach/irqs.h>
+1 -1
arch/arm/mach-ixp4xx/common.c
··· 30 30 #include <linux/export.h> 31 31 #include <linux/gpio.h> 32 32 #include <linux/cpu.h> 33 + #include <linux/sched_clock.h> 33 34 34 35 #include <mach/udc.h> 35 36 #include <mach/hardware.h> ··· 39 38 #include <asm/pgtable.h> 40 39 #include <asm/page.h> 41 40 #include <asm/irq.h> 42 - #include <asm/sched_clock.h> 43 41 #include <asm/system_misc.h> 44 42 45 43 #include <asm/mach/map.h>
+1 -1
arch/arm/mach-mmp/time.c
··· 28 28 #include <linux/of.h> 29 29 #include <linux/of_address.h> 30 30 #include <linux/of_irq.h> 31 + #include <linux/sched_clock.h> 31 32 32 - #include <asm/sched_clock.h> 33 33 #include <mach/addr-map.h> 34 34 #include <mach/regs-timers.h> 35 35 #include <mach/regs-apbc.h>
+1 -1
arch/arm/mach-msm/timer.c
··· 23 23 #include <linux/of.h> 24 24 #include <linux/of_address.h> 25 25 #include <linux/of_irq.h> 26 + #include <linux/sched_clock.h> 26 27 27 28 #include <asm/mach/time.h> 28 29 #include <asm/localtimer.h> 29 - #include <asm/sched_clock.h> 30 30 31 31 #include "common.h" 32 32
+1 -1
arch/arm/mach-omap1/time.c
··· 43 43 #include <linux/clocksource.h> 44 44 #include <linux/clockchips.h> 45 45 #include <linux/io.h> 46 + #include <linux/sched_clock.h> 46 47 47 48 #include <asm/irq.h> 48 - #include <asm/sched_clock.h> 49 49 50 50 #include <mach/hardware.h> 51 51 #include <asm/mach/irq.h>
+1 -1
arch/arm/mach-omap2/timer.c
··· 41 41 #include <linux/of_irq.h> 42 42 #include <linux/platform_device.h> 43 43 #include <linux/platform_data/dmtimer-omap.h> 44 + #include <linux/sched_clock.h> 44 45 45 46 #include <asm/mach/time.h> 46 47 #include <asm/smp_twd.h> 47 - #include <asm/sched_clock.h> 48 48 49 49 #include "omap_hwmod.h" 50 50 #include "omap_device.h"
+1 -1
arch/arm/mach-pxa/time.c
··· 16 16 #include <linux/init.h> 17 17 #include <linux/interrupt.h> 18 18 #include <linux/clockchips.h> 19 + #include <linux/sched_clock.h> 19 20 20 21 #include <asm/div64.h> 21 22 #include <asm/mach/irq.h> 22 23 #include <asm/mach/time.h> 23 - #include <asm/sched_clock.h> 24 24 #include <mach/regs-ost.h> 25 25 #include <mach/irqs.h> 26 26
+1 -1
arch/arm/mach-sa1100/time.c
··· 14 14 #include <linux/irq.h> 15 15 #include <linux/timex.h> 16 16 #include <linux/clockchips.h> 17 + #include <linux/sched_clock.h> 17 18 18 19 #include <asm/mach/time.h> 19 - #include <asm/sched_clock.h> 20 20 #include <mach/hardware.h> 21 21 #include <mach/irqs.h> 22 22
+1 -1
arch/arm/mach-u300/timer.c
··· 18 18 #include <linux/clk.h> 19 19 #include <linux/err.h> 20 20 #include <linux/irq.h> 21 + #include <linux/sched_clock.h> 21 22 22 23 #include <mach/hardware.h> 23 24 #include <mach/irqs.h> 24 25 25 26 /* Generic stuff */ 26 - #include <asm/sched_clock.h> 27 27 #include <asm/mach/map.h> 28 28 #include <asm/mach/time.h> 29 29
+1 -1
arch/arm/plat-iop/time.c
··· 22 22 #include <linux/clocksource.h> 23 23 #include <linux/clockchips.h> 24 24 #include <linux/export.h> 25 + #include <linux/sched_clock.h> 25 26 #include <mach/hardware.h> 26 27 #include <asm/irq.h> 27 - #include <asm/sched_clock.h> 28 28 #include <asm/uaccess.h> 29 29 #include <asm/mach/irq.h> 30 30 #include <asm/mach/time.h>
+1 -1
arch/arm/plat-omap/counter_32k.c
··· 18 18 #include <linux/err.h> 19 19 #include <linux/io.h> 20 20 #include <linux/clocksource.h> 21 + #include <linux/sched_clock.h> 21 22 22 23 #include <asm/mach/time.h> 23 - #include <asm/sched_clock.h> 24 24 25 25 #include <plat/counter-32k.h> 26 26
+1 -1
arch/arm/plat-orion/time.c
··· 16 16 #include <linux/clockchips.h> 17 17 #include <linux/interrupt.h> 18 18 #include <linux/irq.h> 19 - #include <asm/sched_clock.h> 19 + #include <linux/sched_clock.h> 20 20 21 21 /* 22 22 * MBus bridge block registers.
+1 -1
arch/arm/plat-samsung/samsung-time.c
··· 15 15 #include <linux/clk.h> 16 16 #include <linux/clockchips.h> 17 17 #include <linux/platform_device.h> 18 + #include <linux/sched_clock.h> 18 19 19 20 #include <asm/smp_twd.h> 20 21 #include <asm/mach/time.h> 21 22 #include <asm/mach/arch.h> 22 23 #include <asm/mach/map.h> 23 - #include <asm/sched_clock.h> 24 24 25 25 #include <mach/map.h> 26 26 #include <plat/devs.h>
+1 -1
arch/arm/plat-versatile/sched-clock.c
··· 20 20 */ 21 21 #include <linux/kernel.h> 22 22 #include <linux/io.h> 23 + #include <linux/sched_clock.h> 23 24 24 - #include <asm/sched_clock.h> 25 25 #include <plat/sched_clock.h> 26 26 27 27 static void __iomem *ctr;
+1 -1
drivers/clocksource/bcm2835_timer.c
··· 28 28 #include <linux/of_platform.h> 29 29 #include <linux/slab.h> 30 30 #include <linux/string.h> 31 + #include <linux/sched_clock.h> 31 32 32 - #include <asm/sched_clock.h> 33 33 #include <asm/irq.h> 34 34 35 35 #define REG_CONTROL 0x00
+1 -2
drivers/clocksource/clksrc-dbx500-prcmu.c
··· 14 14 */ 15 15 #include <linux/clockchips.h> 16 16 #include <linux/clksrc-dbx500-prcmu.h> 17 - 18 - #include <asm/sched_clock.h> 17 + #include <linux/sched_clock.h> 19 18 20 19 #define RATE_32K 32768 21 20
+1 -2
drivers/clocksource/dw_apb_timer_of.c
··· 20 20 #include <linux/of.h> 21 21 #include <linux/of_address.h> 22 22 #include <linux/of_irq.h> 23 - 24 - #include <asm/sched_clock.h> 23 + #include <linux/sched_clock.h> 25 24 26 25 static void timer_get_base_and_rate(struct device_node *np, 27 26 void __iomem **base, u32 *rate)
+1 -1
drivers/clocksource/mxs_timer.c
··· 29 29 #include <linux/of_address.h> 30 30 #include <linux/of_irq.h> 31 31 #include <linux/stmp_device.h> 32 + #include <linux/sched_clock.h> 32 33 33 34 #include <asm/mach/time.h> 34 - #include <asm/sched_clock.h> 35 35 36 36 /* 37 37 * There are 2 versions of the timrot on Freescale MXS-based SoCs.
+1 -1
drivers/clocksource/nomadik-mtu.c
··· 18 18 #include <linux/delay.h> 19 19 #include <linux/err.h> 20 20 #include <linux/platform_data/clocksource-nomadik-mtu.h> 21 + #include <linux/sched_clock.h> 21 22 #include <asm/mach/time.h> 22 - #include <asm/sched_clock.h> 23 23 24 24 /* 25 25 * The MTU device hosts four different counters, with 4 set of
+1 -1
drivers/clocksource/samsung_pwm_timer.c
··· 21 21 #include <linux/of_irq.h> 22 22 #include <linux/platform_device.h> 23 23 #include <linux/slab.h> 24 + #include <linux/sched_clock.h> 24 25 25 26 #include <clocksource/samsung_pwm.h> 26 27 27 - #include <asm/sched_clock.h> 28 28 29 29 /* 30 30 * Clocksource driver
+1 -1
drivers/clocksource/tegra20_timer.c
··· 26 26 #include <linux/io.h> 27 27 #include <linux/of_address.h> 28 28 #include <linux/of_irq.h> 29 + #include <linux/sched_clock.h> 29 30 30 31 #include <asm/mach/time.h> 31 32 #include <asm/smp_twd.h> 32 - #include <asm/sched_clock.h> 33 33 34 34 #define RTC_SECONDS 0x08 35 35 #define RTC_SHADOW_SECONDS 0x0c
+1 -1
drivers/clocksource/time-armada-370-xp.c
··· 27 27 #include <linux/of_address.h> 28 28 #include <linux/irq.h> 29 29 #include <linux/module.h> 30 + #include <linux/sched_clock.h> 30 31 31 - #include <asm/sched_clock.h> 32 32 #include <asm/localtimer.h> 33 33 #include <linux/percpu.h> 34 34 /*
+1 -1
drivers/clocksource/timer-marco.c
··· 17 17 #include <linux/of.h> 18 18 #include <linux/of_irq.h> 19 19 #include <linux/of_address.h> 20 - #include <asm/sched_clock.h> 20 + #include <linux/sched_clock.h> 21 21 #include <asm/localtimer.h> 22 22 #include <asm/mach/time.h> 23 23
+1 -1
drivers/clocksource/timer-prima2.c
··· 18 18 #include <linux/of.h> 19 19 #include <linux/of_irq.h> 20 20 #include <linux/of_address.h> 21 - #include <asm/sched_clock.h> 21 + #include <linux/sched_clock.h> 22 22 #include <asm/mach/time.h> 23 23 24 24 #define SIRFSOC_TIMER_COUNTER_LO 0x0000
+3
init/Kconfig
··· 757 757 config HAVE_UNSTABLE_SCHED_CLOCK 758 758 bool 759 759 760 + config GENERIC_SCHED_CLOCK 761 + bool 762 + 760 763 # 761 764 # For architectures that want to enable the support for NUMA-affine scheduler 762 765 # balancing logic:
+2
init/main.c
··· 74 74 #include <linux/ptrace.h> 75 75 #include <linux/blkdev.h> 76 76 #include <linux/elevator.h> 77 + #include <linux/sched_clock.h> 77 78 78 79 #include <asm/io.h> 79 80 #include <asm/bugs.h> ··· 556 555 softirq_init(); 557 556 timekeeping_init(); 558 557 time_init(); 558 + sched_clock_postinit(); 559 559 profile_init(); 560 560 call_function_init(); 561 561 WARN(!irqs_disabled(), "Interrupts were enabled early\n");
+1
kernel/time/Makefile
··· 4 4 obj-$(CONFIG_GENERIC_CLOCKEVENTS_BUILD) += clockevents.o 5 5 obj-$(CONFIG_GENERIC_CLOCKEVENTS) += tick-common.o 6 6 obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) += tick-broadcast.o 7 + obj-$(CONFIG_GENERIC_SCHED_CLOCK) += sched_clock.o 7 8 obj-$(CONFIG_TICK_ONESHOT) += tick-oneshot.o 8 9 obj-$(CONFIG_TICK_ONESHOT) += tick-sched.o 9 10 obj-$(CONFIG_TIMER_STATS) += timer_stats.o