Subject: [patch] ppc32: set smp_tb_synchronized on UP with SMP kernel

From: Johannes Berg <[email-masked]>
Date: Sun, 11 Dec 2005 00:11:19 +0100

ppc32 kernel, when built with CONFIG_SMP and booted on a single CPU
machine, will not properly set smp_tb_synchronized, thus causing
gettimeofday() to not use the HW timebase and to be limited to jiffy
resolution. This, among others, causes unacceptable pauses when
launching X.org.

Signed-Off-By: Johannes Berg <[email-masked]>

--- 

With this patch, X.org startup time goes down from ~30 seconds to normal
(just a second or so). The know-how really comes from BenH who I
discussed with on IRC.

--- linux-2.6.15-rc5.orig/arch/ppc/kernel/smp.c	2005-12-10 23:56:23.026328000 +0100
+++ linux-2.6.15-rc5/arch/ppc/kernel/smp.c	2005-12-11 00:03:40.556328000 +0100
@@ -301,6 +301,11 @@
 
 	/* Probe platform for CPUs: always linear. */
 	num_cpus = smp_ops->probe();
+	
+	if (num_cpus < 2) {
+		smp_tb_synchronized = 1;
+	}
+	
 	for (i = 0; i < num_cpus; ++i)
 		cpu_set(i, cpu_possible_map);