aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2005-10-22 00:55:23 -0400
committerPaul Mackerras <paulus@samba.org>2005-10-22 00:55:23 -0400
commita5b518ed314bfd25ea5e433ce09f8b27080023db (patch)
tree777d0f9202136dcff484121ad7673eb65d099567
parente2b5530698cbe8148577b24097eaefcd835ac9ca (diff)
ppc64/powerpc: Fix time initialization on SMP systems
This moves smp_space_timers from arch/ppc64/kernel/smp.c to arch/powerpc/kernel/time.c and makes it initialize last_jiffy[] instead of paca[].next_jiffy_update_tb, since last_jiffy[] is now what the time code uses. It also declares smp_space_timers in include/asm-powerpc/time.h and gets rid of an ifdef in div128_by_32. Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r--arch/powerpc/kernel/time.c14
-rw-r--r--arch/ppc64/kernel/smp.c15
-rw-r--r--include/asm-powerpc/time.h8
3 files changed, 6 insertions, 31 deletions
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
index 3e722370113b..b635c7de6698 100644
--- a/arch/powerpc/kernel/time.c
+++ b/arch/powerpc/kernel/time.c
@@ -458,7 +458,7 @@ void wakeup_decrementer(void)
458 per_cpu(last_jiffy, i) = tb_last_stamp; 458 per_cpu(last_jiffy, i) = tb_last_stamp;
459} 459}
460 460
461#ifdef CONFIG_SMPxxx 461#ifdef CONFIG_SMP
462void __init smp_space_timers(unsigned int max_cpus) 462void __init smp_space_timers(unsigned int max_cpus)
463{ 463{
464 int i; 464 int i;
@@ -948,16 +948,6 @@ void div128_by_32(u64 dividend_high, u64 dividend_low,
948 w = a / divisor; 948 w = a / divisor;
949 ra = ((u64)(a - (w * divisor)) << 32) + b; 949 ra = ((u64)(a - (w * divisor)) << 32) + b;
950 950
951#ifdef CONFIG_PPC64
952 x = ra / divisor;
953 rb = ((ra - (x * divisor)) << 32) + c;
954
955 y = rb / divisor;
956 rc = ((rb - (y * divisor)) << 32) + d;
957
958 z = rc / divisor;
959#else
960 /* for 32-bit, use do_div from div64.h */
961 rb = ((u64) do_div(ra, divisor) << 32) + c; 951 rb = ((u64) do_div(ra, divisor) << 32) + c;
962 x = ra; 952 x = ra;
963 953
@@ -966,10 +956,8 @@ void div128_by_32(u64 dividend_high, u64 dividend_low,
966 956
967 do_div(rc, divisor); 957 do_div(rc, divisor);
968 z = rc; 958 z = rc;
969#endif
970 959
971 dr->result_high = ((u64)w << 32) + x; 960 dr->result_high = ((u64)w << 32) + x;
972 dr->result_low = ((u64)y << 32) + z; 961 dr->result_low = ((u64)y << 32) + z;
973 962
974} 963}
975
diff --git a/arch/ppc64/kernel/smp.c b/arch/ppc64/kernel/smp.c
index 192e3239fadc..017c12919832 100644
--- a/arch/ppc64/kernel/smp.c
+++ b/arch/ppc64/kernel/smp.c
@@ -105,21 +105,6 @@ void __devinit smp_generic_kick_cpu(int nr)
105 105
106#endif /* CONFIG_MPIC */ 106#endif /* CONFIG_MPIC */
107 107
108static void __init smp_space_timers(unsigned int max_cpus)
109{
110 int i;
111 unsigned long offset = tb_ticks_per_jiffy / max_cpus;
112 unsigned long previous_tb = paca[boot_cpuid].next_jiffy_update_tb;
113
114 for_each_cpu(i) {
115 if (i != boot_cpuid) {
116 paca[i].next_jiffy_update_tb =
117 previous_tb + offset;
118 previous_tb = paca[i].next_jiffy_update_tb;
119 }
120 }
121}
122
123void smp_message_recv(int msg, struct pt_regs *regs) 108void smp_message_recv(int msg, struct pt_regs *regs)
124{ 109{
125 switch(msg) { 110 switch(msg) {
diff --git a/include/asm-powerpc/time.h b/include/asm-powerpc/time.h
index f8ef186c81e4..99bfe3281768 100644
--- a/include/asm-powerpc/time.h
+++ b/include/asm-powerpc/time.h
@@ -196,9 +196,11 @@ static inline unsigned long tb_ticks_since(unsigned long tstamp)
196extern u64 mulhdu(u64, u64); 196extern u64 mulhdu(u64, u64);
197#endif 197#endif
198 198
199unsigned mulhwu_scale_factor(unsigned, unsigned); 199extern void smp_space_timers(unsigned int);
200void div128_by_32(u64 dividend_high, u64 dividend_low, 200
201 unsigned divisor, struct div_result *dr); 201extern unsigned mulhwu_scale_factor(unsigned, unsigned);
202extern void div128_by_32(u64 dividend_high, u64 dividend_low,
203 unsigned divisor, struct div_result *dr);
202 204
203/* Used to store Processor Utilization register (purr) values */ 205/* Used to store Processor Utilization register (purr) values */
204 206