Messages in this thread | | | Date | Wed, 28 Jan 2015 16:50:44 +0100 | From | Peter Zijlstra <> | Subject | Re: [PATCH 3/4] sched: Pull preemption disablement to __schedule() caller |
| |
On Wed, Jan 28, 2015 at 01:24:11AM +0100, Frederic Weisbecker wrote: > +++ b/kernel/sched/core.c > @@ -2760,7 +2760,6 @@ static void __sched __schedule(void) > struct rq *rq; > int cpu; > > - preempt_disable();
Implies barrier();
> cpu = smp_processor_id(); > rq = cpu_rq(cpu); > rcu_note_context_switch(); > @@ -2822,8 +2821,6 @@ static void __sched __schedule(void) > raw_spin_unlock_irq(&rq->lock); > > post_schedule(rq);
implies barrier();
> - > - sched_preempt_enable_no_resched(); > } > > static inline void sched_submit_work(struct task_struct *tsk)
> @@ -2883,9 +2882,9 @@ void __sched schedule_preempt_disabled(void) > static void preempt_schedule_common(void) > { > do { > - preempt_count_add(PREEMPT_ACTIVE); > + preempt_count_add(PREEMPT_ACTIVE + PREEMPT_CHECK_OFFSET);
Does _NOT_ imply barrier();
> __schedule(); > - preempt_count_sub(PREEMPT_ACTIVE);
idem.
> + preempt_count_sub(PREEMPT_ACTIVE + PREEMPT_CHECK_OFFSET); > > /* > * Check again in case we missed a preemption opportunity
| |