From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934367AbcATKIO (ORCPT ); Wed, 20 Jan 2016 05:08:14 -0500 Received: from foss.arm.com ([217.140.101.70]:44198 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758020AbcATKIK (ORCPT ); Wed, 20 Jan 2016 05:08:10 -0500 Date: Wed, 20 Jan 2016 10:08:39 +0000 From: Juri Lelli To: Peter Zijlstra Cc: mingo@kernel.org, linux-kernel@vger.kernel.org, Thomas Gleixner , Steven Rostedt , Juri Lelli , Andrea Parri Subject: Re: [PATCH] sched: Fix PI handling vs sched_setscheduler() Message-ID: <20160120100839.GL8573@e106622-lin> References: <20160119111841.GZ6344@twins.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160119111841.GZ6344@twins.programming.kicks-ass.net> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On 19/01/16 12:18, Peter Zijlstra wrote: [...] > @@ -4097,15 +4099,14 @@ static int __sched_setscheduler(struct t > if (running) > p->sched_class->set_curr_task(rq); > if (queued) { > - int enqueue_flags = ENQUEUE_RESTORE; > /* > * We enqueue to tail when the priority of a task is > * increased (user space view). > */ > - if (oldprio <= p->prio) > - enqueue_flags |= ENQUEUE_HEAD; > + if (oldprio < p->prio) > + queue_flags |= ENQUEUE_HEAD; Was this condition broken before or it needs to be changed now with this patch? [...] > --- a/kernel/sched/sched.h > +++ b/kernel/sched/sched.h > @@ -1130,18 +1130,35 @@ static inline void finish_lock_switch(st > extern const int sched_prio_to_weight[40]; > extern const u32 sched_prio_to_wmult[40]; > > +/* > + * {de,en}queue flags: > + * > + * SAVE/RESTORE - an otherwise spurious dequeue/enqueue, done to ensure tasks > + * are in a known state which allows modification. Such pairs > + * should preserve as much state as possible. > + * > + * MOVE - paired with SAVE/RESTORE, explicitly does not preserve the location > + * in the runqueue. > + * > + * ENQUEUE_HEAD - place at front of runqueue (tail if not specificed) > + * > + */ Do we want to document all the flags while we are at it? :) Best, - Juri > + > +#define DEQUEUE_SLEEP 0x01 > +#define DEQUEUE_SAVE 0x02 /* matches ENQUEUE_RESTORE */ > +#define DEQUEUE_MOVE 0x04 /* matches ENQUEUE_MOVE */ > + > #define ENQUEUE_WAKEUP 0x01 > -#define ENQUEUE_HEAD 0x02 > +#define ENQUEUE_RESTORE 0x02 > +#define ENQUEUE_MOVE 0x04 > + > +#define ENQUEUE_HEAD 0x08 > +#define ENQUEUE_REPLENISH 0x10 > #ifdef CONFIG_SMP > -#define ENQUEUE_WAKING 0x04 /* sched_class::task_waking was called */ > +#define ENQUEUE_WAKING 0x20 /* sched_class::task_waking was called */ > #else > #define ENQUEUE_WAKING 0x00 > #endif > -#define ENQUEUE_REPLENISH 0x08 > -#define ENQUEUE_RESTORE 0x10 > - > -#define DEQUEUE_SLEEP 0x01 > -#define DEQUEUE_SAVE 0x02 > > #define RETRY_TASK ((void *)-1UL) > >