PPC timer scalability patch
linas at austin.ibm.com
linas at austin.ibm.com
Fri Aug 8 02:09:33 EST 2003
The patch below makes kernel-2.4.21 ever so slightly more efficient
by running cpu-local timers from the local cpu timer interrupt.
(This is how timers are run on kernel-2.6, and is how they are run
on x86. Note that the timer code changed significantly in 2.4.21;
its a partial back-port of the 2.6 timer code. That is why this
issue is coming up for the first time only now).
This patch was suggested by Andrea Arcangeli during disucussions
w/ Andrew Morton on the Re: PATCH: Race in 2.6.0-test2 timer code
LKML discussion thread. (30 July 2003)
--linas
Index: kernel/timer.c
===================================================================
RCS file: /home/linas/cvsroot/linux24/kernel/timer.c,v
retrieving revision 1.1.1.1.4.1
diff -u -p -u -r1.1.1.1.4.1 timer.c
--- kernel/timer.c 15 Jul 2003 18:43:52 -0000 1.1.1.1.4.1
+++ kernel/timer.c 31 Jul 2003 15:30:26 -0000
@@ -764,7 +764,7 @@ void do_timer(struct pt_regs *regs)
/* SMP process accounting uses the local APIC timer */
update_process_times(user_mode(regs));
-#if defined(CONFIG_X86) || defined(CONFIG_IA64) /* x86-64 is also included by CONFIG_X86 */
+#if defined(CONFIG_X86) || defined(CONFIG_IA64) || defined(CONFIG_PPC64) /* x86-64 is also included by CONFIG_X86 */
mark_bh(TIMER_BH);
#endif
#endif
@@ -772,7 +772,7 @@ void do_timer(struct pt_regs *regs)
* Right now only x86-SMP calls run_local_timers() from a
* per-CPU interrupt.
*/
-#if !defined(CONFIG_X86) && !defined(CONFIG_IA64) /* x86-64 is also included by CONFIG_X86 */
+#if !defined(CONFIG_X86) && !defined(CONFIG_IA64) && !defined(CONFIG_PPC64) /*
x86-64 is also included by CONFIG_X86 */
mark_bh(TIMER_BH);
#endif
update_times();
Index: arch/ppc64/kernel/smp.c
===================================================================
RCS file: /home/linas/cvsroot/linux24/arch/ppc64/kernel/smp.c,v
retrieving revision 1.2.4.1
diff -u -p -u -r1.2.4.1 smp.c
--- arch/ppc64/kernel/smp.c 15 Jul 2003 18:41:56 -0000 1.2.4.1
+++ arch/ppc64/kernel/smp.c 31 Jul 2003 15:21:35 -0000
@@ -398,6 +398,8 @@ void smp_local_timer_interrupt(struct pt
update_process_times(user_mode(regs));
(get_paca()->prof_counter)=get_paca()->prof_multiplier;
}
+
+ run_local_timers();
}
void smp_message_recv(int msg, struct pt_regs *regs)
** Sent via the linuxppc64-dev mail list. See http://lists.linuxppc.org/
More information about the Linuxppc64-dev
mailing list