[PATCH 3/3] mach-u300: cleanup clockevent code
Stephen Boyd
sboyd at codeaurora.org
Wed Jun 1 21:51:43 EDT 2011
On 06/01/2011 03:03 AM, Thomas Gleixner wrote:
> Something like the below should work for both UP and SMP
>
> diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c
> index c027d4f..739801b 100644
> --- a/kernel/time/clockevents.c
> +++ b/kernel/time/clockevents.c
> @@ -173,6 +173,12 @@ static void clockevents_notify_released(void)
> }
> }
>
> +#ifdef CONFIG_SMP
> +# define CPU_MASK_CHECK(x) WARN_ON(!x)
> +#else
> +# define CPU_MASK_CHECK(x) (!x)
> +#endif
> +
> /**
> * clockevents_register_device - register a clock event device
> * @dev: device to register
> @@ -182,7 +188,8 @@ void clockevents_register_device(struct clock_event_device *dev)
> unsigned long flags;
>
> BUG_ON(dev->mode != CLOCK_EVT_MODE_UNUSED);
> - BUG_ON(!dev->cpumask);
> + if (CPU_MASK_CHECK(dev->cpumask))
> + dev->cpumask = cpumask_of(smp_processor_id());
>
> raw_spin_lock_irqsave(&clockevents_lock, flags);
Won't this print a big WARNING on SMP_ON_UP=y and is_smp() == false
kernels? Is there a generic cross-architecture way to check for SMP at
runtime?
Also, I don't understand the original motivation for this change. The
assignment to cpumask was there in the u300 timer code already so the
commit text from Linus is a bit misleading/confusing.
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
More information about the linux-arm-kernel
mailing list