On Wed, 24 May 2017, Peter Zijlstra wrote:
> Subject: sched/clock: Fix early boot preempt warning
> 
> The more strict early boot preemption warnings found that
> __set_sched_clock_stable() was incorrectly assuming we'd still be
> running on a single CPU.
> 
> Signed-off-by: Peter Zijlstra (Intel) <pet...@infradead.org>

Reviewed-by: Thomas Gleixner <t...@linutronix.de>

> ---
>  kernel/sched/clock.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/sched/clock.c b/kernel/sched/clock.c
> index 1a0d389d2f2b..ca0f8fc945c6 100644
> --- a/kernel/sched/clock.c
> +++ b/kernel/sched/clock.c
> @@ -133,12 +133,19 @@ static void __scd_stamp(struct sched_clock_data *scd)
>  
>  static void __set_sched_clock_stable(void)
>  {
> -     struct sched_clock_data *scd = this_scd();
> +     struct sched_clock_data *scd;
>  
>       /*
> +      * Since we're still unstable and the tick is already running, we have
> +      * to disable IRQs in order to get a consistent scd->tick* reading.
> +      */
> +     local_irq_disable();
> +     scd = this_scd();
> +     /*
>        * Attempt to make the (initial) unstable->stable transition continuous.
>        */
>       __sched_clock_offset = (scd->tick_gtod + __gtod_offset) - 
> (scd->tick_raw);
> +     local_irq_enable();
>  
>       printk(KERN_INFO "sched_clock: Marking stable (%lld, %lld)->(%lld, 
> %lld)\n",
>                       scd->tick_gtod, __gtod_offset,
> 

Reply via email to