diff options
author | Kyle McMartin <kyle@mako.i.cabal.ca> | 2007-02-26 22:21:22 -0500 |
---|---|---|
committer | Kyle McMartin <kyle@mako.i.cabal.ca> | 2007-02-26 22:21:22 -0500 |
commit | 01363220f5d23ef68276db8974e46a502e43d01d (patch) | |
tree | 1cbb083b854f58036396252cc16dc7cd5ffc2363 /arch | |
parent | fb55a0debee81280684b68713024d0c5e62e8aa5 (diff) |
[PARISC] clocksource: Move update_cr16_clocksource later in boot
smp_cpus_done is too early for us... before we even do a device
inventory! Move update_cr16_clocksource into the tail end of
processor_probe() and stub it out on CONFIG_SMP=n builds.
Verified that clocksource0 is properly updated to use jiffies
on an SMP build.
Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/parisc/kernel/processor.c | 8 | ||||
-rw-r--r-- | arch/parisc/kernel/smp.c | 4 | ||||
-rw-r--r-- | arch/parisc/kernel/time.c | 5 |
3 files changed, 13 insertions, 4 deletions
diff --git a/arch/parisc/kernel/processor.c b/arch/parisc/kernel/processor.c index 7c056dcebf55..dd5d0cb6b347 100644 --- a/arch/parisc/kernel/processor.c +++ b/arch/parisc/kernel/processor.c | |||
@@ -48,6 +48,8 @@ EXPORT_SYMBOL(boot_cpu_data); | |||
48 | 48 | ||
49 | struct cpuinfo_parisc cpu_data[NR_CPUS] __read_mostly; | 49 | struct cpuinfo_parisc cpu_data[NR_CPUS] __read_mostly; |
50 | 50 | ||
51 | extern int update_cr16_clocksource(void); /* from time.c */ | ||
52 | |||
51 | /* | 53 | /* |
52 | ** PARISC CPU driver - claim "device" and initialize CPU data structures. | 54 | ** PARISC CPU driver - claim "device" and initialize CPU data structures. |
53 | ** | 55 | ** |
@@ -198,6 +200,12 @@ static int __init processor_probe(struct parisc_device *dev) | |||
198 | } | 200 | } |
199 | #endif | 201 | #endif |
200 | 202 | ||
203 | /* If we've registered more than one cpu, | ||
204 | * we'll use the jiffies clocksource since cr16 | ||
205 | * is not synchronized between CPUs. | ||
206 | */ | ||
207 | update_cr16_clocksource(); | ||
208 | |||
201 | return 0; | 209 | return 0; |
202 | } | 210 | } |
203 | 211 | ||
diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c index bb6e6a38e911..6ba9257fdb7f 100644 --- a/arch/parisc/kernel/smp.c +++ b/arch/parisc/kernel/smp.c | |||
@@ -567,10 +567,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
567 | 567 | ||
568 | void smp_cpus_done(unsigned int cpu_max) | 568 | void smp_cpus_done(unsigned int cpu_max) |
569 | { | 569 | { |
570 | extern int update_cr16_clocksource(void); | ||
571 | |||
572 | update_cr16_clocksource(); | ||
573 | |||
574 | return; | 570 | return; |
575 | } | 571 | } |
576 | 572 | ||
diff --git a/arch/parisc/kernel/time.c b/arch/parisc/kernel/time.c index 9b14066d693c..07a991aa9b0c 100644 --- a/arch/parisc/kernel/time.c +++ b/arch/parisc/kernel/time.c | |||
@@ -200,6 +200,11 @@ int update_cr16_clocksource(void) | |||
200 | 200 | ||
201 | return change; | 201 | return change; |
202 | } | 202 | } |
203 | #else | ||
204 | int update_cr16_clocksource(void) | ||
205 | { | ||
206 | return 0; /* no change */ | ||
207 | } | ||
203 | #endif /*CONFIG_SMP*/ | 208 | #endif /*CONFIG_SMP*/ |
204 | 209 | ||
205 | void __init start_cpu_itimer(void) | 210 | void __init start_cpu_itimer(void) |