[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