All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luca Abeni <luca.abeni@unitn.it>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Wanpeng Li <wanpeng.li@hotmail.com>,
	linux-kernel@vger.kernel.org, Ingo Molnar <mingo@redhat.com>,
	Juri Lelli <juri.lelli@arm.com>
Subject: Re: lockdep-related warning in kernel/sched/deadline.c::find_lock_later_rq()
Date: Fri, 23 Oct 2015 22:10:16 +0200	[thread overview]
Message-ID: <20151023221016.223e87e3@luca-1225C> (raw)
In-Reply-To: <20151023095008.GY17308@twins.programming.kicks-ass.net>

Hi Peter,

On Fri, 23 Oct 2015 11:50:08 +0200
Peter Zijlstra <peterz@infradead.org> wrote:

[...]
> > >>This removes the warning, but I am not sure if it is the correct
> > >>fix (is it valid to unpin rq->lock, here?).
> > >>
> > >>If someone can confirm that this is the correct approach, I'll
> > >>test the patch a little bit more and then I'll send a properly
> > >>signed-off patch; otherwise, if someone can suggest the correct
> > >>approach I'll try it.
> 
> Yes, its fine, although I would like a little comment with each unpin
> to explain _why_ its fine.
> 
> So here its fine because nothing relies on rq->lock being held after
> push_dl_task(), as the next thing we do is drop it anyway.
Thanks for explaining (now I see why it makes sense :), and thanks for
the patch!
I am using it locally, and everything is working fine.


			Thanks,
				Luca


> 
> > >wake_up_new_task()
> > >   -> __task_rq_lock()
> > >   -> task_woken()
> > >     -> push_dl/rt_tasks()
> > >       -> push_dl/rt_task()
> > >
> > >I think you also should consider the lockdep pin_lock in this path.
> 
> Durr, clearly I overlooked both these when I did that. Sorry about
> that.
> 
> So how about:
> 
> ---
> Subject: sched: Add missing lockdep_unpin annotations
> 
> Luca and Wanpeng reported two missing annotations that led to false
> lockdep complaints. Add the missing annotations.
> 
> Fixes: cbce1a686700 ("sched,lockdep: Employ lock pinning")
> Reported-by: Luca Abeni <luca.abeni@unitn.it>
> Reported-by: Wanpeng Li <wanpeng.li@hotmail.com>
> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> ---
>  kernel/sched/core.c     | 9 ++++++++-
>  kernel/sched/deadline.c | 9 ++++++++-
>  2 files changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 1764a0f2a75b..81a74b76346c 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -2362,8 +2362,15 @@ void wake_up_new_task(struct task_struct *p)
>  	trace_sched_wakeup_new(p);
>  	check_preempt_curr(rq, p, WF_FORK);
>  #ifdef CONFIG_SMP
> -	if (p->sched_class->task_woken)
> +	if (p->sched_class->task_woken) {
> +		/*
> +		 * Nothing relies on rq->lock after this, so its
> fine to
> +		 * drop it.
> +		 */
> +		lockdep_unpin_lock(&rq->lock);
>  		p->sched_class->task_woken(rq, p);
> +		lockdep_pin_lock(&rq->lock);
> +	}
>  #endif
>  	task_rq_unlock(rq, p, &flags);
>  }
> diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
> index fc8f01083527..cfdff233099b 100644
> --- a/kernel/sched/deadline.c
> +++ b/kernel/sched/deadline.c
> @@ -668,8 +668,15 @@ static enum hrtimer_restart dl_task_timer(struct
> hrtimer *timer)
>  	 * Queueing this task back might have overloaded rq, check
> if we need
>  	 * to kick someone away.
>  	 */
> -	if (has_pushable_dl_tasks(rq))
> +	if (has_pushable_dl_tasks(rq)) {
> +		/*
> +		 * Nothing relies on rq->lock after this, so its
> safe to drop
> +		 * rq->lock.
> +		 */
> +		lockdep_unpin_lock(&rq->lock);
>  		push_dl_task(rq);
> +		lockdep_pin_lock(&rq->lock);
> +	}
>  #endif
>  
>  unlock:


      parent reply	other threads:[~2015-10-23 20:10 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-21 13:20 lockdep-related warning in kernel/sched/deadline.c::find_lock_later_rq() Luca Abeni
2015-10-22  5:35 ` Wanpeng Li
2015-10-22  7:06   ` Luca Abeni
2015-10-23  9:50     ` Peter Zijlstra
2015-10-23 10:03       ` [tip:sched/urgent] sched/core: Add missing lockdep_unpin() annotations tip-bot for Peter Zijlstra
2015-10-23 20:10       ` Luca Abeni [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20151023221016.223e87e3@luca-1225C \
    --to=luca.abeni@unitn.it \
    --cc=juri.lelli@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=wanpeng.li@hotmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.