[PATCH] ARM: smp: Introduce ARCH_HAS_COMMON_CORES_CLOCK to speed-up boot

Russell King - ARM Linux linux at arm.linux.org.uk
Fri Jan 21 12:08:22 EST 2011


On Fri, Jan 21, 2011 at 07:13:48PM +0530, Santosh Shilimkar wrote:
> > -----Original Message-----
> > From: Rob Herring [mailto:robherring2 at gmail.com]
> > Sent: Thursday, January 20, 2011 10:05 PM
> > To: Santosh Shilimkar
> > Cc: linux-arm-kernel at lists.infradead.org; Russell King; linux-
> > omap at vger.kernel.org; Linus Walleij
> > Subject: Re: [PATCH] ARM: smp: Introduce ARCH_HAS_COMMON_CORES_CLOCK
> > to speed-up boot
> 
> [..]
> 
> > >>
> > >> There's already one way to do this with pre-calculated lpj.
> > >>
> > > How about the hot-plug path? This is not for just boot.
> >
> > The path is the same for hotplug and secondary boot, so yes for
> > both.
> > Plus you get the added benefit of speeding up the primary core boot
> > as well.
> >
> No 'preset_lpj' will not work for the hotplug path when
> cpufreq is active. It just useful only for boot in
> its current form.

Indeed, it will end up screwing up the loops_per_jiffy value.  That
would seem to be a hole on other architectures too.  I wonder if
anyone has tested hotplug on a cpufreq-scaled system.

> @@ -332,14 +345,19 @@ void __init smp_cpus_done(unsigned int max_cpus)
>  	int cpu;
>  	unsigned long bogosum = 0;
> 
> -	for_each_online_cpu(cpu)
> -		bogosum += per_cpu(cpu_data, cpu).loops_per_jiffy;
> +	if (!skip_secondary_calibrate) {
> +		for_each_online_cpu(cpu)
> +			bogosum += per_cpu(cpu_data, cpu).loops_per_jiffy;
> 
> -	printk(KERN_INFO "SMP: Total of %d processors activated "
> -	       "(%lu.%02lu BogoMIPS).\n",
> -	       num_online_cpus(),
> -	       bogosum / (500000/HZ),
> -	       (bogosum / (5000/HZ)) % 100);
> +		printk(KERN_INFO "SMP: Total of %d processors activated "
> +		       "(%lu.%02lu BogoMIPS).\n",
> +			num_online_cpus(),
> +			bogosum / (500000/HZ),
> +			(bogosum / (5000/HZ)) % 100);
> +	} else {
> +		printk(KERN_INFO "SMP: Total of %d processors
> activated.\n",
> +			num_online_cpus());
> +	}

Hmm.  How about:

	char bogosum[32];

	if (!skip_secondary_calibrate) {
		for_each_online_cpu(cpu)
			bogosum += per_cpu(cpu_data, cpu).loops_per_jiffy;

		snprintf(bogosum, sizeof(bogosum), " (%lu.%02lu BogoMIPS).\n",
			bogosum / (500000/HZ), (bogosum / (5000/HZ)) % 100);
	} else
		bogosum[0] = '\0';

	pr_info("SMP: Total of %d processors activated%s.\n",
		num_online_cpus(), bogosum);

Looks neater and more compact and reduces the amount of string space
required.



More information about the linux-arm-kernel mailing list