diff options
author | Magnus Damm <damm@igel.co.jp> | 2009-04-21 15:24:00 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-21 16:41:47 -0400 |
commit | 8e19608e8b5c001e4a66ce482edc474f05fb7355 (patch) | |
tree | 06af4be339136da7476396604c30112238d84339 | |
parent | ff14ed5db6e7e5e5dc23712d3c877891d4d9a1a8 (diff) |
clocksource: pass clocksource to read() callback
Pass clocksource pointer to the read() callback for clocksources. This
allows us to share the callback between multiple instances.
[hugh@veritas.com: fix powerpc build of clocksource pass clocksource mods]
[akpm@linux-foundation.org: cleanup]
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Acked-by: John Stultz <johnstul@us.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
54 files changed, 94 insertions, 79 deletions
diff --git a/arch/arm/mach-at91/at91rm9200_time.c b/arch/arm/mach-at91/at91rm9200_time.c index 1ff1bda0a894..309f3511aa20 100644 --- a/arch/arm/mach-at91/at91rm9200_time.c +++ b/arch/arm/mach-at91/at91rm9200_time.c | |||
@@ -85,7 +85,7 @@ static struct irqaction at91rm9200_timer_irq = { | |||
85 | .handler = at91rm9200_timer_interrupt | 85 | .handler = at91rm9200_timer_interrupt |
86 | }; | 86 | }; |
87 | 87 | ||
88 | static cycle_t read_clk32k(void) | 88 | static cycle_t read_clk32k(struct clocksource *cs) |
89 | { | 89 | { |
90 | return read_CRTR(); | 90 | return read_CRTR(); |
91 | } | 91 | } |
diff --git a/arch/arm/mach-at91/at91sam926x_time.c b/arch/arm/mach-at91/at91sam926x_time.c index b63e1d5f1bad..4bd56aee4370 100644 --- a/arch/arm/mach-at91/at91sam926x_time.c +++ b/arch/arm/mach-at91/at91sam926x_time.c | |||
@@ -31,7 +31,7 @@ static u32 pit_cnt; /* access only w/system irq blocked */ | |||
31 | * Clocksource: just a monotonic counter of MCK/16 cycles. | 31 | * Clocksource: just a monotonic counter of MCK/16 cycles. |
32 | * We don't care whether or not PIT irqs are enabled. | 32 | * We don't care whether or not PIT irqs are enabled. |
33 | */ | 33 | */ |
34 | static cycle_t read_pit_clk(void) | 34 | static cycle_t read_pit_clk(struct clocksource *cs) |
35 | { | 35 | { |
36 | unsigned long flags; | 36 | unsigned long flags; |
37 | u32 elapsed; | 37 | u32 elapsed; |
diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c index f8bcd29d17a6..6c227d4ba998 100644 --- a/arch/arm/mach-davinci/time.c +++ b/arch/arm/mach-davinci/time.c | |||
@@ -238,7 +238,7 @@ static void __init timer_init(void) | |||
238 | /* | 238 | /* |
239 | * clocksource | 239 | * clocksource |
240 | */ | 240 | */ |
241 | static cycle_t read_cycles(void) | 241 | static cycle_t read_cycles(struct clocksource *cs) |
242 | { | 242 | { |
243 | struct timer_s *t = &timers[TID_CLOCKSOURCE]; | 243 | struct timer_s *t = &timers[TID_CLOCKSOURCE]; |
244 | 244 | ||
diff --git a/arch/arm/mach-imx/time.c b/arch/arm/mach-imx/time.c index aff0ebcfa847..5aef18b599e5 100644 --- a/arch/arm/mach-imx/time.c +++ b/arch/arm/mach-imx/time.c | |||
@@ -73,7 +73,7 @@ static void __init imx_timer_hardware_init(void) | |||
73 | IMX_TCTL(TIMER_BASE) = TCTL_FRR | TCTL_CLK_PCLK1 | TCTL_TEN; | 73 | IMX_TCTL(TIMER_BASE) = TCTL_FRR | TCTL_CLK_PCLK1 | TCTL_TEN; |
74 | } | 74 | } |
75 | 75 | ||
76 | cycle_t imx_get_cycles(void) | 76 | cycle_t imx_get_cycles(struct clocksource *cs) |
77 | { | 77 | { |
78 | return IMX_TCN(TIMER_BASE); | 78 | return IMX_TCN(TIMER_BASE); |
79 | } | 79 | } |
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index f4656d2ac8a8..1e93dfee7543 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c | |||
@@ -401,7 +401,7 @@ void __init ixp4xx_sys_init(void) | |||
401 | /* | 401 | /* |
402 | * clocksource | 402 | * clocksource |
403 | */ | 403 | */ |
404 | cycle_t ixp4xx_get_cycles(void) | 404 | cycle_t ixp4xx_get_cycles(struct clocksource *cs) |
405 | { | 405 | { |
406 | return *IXP4XX_OSTS; | 406 | return *IXP4XX_OSTS; |
407 | } | 407 | } |
diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c index 444d9c0f5ca6..4855b8ca5101 100644 --- a/arch/arm/mach-msm/timer.c +++ b/arch/arm/mach-msm/timer.c | |||
@@ -57,12 +57,12 @@ static irqreturn_t msm_timer_interrupt(int irq, void *dev_id) | |||
57 | return IRQ_HANDLED; | 57 | return IRQ_HANDLED; |
58 | } | 58 | } |
59 | 59 | ||
60 | static cycle_t msm_gpt_read(void) | 60 | static cycle_t msm_gpt_read(struct clocksource *cs) |
61 | { | 61 | { |
62 | return readl(MSM_GPT_BASE + TIMER_COUNT_VAL); | 62 | return readl(MSM_GPT_BASE + TIMER_COUNT_VAL); |
63 | } | 63 | } |
64 | 64 | ||
65 | static cycle_t msm_dgt_read(void) | 65 | static cycle_t msm_dgt_read(struct clocksource *cs) |
66 | { | 66 | { |
67 | return readl(MSM_DGT_BASE + TIMER_COUNT_VAL) >> MSM_DGT_SHIFT; | 67 | return readl(MSM_DGT_BASE + TIMER_COUNT_VAL) >> MSM_DGT_SHIFT; |
68 | } | 68 | } |
diff --git a/arch/arm/mach-netx/time.c b/arch/arm/mach-netx/time.c index f201fddb594f..82801dbf0579 100644 --- a/arch/arm/mach-netx/time.c +++ b/arch/arm/mach-netx/time.c | |||
@@ -104,7 +104,7 @@ static struct irqaction netx_timer_irq = { | |||
104 | .handler = netx_timer_interrupt, | 104 | .handler = netx_timer_interrupt, |
105 | }; | 105 | }; |
106 | 106 | ||
107 | cycle_t netx_get_cycles(void) | 107 | cycle_t netx_get_cycles(struct clocksource *cs) |
108 | { | 108 | { |
109 | return readl(NETX_GPIO_COUNTER_CURRENT(TIMER_CLOCKSOURCE)); | 109 | return readl(NETX_GPIO_COUNTER_CURRENT(TIMER_CLOCKSOURCE)); |
110 | } | 110 | } |
diff --git a/arch/arm/mach-ns9xxx/time-ns9360.c b/arch/arm/mach-ns9xxx/time-ns9360.c index 41df69721769..77281260358a 100644 --- a/arch/arm/mach-ns9xxx/time-ns9360.c +++ b/arch/arm/mach-ns9xxx/time-ns9360.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #define TIMER_CLOCKEVENT 1 | 25 | #define TIMER_CLOCKEVENT 1 |
26 | static u32 latch; | 26 | static u32 latch; |
27 | 27 | ||
28 | static cycle_t ns9360_clocksource_read(void) | 28 | static cycle_t ns9360_clocksource_read(struct clocksource *cs) |
29 | { | 29 | { |
30 | return __raw_readl(SYS_TR(TIMER_CLOCKSOURCE)); | 30 | return __raw_readl(SYS_TR(TIMER_CLOCKSOURCE)); |
31 | } | 31 | } |
diff --git a/arch/arm/mach-omap1/time.c b/arch/arm/mach-omap1/time.c index 495a32c287b4..4d56408d3cff 100644 --- a/arch/arm/mach-omap1/time.c +++ b/arch/arm/mach-omap1/time.c | |||
@@ -198,7 +198,7 @@ static struct irqaction omap_mpu_timer2_irq = { | |||
198 | .handler = omap_mpu_timer2_interrupt, | 198 | .handler = omap_mpu_timer2_interrupt, |
199 | }; | 199 | }; |
200 | 200 | ||
201 | static cycle_t mpu_read(void) | 201 | static cycle_t mpu_read(struct clocksource *cs) |
202 | { | 202 | { |
203 | return ~omap_mpu_timer_read(1); | 203 | return ~omap_mpu_timer_read(1); |
204 | } | 204 | } |
diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c index 9fc13a2cc3f4..1cb2c0909c2b 100644 --- a/arch/arm/mach-omap2/timer-gp.c +++ b/arch/arm/mach-omap2/timer-gp.c | |||
@@ -138,7 +138,7 @@ static inline void __init omap2_gp_clocksource_init(void) {} | |||
138 | * clocksource | 138 | * clocksource |
139 | */ | 139 | */ |
140 | static struct omap_dm_timer *gpt_clocksource; | 140 | static struct omap_dm_timer *gpt_clocksource; |
141 | static cycle_t clocksource_read_cycles(void) | 141 | static cycle_t clocksource_read_cycles(struct clocksource *cs) |
142 | { | 142 | { |
143 | return (cycle_t)omap_dm_timer_read_counter(gpt_clocksource); | 143 | return (cycle_t)omap_dm_timer_read_counter(gpt_clocksource); |
144 | } | 144 | } |
diff --git a/arch/arm/mach-pxa/time.c b/arch/arm/mach-pxa/time.c index 8eb3830fbb0b..750c448db672 100644 --- a/arch/arm/mach-pxa/time.c +++ b/arch/arm/mach-pxa/time.c | |||
@@ -125,7 +125,7 @@ static struct clock_event_device ckevt_pxa_osmr0 = { | |||
125 | .set_mode = pxa_osmr0_set_mode, | 125 | .set_mode = pxa_osmr0_set_mode, |
126 | }; | 126 | }; |
127 | 127 | ||
128 | static cycle_t pxa_read_oscr(void) | 128 | static cycle_t pxa_read_oscr(struct clocksource *cs) |
129 | { | 129 | { |
130 | return OSCR; | 130 | return OSCR; |
131 | } | 131 | } |
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c index 9ab947c14f26..942e1a7eb9b2 100644 --- a/arch/arm/mach-realview/core.c +++ b/arch/arm/mach-realview/core.c | |||
@@ -715,7 +715,7 @@ static struct irqaction realview_timer_irq = { | |||
715 | .handler = realview_timer_interrupt, | 715 | .handler = realview_timer_interrupt, |
716 | }; | 716 | }; |
717 | 717 | ||
718 | static cycle_t realview_get_cycles(void) | 718 | static cycle_t realview_get_cycles(struct clocksource *cs) |
719 | { | 719 | { |
720 | return ~readl(timer3_va_base + TIMER_VALUE); | 720 | return ~readl(timer3_va_base + TIMER_VALUE); |
721 | } | 721 | } |
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index 565776680d8c..1f929c391af7 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c | |||
@@ -948,7 +948,7 @@ static struct irqaction versatile_timer_irq = { | |||
948 | .handler = versatile_timer_interrupt, | 948 | .handler = versatile_timer_interrupt, |
949 | }; | 949 | }; |
950 | 950 | ||
951 | static cycle_t versatile_get_cycles(void) | 951 | static cycle_t versatile_get_cycles(struct clocksource *cs) |
952 | { | 952 | { |
953 | return ~readl(TIMER3_VA_BASE + TIMER_VALUE); | 953 | return ~readl(TIMER3_VA_BASE + TIMER_VALUE); |
954 | } | 954 | } |
diff --git a/arch/arm/plat-mxc/time.c b/arch/arm/plat-mxc/time.c index ef1b3cd85bd3..dab3357196fb 100644 --- a/arch/arm/plat-mxc/time.c +++ b/arch/arm/plat-mxc/time.c | |||
@@ -36,7 +36,7 @@ static enum clock_event_mode clockevent_mode = CLOCK_EVT_MODE_UNUSED; | |||
36 | 36 | ||
37 | /* clock source */ | 37 | /* clock source */ |
38 | 38 | ||
39 | static cycle_t mxc_get_cycles(void) | 39 | static cycle_t mxc_get_cycles(struct clocksource *cs) |
40 | { | 40 | { |
41 | return __raw_readl(TIMER_BASE + MXC_TCN); | 41 | return __raw_readl(TIMER_BASE + MXC_TCN); |
42 | } | 42 | } |
diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c index d1797147732f..433021f3d7cc 100644 --- a/arch/arm/plat-omap/common.c +++ b/arch/arm/plat-omap/common.c | |||
@@ -185,7 +185,7 @@ console_initcall(omap_add_serial_console); | |||
185 | 185 | ||
186 | #include <linux/clocksource.h> | 186 | #include <linux/clocksource.h> |
187 | 187 | ||
188 | static cycle_t omap_32k_read(void) | 188 | static cycle_t omap_32k_read(struct clocksource *cs) |
189 | { | 189 | { |
190 | return omap_readl(TIMER_32K_SYNCHRONIZED); | 190 | return omap_readl(TIMER_32K_SYNCHRONIZED); |
191 | } | 191 | } |
@@ -207,7 +207,7 @@ unsigned long long sched_clock(void) | |||
207 | { | 207 | { |
208 | unsigned long long ret; | 208 | unsigned long long ret; |
209 | 209 | ||
210 | ret = (unsigned long long)omap_32k_read(); | 210 | ret = (unsigned long long)omap_32k_read(&clocksource_32k); |
211 | ret = (ret * clocksource_32k.mult_orig) >> clocksource_32k.shift; | 211 | ret = (ret * clocksource_32k.mult_orig) >> clocksource_32k.shift; |
212 | return ret; | 212 | return ret; |
213 | } | 213 | } |
diff --git a/arch/arm/plat-orion/time.c b/arch/arm/plat-orion/time.c index 6fa2923e6dca..2faf9dba4ef7 100644 --- a/arch/arm/plat-orion/time.c +++ b/arch/arm/plat-orion/time.c | |||
@@ -41,7 +41,7 @@ static u32 ticks_per_jiffy; | |||
41 | /* | 41 | /* |
42 | * Clocksource handling. | 42 | * Clocksource handling. |
43 | */ | 43 | */ |
44 | static cycle_t orion_clksrc_read(void) | 44 | static cycle_t orion_clksrc_read(struct clocksource *cs) |
45 | { | 45 | { |
46 | return 0xffffffff - readl(TIMER0_VAL); | 46 | return 0xffffffff - readl(TIMER0_VAL); |
47 | } | 47 | } |
diff --git a/arch/avr32/kernel/time.c b/arch/avr32/kernel/time.c index 0ff46bf873b0..f27aa3b259fa 100644 --- a/arch/avr32/kernel/time.c +++ b/arch/avr32/kernel/time.c | |||
@@ -18,7 +18,7 @@ | |||
18 | #include <mach/pm.h> | 18 | #include <mach/pm.h> |
19 | 19 | ||
20 | 20 | ||
21 | static cycle_t read_cycle_count(void) | 21 | static cycle_t read_cycle_count(struct clocksource *cs) |
22 | { | 22 | { |
23 | return (cycle_t)sysreg_read(COUNT); | 23 | return (cycle_t)sysreg_read(COUNT); |
24 | } | 24 | } |
diff --git a/arch/blackfin/kernel/time-ts.c b/arch/blackfin/kernel/time-ts.c index 0ed2badfd746..27646121280a 100644 --- a/arch/blackfin/kernel/time-ts.c +++ b/arch/blackfin/kernel/time-ts.c | |||
@@ -58,16 +58,11 @@ static inline unsigned long long cycles_2_ns(cycle_t cyc) | |||
58 | return (cyc * cyc2ns_scale) >> CYC2NS_SCALE_FACTOR; | 58 | return (cyc * cyc2ns_scale) >> CYC2NS_SCALE_FACTOR; |
59 | } | 59 | } |
60 | 60 | ||
61 | static cycle_t read_cycles(void) | 61 | static cycle_t read_cycles(struct clocksource *cs) |
62 | { | 62 | { |
63 | return __bfin_cycles_off + (get_cycles() << __bfin_cycles_mod); | 63 | return __bfin_cycles_off + (get_cycles() << __bfin_cycles_mod); |
64 | } | 64 | } |
65 | 65 | ||
66 | unsigned long long sched_clock(void) | ||
67 | { | ||
68 | return cycles_2_ns(read_cycles()); | ||
69 | } | ||
70 | |||
71 | static struct clocksource clocksource_bfin = { | 66 | static struct clocksource clocksource_bfin = { |
72 | .name = "bfin_cycles", | 67 | .name = "bfin_cycles", |
73 | .rating = 350, | 68 | .rating = 350, |
@@ -77,6 +72,11 @@ static struct clocksource clocksource_bfin = { | |||
77 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 72 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
78 | }; | 73 | }; |
79 | 74 | ||
75 | unsigned long long sched_clock(void) | ||
76 | { | ||
77 | return cycles_2_ns(read_cycles(&clocksource_bfin)); | ||
78 | } | ||
79 | |||
80 | static int __init bfin_clocksource_init(void) | 80 | static int __init bfin_clocksource_init(void) |
81 | { | 81 | { |
82 | set_cyc2ns_scale(get_cclk() / 1000); | 82 | set_cyc2ns_scale(get_cclk() / 1000); |
diff --git a/arch/ia64/kernel/cyclone.c b/arch/ia64/kernel/cyclone.c index 790ef0d87e12..71e35864d2e2 100644 --- a/arch/ia64/kernel/cyclone.c +++ b/arch/ia64/kernel/cyclone.c | |||
@@ -21,7 +21,7 @@ void __init cyclone_setup(void) | |||
21 | 21 | ||
22 | static void __iomem *cyclone_mc; | 22 | static void __iomem *cyclone_mc; |
23 | 23 | ||
24 | static cycle_t read_cyclone(void) | 24 | static cycle_t read_cyclone(struct clocksource *cs) |
25 | { | 25 | { |
26 | return (cycle_t)readq((void __iomem *)cyclone_mc); | 26 | return (cycle_t)readq((void __iomem *)cyclone_mc); |
27 | } | 27 | } |
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c index 641c8b61c4f1..604c1a35db33 100644 --- a/arch/ia64/kernel/time.c +++ b/arch/ia64/kernel/time.c | |||
@@ -33,7 +33,7 @@ | |||
33 | 33 | ||
34 | #include "fsyscall_gtod_data.h" | 34 | #include "fsyscall_gtod_data.h" |
35 | 35 | ||
36 | static cycle_t itc_get_cycles(void); | 36 | static cycle_t itc_get_cycles(struct clocksource *cs); |
37 | 37 | ||
38 | struct fsyscall_gtod_data_t fsyscall_gtod_data = { | 38 | struct fsyscall_gtod_data_t fsyscall_gtod_data = { |
39 | .lock = SEQLOCK_UNLOCKED, | 39 | .lock = SEQLOCK_UNLOCKED, |
@@ -383,7 +383,7 @@ ia64_init_itm (void) | |||
383 | } | 383 | } |
384 | } | 384 | } |
385 | 385 | ||
386 | static cycle_t itc_get_cycles(void) | 386 | static cycle_t itc_get_cycles(struct clocksource *cs) |
387 | { | 387 | { |
388 | u64 lcycle, now, ret; | 388 | u64 lcycle, now, ret; |
389 | 389 | ||
diff --git a/arch/ia64/sn/kernel/sn2/timer.c b/arch/ia64/sn/kernel/sn2/timer.c index cf67fc562054..21d6f09e3447 100644 --- a/arch/ia64/sn/kernel/sn2/timer.c +++ b/arch/ia64/sn/kernel/sn2/timer.c | |||
@@ -23,7 +23,7 @@ | |||
23 | 23 | ||
24 | extern unsigned long sn_rtc_cycles_per_second; | 24 | extern unsigned long sn_rtc_cycles_per_second; |
25 | 25 | ||
26 | static cycle_t read_sn2(void) | 26 | static cycle_t read_sn2(struct clocksource *cs) |
27 | { | 27 | { |
28 | return (cycle_t)readq(RTC_COUNTER_ADDR); | 28 | return (cycle_t)readq(RTC_COUNTER_ADDR); |
29 | } | 29 | } |
diff --git a/arch/m68knommu/platform/68328/timers.c b/arch/m68knommu/platform/68328/timers.c index 6bafefa546e5..309f725995bf 100644 --- a/arch/m68knommu/platform/68328/timers.c +++ b/arch/m68knommu/platform/68328/timers.c | |||
@@ -75,7 +75,7 @@ static struct irqaction m68328_timer_irq = { | |||
75 | 75 | ||
76 | /***************************************************************************/ | 76 | /***************************************************************************/ |
77 | 77 | ||
78 | static cycle_t m68328_read_clk(void) | 78 | static cycle_t m68328_read_clk(struct clocksource *cs) |
79 | { | 79 | { |
80 | unsigned long flags; | 80 | unsigned long flags; |
81 | u32 cycles; | 81 | u32 cycles; |
diff --git a/arch/m68knommu/platform/coldfire/dma_timer.c b/arch/m68knommu/platform/coldfire/dma_timer.c index 772578b1084f..a5f562823d7a 100644 --- a/arch/m68knommu/platform/coldfire/dma_timer.c +++ b/arch/m68knommu/platform/coldfire/dma_timer.c | |||
@@ -34,7 +34,7 @@ | |||
34 | #define DMA_DTMR_CLK_DIV_16 (2 << 1) | 34 | #define DMA_DTMR_CLK_DIV_16 (2 << 1) |
35 | #define DMA_DTMR_ENABLE (1 << 0) | 35 | #define DMA_DTMR_ENABLE (1 << 0) |
36 | 36 | ||
37 | static cycle_t cf_dt_get_cycles(void) | 37 | static cycle_t cf_dt_get_cycles(struct clocksource *cs) |
38 | { | 38 | { |
39 | return __raw_readl(DTCN0); | 39 | return __raw_readl(DTCN0); |
40 | } | 40 | } |
diff --git a/arch/m68knommu/platform/coldfire/pit.c b/arch/m68knommu/platform/coldfire/pit.c index 2a12e7fa9748..61b96211f8ff 100644 --- a/arch/m68knommu/platform/coldfire/pit.c +++ b/arch/m68knommu/platform/coldfire/pit.c | |||
@@ -125,7 +125,7 @@ static struct irqaction pit_irq = { | |||
125 | 125 | ||
126 | /***************************************************************************/ | 126 | /***************************************************************************/ |
127 | 127 | ||
128 | static cycle_t pit_read_clk(void) | 128 | static cycle_t pit_read_clk(struct clocksource *cs) |
129 | { | 129 | { |
130 | unsigned long flags; | 130 | unsigned long flags; |
131 | u32 cycles; | 131 | u32 cycles; |
diff --git a/arch/m68knommu/platform/coldfire/timers.c b/arch/m68knommu/platform/coldfire/timers.c index 454f25493491..1ba8a3731653 100644 --- a/arch/m68knommu/platform/coldfire/timers.c +++ b/arch/m68knommu/platform/coldfire/timers.c | |||
@@ -78,7 +78,7 @@ static struct irqaction mcftmr_timer_irq = { | |||
78 | 78 | ||
79 | /***************************************************************************/ | 79 | /***************************************************************************/ |
80 | 80 | ||
81 | static cycle_t mcftmr_read_clk(void) | 81 | static cycle_t mcftmr_read_clk(struct clocksource *cs) |
82 | { | 82 | { |
83 | unsigned long flags; | 83 | unsigned long flags; |
84 | u32 cycles; | 84 | u32 cycles; |
diff --git a/arch/mips/kernel/cevt-txx9.c b/arch/mips/kernel/cevt-txx9.c index eccf7d6096bd..2e911e3da8d3 100644 --- a/arch/mips/kernel/cevt-txx9.c +++ b/arch/mips/kernel/cevt-txx9.c | |||
@@ -22,7 +22,7 @@ | |||
22 | 22 | ||
23 | static struct txx9_tmr_reg __iomem *txx9_cs_tmrptr; | 23 | static struct txx9_tmr_reg __iomem *txx9_cs_tmrptr; |
24 | 24 | ||
25 | static cycle_t txx9_cs_read(void) | 25 | static cycle_t txx9_cs_read(struct clocksource *cs) |
26 | { | 26 | { |
27 | return __raw_readl(&txx9_cs_tmrptr->trr); | 27 | return __raw_readl(&txx9_cs_tmrptr->trr); |
28 | } | 28 | } |
diff --git a/arch/mips/kernel/csrc-bcm1480.c b/arch/mips/kernel/csrc-bcm1480.c index 868745e7184b..51489f8a825e 100644 --- a/arch/mips/kernel/csrc-bcm1480.c +++ b/arch/mips/kernel/csrc-bcm1480.c | |||
@@ -28,7 +28,7 @@ | |||
28 | 28 | ||
29 | #include <asm/sibyte/sb1250.h> | 29 | #include <asm/sibyte/sb1250.h> |
30 | 30 | ||
31 | static cycle_t bcm1480_hpt_read(void) | 31 | static cycle_t bcm1480_hpt_read(struct clocksource *cs) |
32 | { | 32 | { |
33 | return (cycle_t) __raw_readq(IOADDR(A_SCD_ZBBUS_CYCLE_COUNT)); | 33 | return (cycle_t) __raw_readq(IOADDR(A_SCD_ZBBUS_CYCLE_COUNT)); |
34 | } | 34 | } |
diff --git a/arch/mips/kernel/csrc-ioasic.c b/arch/mips/kernel/csrc-ioasic.c index 1d5f63cf8997..b551f48d3a07 100644 --- a/arch/mips/kernel/csrc-ioasic.c +++ b/arch/mips/kernel/csrc-ioasic.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include <asm/dec/ioasic.h> | 25 | #include <asm/dec/ioasic.h> |
26 | #include <asm/dec/ioasic_addrs.h> | 26 | #include <asm/dec/ioasic_addrs.h> |
27 | 27 | ||
28 | static cycle_t dec_ioasic_hpt_read(void) | 28 | static cycle_t dec_ioasic_hpt_read(struct clocksource *cs) |
29 | { | 29 | { |
30 | return ioasic_read(IO_REG_FCTR); | 30 | return ioasic_read(IO_REG_FCTR); |
31 | } | 31 | } |
@@ -47,13 +47,13 @@ void __init dec_ioasic_clocksource_init(void) | |||
47 | while (!ds1287_timer_state()) | 47 | while (!ds1287_timer_state()) |
48 | ; | 48 | ; |
49 | 49 | ||
50 | start = dec_ioasic_hpt_read(); | 50 | start = dec_ioasic_hpt_read(&clocksource_dec); |
51 | 51 | ||
52 | while (i--) | 52 | while (i--) |
53 | while (!ds1287_timer_state()) | 53 | while (!ds1287_timer_state()) |
54 | ; | 54 | ; |
55 | 55 | ||
56 | end = dec_ioasic_hpt_read(); | 56 | end = dec_ioasic_hpt_read(&clocksource_dec); |
57 | 57 | ||
58 | freq = (end - start) * 10; | 58 | freq = (end - start) * 10; |
59 | printk(KERN_INFO "I/O ASIC clock frequency %dHz\n", freq); | 59 | printk(KERN_INFO "I/O ASIC clock frequency %dHz\n", freq); |
diff --git a/arch/mips/kernel/csrc-r4k.c b/arch/mips/kernel/csrc-r4k.c index f1a2893931ed..e95a3cd48eea 100644 --- a/arch/mips/kernel/csrc-r4k.c +++ b/arch/mips/kernel/csrc-r4k.c | |||
@@ -10,7 +10,7 @@ | |||
10 | 10 | ||
11 | #include <asm/time.h> | 11 | #include <asm/time.h> |
12 | 12 | ||
13 | static cycle_t c0_hpt_read(void) | 13 | static cycle_t c0_hpt_read(struct clocksource *cs) |
14 | { | 14 | { |
15 | return read_c0_count(); | 15 | return read_c0_count(); |
16 | } | 16 | } |
diff --git a/arch/mips/kernel/csrc-sb1250.c b/arch/mips/kernel/csrc-sb1250.c index 92212bbb8e45..d14d3d1907fa 100644 --- a/arch/mips/kernel/csrc-sb1250.c +++ b/arch/mips/kernel/csrc-sb1250.c | |||
@@ -33,7 +33,7 @@ | |||
33 | * The HPT is free running from SB1250_HPT_VALUE down to 0 then starts over | 33 | * The HPT is free running from SB1250_HPT_VALUE down to 0 then starts over |
34 | * again. | 34 | * again. |
35 | */ | 35 | */ |
36 | static cycle_t sb1250_hpt_read(void) | 36 | static cycle_t sb1250_hpt_read(struct clocksource *cs) |
37 | { | 37 | { |
38 | unsigned int count; | 38 | unsigned int count; |
39 | 39 | ||
diff --git a/arch/mips/kernel/i8253.c b/arch/mips/kernel/i8253.c index 689719e34f08..ed20e7fe65e3 100644 --- a/arch/mips/kernel/i8253.c +++ b/arch/mips/kernel/i8253.c | |||
@@ -128,7 +128,7 @@ void __init setup_pit_timer(void) | |||
128 | * to just read by itself. So use jiffies to emulate a free | 128 | * to just read by itself. So use jiffies to emulate a free |
129 | * running counter: | 129 | * running counter: |
130 | */ | 130 | */ |
131 | static cycle_t pit_read(void) | 131 | static cycle_t pit_read(struct clocksource *cs) |
132 | { | 132 | { |
133 | unsigned long flags; | 133 | unsigned long flags; |
134 | int count; | 134 | int count; |
diff --git a/arch/mips/nxp/pnx8550/common/time.c b/arch/mips/nxp/pnx8550/common/time.c index cf293b279098..8df43e9e4d90 100644 --- a/arch/mips/nxp/pnx8550/common/time.c +++ b/arch/mips/nxp/pnx8550/common/time.c | |||
@@ -35,7 +35,7 @@ | |||
35 | 35 | ||
36 | static unsigned long cpj; | 36 | static unsigned long cpj; |
37 | 37 | ||
38 | static cycle_t hpt_read(void) | 38 | static cycle_t hpt_read(struct clocksource *cs) |
39 | { | 39 | { |
40 | return read_c0_count2(); | 40 | return read_c0_count2(); |
41 | } | 41 | } |
diff --git a/arch/mips/sgi-ip27/ip27-timer.c b/arch/mips/sgi-ip27/ip27-timer.c index f024057a35f8..f10a7cd64f7e 100644 --- a/arch/mips/sgi-ip27/ip27-timer.c +++ b/arch/mips/sgi-ip27/ip27-timer.c | |||
@@ -159,7 +159,7 @@ static void __init hub_rt_clock_event_global_init(void) | |||
159 | setup_irq(irq, &hub_rt_irqaction); | 159 | setup_irq(irq, &hub_rt_irqaction); |
160 | } | 160 | } |
161 | 161 | ||
162 | static cycle_t hub_rt_read(void) | 162 | static cycle_t hub_rt_read(struct clocksource *cs) |
163 | { | 163 | { |
164 | return REMOTE_HUB_L(cputonasid(0), PI_RT_COUNT); | 164 | return REMOTE_HUB_L(cputonasid(0), PI_RT_COUNT); |
165 | } | 165 | } |
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 926ea864e34f..48571ac56fb7 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
@@ -77,7 +77,7 @@ | |||
77 | #include <linux/clockchips.h> | 77 | #include <linux/clockchips.h> |
78 | #include <linux/clocksource.h> | 78 | #include <linux/clocksource.h> |
79 | 79 | ||
80 | static cycle_t rtc_read(void); | 80 | static cycle_t rtc_read(struct clocksource *); |
81 | static struct clocksource clocksource_rtc = { | 81 | static struct clocksource clocksource_rtc = { |
82 | .name = "rtc", | 82 | .name = "rtc", |
83 | .rating = 400, | 83 | .rating = 400, |
@@ -88,7 +88,7 @@ static struct clocksource clocksource_rtc = { | |||
88 | .read = rtc_read, | 88 | .read = rtc_read, |
89 | }; | 89 | }; |
90 | 90 | ||
91 | static cycle_t timebase_read(void); | 91 | static cycle_t timebase_read(struct clocksource *); |
92 | static struct clocksource clocksource_timebase = { | 92 | static struct clocksource clocksource_timebase = { |
93 | .name = "timebase", | 93 | .name = "timebase", |
94 | .rating = 400, | 94 | .rating = 400, |
@@ -766,12 +766,12 @@ unsigned long read_persistent_clock(void) | |||
766 | } | 766 | } |
767 | 767 | ||
768 | /* clocksource code */ | 768 | /* clocksource code */ |
769 | static cycle_t rtc_read(void) | 769 | static cycle_t rtc_read(struct clocksource *cs) |
770 | { | 770 | { |
771 | return (cycle_t)get_rtc(); | 771 | return (cycle_t)get_rtc(); |
772 | } | 772 | } |
773 | 773 | ||
774 | static cycle_t timebase_read(void) | 774 | static cycle_t timebase_read(struct clocksource *cs) |
775 | { | 775 | { |
776 | return (cycle_t)get_tb(); | 776 | return (cycle_t)get_tb(); |
777 | } | 777 | } |
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 6ded50dfa75a..ef596d020573 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -201,7 +201,7 @@ unsigned long read_persistent_clock(void) | |||
201 | return ts.tv_sec; | 201 | return ts.tv_sec; |
202 | } | 202 | } |
203 | 203 | ||
204 | static cycle_t read_tod_clock(void) | 204 | static cycle_t read_tod_clock(struct clocksource *cs) |
205 | { | 205 | { |
206 | return get_clock(); | 206 | return get_clock(); |
207 | } | 207 | } |
diff --git a/arch/sh/kernel/time_32.c b/arch/sh/kernel/time_32.c index c34e1e0f9b02..1700d2465f6c 100644 --- a/arch/sh/kernel/time_32.c +++ b/arch/sh/kernel/time_32.c | |||
@@ -208,7 +208,7 @@ unsigned long long sched_clock(void) | |||
208 | if (!clocksource_sh.rating) | 208 | if (!clocksource_sh.rating) |
209 | return (unsigned long long)jiffies * (NSEC_PER_SEC / HZ); | 209 | return (unsigned long long)jiffies * (NSEC_PER_SEC / HZ); |
210 | 210 | ||
211 | cycles = clocksource_sh.read(); | 211 | cycles = clocksource_sh.read(&clocksource_sh); |
212 | return cyc2ns(&clocksource_sh, cycles); | 212 | return cyc2ns(&clocksource_sh, cycles); |
213 | } | 213 | } |
214 | #endif | 214 | #endif |
diff --git a/arch/sh/kernel/timers/timer-tmu.c b/arch/sh/kernel/timers/timer-tmu.c index c5d3396f5960..fe8d8930ccb6 100644 --- a/arch/sh/kernel/timers/timer-tmu.c +++ b/arch/sh/kernel/timers/timer-tmu.c | |||
@@ -81,7 +81,7 @@ static int tmu_timer_stop(void) | |||
81 | */ | 81 | */ |
82 | static int tmus_are_scaled; | 82 | static int tmus_are_scaled; |
83 | 83 | ||
84 | static cycle_t tmu_timer_read(void) | 84 | static cycle_t tmu_timer_read(struct clocksource *cs) |
85 | { | 85 | { |
86 | return ((cycle_t)(~_tmu_read(TMU1)))<<tmus_are_scaled; | 86 | return ((cycle_t)(~_tmu_read(TMU1)))<<tmus_are_scaled; |
87 | } | 87 | } |
diff --git a/arch/sparc/kernel/time_64.c b/arch/sparc/kernel/time_64.c index db310aa00183..5c12e79b4bdf 100644 --- a/arch/sparc/kernel/time_64.c +++ b/arch/sparc/kernel/time_64.c | |||
@@ -814,6 +814,11 @@ void udelay(unsigned long usecs) | |||
814 | } | 814 | } |
815 | EXPORT_SYMBOL(udelay); | 815 | EXPORT_SYMBOL(udelay); |
816 | 816 | ||
817 | static cycle_t clocksource_tick_read(struct clocksource *cs) | ||
818 | { | ||
819 | return tick_ops->get_tick(); | ||
820 | } | ||
821 | |||
817 | void __init time_init(void) | 822 | void __init time_init(void) |
818 | { | 823 | { |
819 | unsigned long freq = sparc64_init_timers(); | 824 | unsigned long freq = sparc64_init_timers(); |
@@ -827,7 +832,7 @@ void __init time_init(void) | |||
827 | clocksource_tick.mult = | 832 | clocksource_tick.mult = |
828 | clocksource_hz2mult(freq, | 833 | clocksource_hz2mult(freq, |
829 | clocksource_tick.shift); | 834 | clocksource_tick.shift); |
830 | clocksource_tick.read = tick_ops->get_tick; | 835 | clocksource_tick.read = clocksource_tick_read; |
831 | 836 | ||
832 | printk("clocksource: mult[%x] shift[%d]\n", | 837 | printk("clocksource: mult[%x] shift[%d]\n", |
833 | clocksource_tick.mult, clocksource_tick.shift); | 838 | clocksource_tick.mult, clocksource_tick.shift); |
diff --git a/arch/um/kernel/time.c b/arch/um/kernel/time.c index b13a87a3ec95..c8b9c469fcd7 100644 --- a/arch/um/kernel/time.c +++ b/arch/um/kernel/time.c | |||
@@ -65,7 +65,7 @@ static irqreturn_t um_timer(int irq, void *dev) | |||
65 | return IRQ_HANDLED; | 65 | return IRQ_HANDLED; |
66 | } | 66 | } |
67 | 67 | ||
68 | static cycle_t itimer_read(void) | 68 | static cycle_t itimer_read(struct clocksource *cs) |
69 | { | 69 | { |
70 | return os_nsecs() / 1000; | 70 | return os_nsecs() / 1000; |
71 | } | 71 | } |
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index 648b3a2a3a44..3f0019e0a229 100644 --- a/arch/x86/kernel/hpet.c +++ b/arch/x86/kernel/hpet.c | |||
@@ -722,7 +722,7 @@ static int hpet_cpuhp_notify(struct notifier_block *n, | |||
722 | /* | 722 | /* |
723 | * Clock source related code | 723 | * Clock source related code |
724 | */ | 724 | */ |
725 | static cycle_t read_hpet(void) | 725 | static cycle_t read_hpet(struct clocksource *cs) |
726 | { | 726 | { |
727 | return (cycle_t)hpet_readl(HPET_COUNTER); | 727 | return (cycle_t)hpet_readl(HPET_COUNTER); |
728 | } | 728 | } |
@@ -756,7 +756,7 @@ static int hpet_clocksource_register(void) | |||
756 | hpet_restart_counter(); | 756 | hpet_restart_counter(); |
757 | 757 | ||
758 | /* Verify whether hpet counter works */ | 758 | /* Verify whether hpet counter works */ |
759 | t1 = read_hpet(); | 759 | t1 = hpet_readl(HPET_COUNTER); |
760 | rdtscll(start); | 760 | rdtscll(start); |
761 | 761 | ||
762 | /* | 762 | /* |
@@ -770,7 +770,7 @@ static int hpet_clocksource_register(void) | |||
770 | rdtscll(now); | 770 | rdtscll(now); |
771 | } while ((now - start) < 200000UL); | 771 | } while ((now - start) < 200000UL); |
772 | 772 | ||
773 | if (t1 == read_hpet()) { | 773 | if (t1 == hpet_readl(HPET_COUNTER)) { |
774 | printk(KERN_WARNING | 774 | printk(KERN_WARNING |
775 | "HPET counter not counting. HPET disabled\n"); | 775 | "HPET counter not counting. HPET disabled\n"); |
776 | return -ENODEV; | 776 | return -ENODEV; |
diff --git a/arch/x86/kernel/i8253.c b/arch/x86/kernel/i8253.c index 3475440baa54..c2e0bb0890d4 100644 --- a/arch/x86/kernel/i8253.c +++ b/arch/x86/kernel/i8253.c | |||
@@ -129,7 +129,7 @@ void __init setup_pit_timer(void) | |||
129 | * to just read by itself. So use jiffies to emulate a free | 129 | * to just read by itself. So use jiffies to emulate a free |
130 | * running counter: | 130 | * running counter: |
131 | */ | 131 | */ |
132 | static cycle_t pit_read(void) | 132 | static cycle_t pit_read(struct clocksource *cs) |
133 | { | 133 | { |
134 | static int old_count; | 134 | static int old_count; |
135 | static u32 old_jifs; | 135 | static u32 old_jifs; |
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 137f2e8132df..223af43f1526 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c | |||
@@ -77,6 +77,11 @@ static cycle_t kvm_clock_read(void) | |||
77 | return ret; | 77 | return ret; |
78 | } | 78 | } |
79 | 79 | ||
80 | static cycle_t kvm_clock_get_cycles(struct clocksource *cs) | ||
81 | { | ||
82 | return kvm_clock_read(); | ||
83 | } | ||
84 | |||
80 | /* | 85 | /* |
81 | * If we don't do that, there is the possibility that the guest | 86 | * If we don't do that, there is the possibility that the guest |
82 | * will calibrate under heavy load - thus, getting a lower lpj - | 87 | * will calibrate under heavy load - thus, getting a lower lpj - |
@@ -107,7 +112,7 @@ static void kvm_get_preset_lpj(void) | |||
107 | 112 | ||
108 | static struct clocksource kvm_clock = { | 113 | static struct clocksource kvm_clock = { |
109 | .name = "kvm-clock", | 114 | .name = "kvm-clock", |
110 | .read = kvm_clock_read, | 115 | .read = kvm_clock_get_cycles, |
111 | .rating = 400, | 116 | .rating = 400, |
112 | .mask = CLOCKSOURCE_MASK(64), | 117 | .mask = CLOCKSOURCE_MASK(64), |
113 | .mult = 1 << KVM_SCALE, | 118 | .mult = 1 << KVM_SCALE, |
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 7a567ebe6361..d57de05dc430 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c | |||
@@ -699,7 +699,7 @@ static struct clocksource clocksource_tsc; | |||
699 | * code, which is necessary to support wrapping clocksources like pm | 699 | * code, which is necessary to support wrapping clocksources like pm |
700 | * timer. | 700 | * timer. |
701 | */ | 701 | */ |
702 | static cycle_t read_tsc(void) | 702 | static cycle_t read_tsc(struct clocksource *cs) |
703 | { | 703 | { |
704 | cycle_t ret = (cycle_t)get_cycles(); | 704 | cycle_t ret = (cycle_t)get_cycles(); |
705 | 705 | ||
diff --git a/arch/x86/kernel/vmiclock_32.c b/arch/x86/kernel/vmiclock_32.c index d303369a7bad..2b3eb82efeeb 100644 --- a/arch/x86/kernel/vmiclock_32.c +++ b/arch/x86/kernel/vmiclock_32.c | |||
@@ -283,7 +283,7 @@ void __devinit vmi_time_ap_init(void) | |||
283 | /** vmi clocksource */ | 283 | /** vmi clocksource */ |
284 | static struct clocksource clocksource_vmi; | 284 | static struct clocksource clocksource_vmi; |
285 | 285 | ||
286 | static cycle_t read_real_cycles(void) | 286 | static cycle_t read_real_cycles(struct clocksource *cs) |
287 | { | 287 | { |
288 | cycle_t ret = (cycle_t)vmi_timer_ops.get_cycle_counter(VMI_CYCLES_REAL); | 288 | cycle_t ret = (cycle_t)vmi_timer_ops.get_cycle_counter(VMI_CYCLES_REAL); |
289 | return max(ret, clocksource_vmi.cycle_last); | 289 | return max(ret, clocksource_vmi.cycle_last); |
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index a2085368a3dc..ca7ec44bafc3 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c | |||
@@ -663,7 +663,7 @@ static unsigned long lguest_tsc_khz(void) | |||
663 | 663 | ||
664 | /* If we can't use the TSC, the kernel falls back to our lower-priority | 664 | /* If we can't use the TSC, the kernel falls back to our lower-priority |
665 | * "lguest_clock", where we read the time value given to us by the Host. */ | 665 | * "lguest_clock", where we read the time value given to us by the Host. */ |
666 | static cycle_t lguest_clock_read(void) | 666 | static cycle_t lguest_clock_read(struct clocksource *cs) |
667 | { | 667 | { |
668 | unsigned long sec, nsec; | 668 | unsigned long sec, nsec; |
669 | 669 | ||
diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index 14f240623497..0a5aa44299a5 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c | |||
@@ -213,6 +213,11 @@ cycle_t xen_clocksource_read(void) | |||
213 | return ret; | 213 | return ret; |
214 | } | 214 | } |
215 | 215 | ||
216 | static cycle_t xen_clocksource_get_cycles(struct clocksource *cs) | ||
217 | { | ||
218 | return xen_clocksource_read(); | ||
219 | } | ||
220 | |||
216 | static void xen_read_wallclock(struct timespec *ts) | 221 | static void xen_read_wallclock(struct timespec *ts) |
217 | { | 222 | { |
218 | struct shared_info *s = HYPERVISOR_shared_info; | 223 | struct shared_info *s = HYPERVISOR_shared_info; |
@@ -241,7 +246,7 @@ int xen_set_wallclock(unsigned long now) | |||
241 | static struct clocksource xen_clocksource __read_mostly = { | 246 | static struct clocksource xen_clocksource __read_mostly = { |
242 | .name = "xen", | 247 | .name = "xen", |
243 | .rating = 400, | 248 | .rating = 400, |
244 | .read = xen_clocksource_read, | 249 | .read = xen_clocksource_get_cycles, |
245 | .mask = ~0, | 250 | .mask = ~0, |
246 | .mult = 1<<XEN_SHIFT, /* time directly in nanoseconds */ | 251 | .mult = 1<<XEN_SHIFT, /* time directly in nanoseconds */ |
247 | .shift = XEN_SHIFT, | 252 | .shift = XEN_SHIFT, |
diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c index 50dfa3bc71ce..340ba4f9dc54 100644 --- a/drivers/char/hpet.c +++ b/drivers/char/hpet.c | |||
@@ -72,7 +72,7 @@ static u32 hpet_nhpet, hpet_max_freq = HPET_USER_FREQ; | |||
72 | #ifdef CONFIG_IA64 | 72 | #ifdef CONFIG_IA64 |
73 | static void __iomem *hpet_mctr; | 73 | static void __iomem *hpet_mctr; |
74 | 74 | ||
75 | static cycle_t read_hpet(void) | 75 | static cycle_t read_hpet(struct clocksource *cs) |
76 | { | 76 | { |
77 | return (cycle_t)read_counter((void __iomem *)hpet_mctr); | 77 | return (cycle_t)read_counter((void __iomem *)hpet_mctr); |
78 | } | 78 | } |
diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c index ee19b6e8fcb4..40bd8c61c7d7 100644 --- a/drivers/clocksource/acpi_pm.c +++ b/drivers/clocksource/acpi_pm.c | |||
@@ -57,7 +57,7 @@ u32 acpi_pm_read_verified(void) | |||
57 | return v2; | 57 | return v2; |
58 | } | 58 | } |
59 | 59 | ||
60 | static cycle_t acpi_pm_read(void) | 60 | static cycle_t acpi_pm_read(struct clocksource *cs) |
61 | { | 61 | { |
62 | return (cycle_t)read_pmtmr(); | 62 | return (cycle_t)read_pmtmr(); |
63 | } | 63 | } |
@@ -83,7 +83,7 @@ static int __init acpi_pm_good_setup(char *__str) | |||
83 | } | 83 | } |
84 | __setup("acpi_pm_good", acpi_pm_good_setup); | 84 | __setup("acpi_pm_good", acpi_pm_good_setup); |
85 | 85 | ||
86 | static cycle_t acpi_pm_read_slow(void) | 86 | static cycle_t acpi_pm_read_slow(struct clocksource *cs) |
87 | { | 87 | { |
88 | return (cycle_t)acpi_pm_read_verified(); | 88 | return (cycle_t)acpi_pm_read_verified(); |
89 | } | 89 | } |
@@ -156,9 +156,9 @@ static int verify_pmtmr_rate(void) | |||
156 | unsigned long count, delta; | 156 | unsigned long count, delta; |
157 | 157 | ||
158 | mach_prepare_counter(); | 158 | mach_prepare_counter(); |
159 | value1 = clocksource_acpi_pm.read(); | 159 | value1 = clocksource_acpi_pm.read(&clocksource_acpi_pm); |
160 | mach_countup(&count); | 160 | mach_countup(&count); |
161 | value2 = clocksource_acpi_pm.read(); | 161 | value2 = clocksource_acpi_pm.read(&clocksource_acpi_pm); |
162 | delta = (value2 - value1) & ACPI_PM_MASK; | 162 | delta = (value2 - value1) & ACPI_PM_MASK; |
163 | 163 | ||
164 | /* Check that the PMTMR delta is within 5% of what we expect */ | 164 | /* Check that the PMTMR delta is within 5% of what we expect */ |
@@ -195,9 +195,9 @@ static int __init init_acpi_pm_clocksource(void) | |||
195 | /* "verify" this timing source: */ | 195 | /* "verify" this timing source: */ |
196 | for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) { | 196 | for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) { |
197 | udelay(100 * j); | 197 | udelay(100 * j); |
198 | value1 = clocksource_acpi_pm.read(); | 198 | value1 = clocksource_acpi_pm.read(&clocksource_acpi_pm); |
199 | for (i = 0; i < ACPI_PM_READ_CHECKS; i++) { | 199 | for (i = 0; i < ACPI_PM_READ_CHECKS; i++) { |
200 | value2 = clocksource_acpi_pm.read(); | 200 | value2 = clocksource_acpi_pm.read(&clocksource_acpi_pm); |
201 | if (value2 == value1) | 201 | if (value2 == value1) |
202 | continue; | 202 | continue; |
203 | if (value2 > value1) | 203 | if (value2 > value1) |
diff --git a/drivers/clocksource/cyclone.c b/drivers/clocksource/cyclone.c index 8615059a8729..64e528e8bfa6 100644 --- a/drivers/clocksource/cyclone.c +++ b/drivers/clocksource/cyclone.c | |||
@@ -19,7 +19,7 @@ | |||
19 | int use_cyclone = 0; | 19 | int use_cyclone = 0; |
20 | static void __iomem *cyclone_ptr; | 20 | static void __iomem *cyclone_ptr; |
21 | 21 | ||
22 | static cycle_t read_cyclone(void) | 22 | static cycle_t read_cyclone(struct clocksource *cs) |
23 | { | 23 | { |
24 | return (cycle_t)readl(cyclone_ptr); | 24 | return (cycle_t)readl(cyclone_ptr); |
25 | } | 25 | } |
diff --git a/drivers/clocksource/scx200_hrt.c b/drivers/clocksource/scx200_hrt.c index b92da677aa5d..27f4d9637b62 100644 --- a/drivers/clocksource/scx200_hrt.c +++ b/drivers/clocksource/scx200_hrt.c | |||
@@ -43,7 +43,7 @@ MODULE_PARM_DESC(ppm, "+-adjust to actual XO freq (ppm)"); | |||
43 | /* The base timer frequency, * 27 if selected */ | 43 | /* The base timer frequency, * 27 if selected */ |
44 | #define HRT_FREQ 1000000 | 44 | #define HRT_FREQ 1000000 |
45 | 45 | ||
46 | static cycle_t read_hrt(void) | 46 | static cycle_t read_hrt(struct clocksource *cs) |
47 | { | 47 | { |
48 | /* Read the timer value */ | 48 | /* Read the timer value */ |
49 | return (cycle_t) inl(scx200_cb_base + SCx200_TIMER_OFFSET); | 49 | return (cycle_t) inl(scx200_cb_base + SCx200_TIMER_OFFSET); |
diff --git a/drivers/clocksource/tcb_clksrc.c b/drivers/clocksource/tcb_clksrc.c index 254f1064d973..01b886e68822 100644 --- a/drivers/clocksource/tcb_clksrc.c +++ b/drivers/clocksource/tcb_clksrc.c | |||
@@ -39,7 +39,7 @@ | |||
39 | 39 | ||
40 | static void __iomem *tcaddr; | 40 | static void __iomem *tcaddr; |
41 | 41 | ||
42 | static cycle_t tc_get_cycles(void) | 42 | static cycle_t tc_get_cycles(struct clocksource *cs) |
43 | { | 43 | { |
44 | unsigned long flags; | 44 | unsigned long flags; |
45 | u32 lower, upper; | 45 | u32 lower, upper; |
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 573819ef4cc0..0d96cde9ee5d 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h | |||
@@ -143,7 +143,7 @@ extern u64 timecounter_cyc2time(struct timecounter *tc, | |||
143 | * 400-499: Perfect | 143 | * 400-499: Perfect |
144 | * The ideal clocksource. A must-use where | 144 | * The ideal clocksource. A must-use where |
145 | * available. | 145 | * available. |
146 | * @read: returns a cycle value | 146 | * @read: returns a cycle value, passes clocksource as argument |
147 | * @mask: bitmask for two's complement | 147 | * @mask: bitmask for two's complement |
148 | * subtraction of non 64 bit counters | 148 | * subtraction of non 64 bit counters |
149 | * @mult: cycle to nanosecond multiplier (adjusted by NTP) | 149 | * @mult: cycle to nanosecond multiplier (adjusted by NTP) |
@@ -162,7 +162,7 @@ struct clocksource { | |||
162 | char *name; | 162 | char *name; |
163 | struct list_head list; | 163 | struct list_head list; |
164 | int rating; | 164 | int rating; |
165 | cycle_t (*read)(void); | 165 | cycle_t (*read)(struct clocksource *cs); |
166 | cycle_t mask; | 166 | cycle_t mask; |
167 | u32 mult; | 167 | u32 mult; |
168 | u32 mult_orig; | 168 | u32 mult_orig; |
@@ -271,7 +271,7 @@ static inline u32 clocksource_hz2mult(u32 hz, u32 shift_constant) | |||
271 | */ | 271 | */ |
272 | static inline cycle_t clocksource_read(struct clocksource *cs) | 272 | static inline cycle_t clocksource_read(struct clocksource *cs) |
273 | { | 273 | { |
274 | return cs->read(); | 274 | return cs->read(cs); |
275 | } | 275 | } |
276 | 276 | ||
277 | /** | 277 | /** |
diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c index c46c931a7fe7..ecfd7b5187e0 100644 --- a/kernel/time/clocksource.c +++ b/kernel/time/clocksource.c | |||
@@ -181,12 +181,12 @@ static void clocksource_watchdog(unsigned long data) | |||
181 | 181 | ||
182 | resumed = test_and_clear_bit(0, &watchdog_resumed); | 182 | resumed = test_and_clear_bit(0, &watchdog_resumed); |
183 | 183 | ||
184 | wdnow = watchdog->read(); | 184 | wdnow = watchdog->read(watchdog); |
185 | wd_nsec = cyc2ns(watchdog, (wdnow - watchdog_last) & watchdog->mask); | 185 | wd_nsec = cyc2ns(watchdog, (wdnow - watchdog_last) & watchdog->mask); |
186 | watchdog_last = wdnow; | 186 | watchdog_last = wdnow; |
187 | 187 | ||
188 | list_for_each_entry_safe(cs, tmp, &watchdog_list, wd_list) { | 188 | list_for_each_entry_safe(cs, tmp, &watchdog_list, wd_list) { |
189 | csnow = cs->read(); | 189 | csnow = cs->read(cs); |
190 | 190 | ||
191 | if (unlikely(resumed)) { | 191 | if (unlikely(resumed)) { |
192 | cs->wd_last = csnow; | 192 | cs->wd_last = csnow; |
@@ -247,7 +247,7 @@ static void clocksource_check_watchdog(struct clocksource *cs) | |||
247 | 247 | ||
248 | list_add(&cs->wd_list, &watchdog_list); | 248 | list_add(&cs->wd_list, &watchdog_list); |
249 | if (!started && watchdog) { | 249 | if (!started && watchdog) { |
250 | watchdog_last = watchdog->read(); | 250 | watchdog_last = watchdog->read(watchdog); |
251 | watchdog_timer.expires = jiffies + WATCHDOG_INTERVAL; | 251 | watchdog_timer.expires = jiffies + WATCHDOG_INTERVAL; |
252 | add_timer_on(&watchdog_timer, | 252 | add_timer_on(&watchdog_timer, |
253 | cpumask_first(cpu_online_mask)); | 253 | cpumask_first(cpu_online_mask)); |
@@ -268,7 +268,7 @@ static void clocksource_check_watchdog(struct clocksource *cs) | |||
268 | cse->flags &= ~CLOCK_SOURCE_WATCHDOG; | 268 | cse->flags &= ~CLOCK_SOURCE_WATCHDOG; |
269 | /* Start if list is not empty */ | 269 | /* Start if list is not empty */ |
270 | if (!list_empty(&watchdog_list)) { | 270 | if (!list_empty(&watchdog_list)) { |
271 | watchdog_last = watchdog->read(); | 271 | watchdog_last = watchdog->read(watchdog); |
272 | watchdog_timer.expires = | 272 | watchdog_timer.expires = |
273 | jiffies + WATCHDOG_INTERVAL; | 273 | jiffies + WATCHDOG_INTERVAL; |
274 | add_timer_on(&watchdog_timer, | 274 | add_timer_on(&watchdog_timer, |
diff --git a/kernel/time/jiffies.c b/kernel/time/jiffies.c index 06f197560f3b..c3f6c30816e3 100644 --- a/kernel/time/jiffies.c +++ b/kernel/time/jiffies.c | |||
@@ -50,7 +50,7 @@ | |||
50 | */ | 50 | */ |
51 | #define JIFFIES_SHIFT 8 | 51 | #define JIFFIES_SHIFT 8 |
52 | 52 | ||
53 | static cycle_t jiffies_read(void) | 53 | static cycle_t jiffies_read(struct clocksource *cs) |
54 | { | 54 | { |
55 | return (cycle_t) jiffies; | 55 | return (cycle_t) jiffies; |
56 | } | 56 | } |