From: Oleg Nesterov <oleg@redhat.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
"linux-tip-commits@vger.kernel.org"
<linux-tip-commits@vger.kernel.org>,
Davidlohr Bueso <dave@stgolabs.net>, Peter Anvin <hpa@zytor.com>,
Sasha Levin <sasha.levin@oracle.com>,
Thomas Gleixner <tglx@linutronix.de>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Jason Low <jason.low2@hp.com>,
Michel Lespinasse <walken@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
Ingo Molnar <mingo@kernel.org>,
Paul McKenney <paulmck@linux.vnet.ibm.com>,
Dave Jones <davej@codemonkey.org.uk>,
Ming Lei <ming.lei@canonical.com>,
Tim Chen <tim.c.chen@linux.intel.com>,
Kirill Tkhai <tkhai@yandex.ru>
Subject: Re: [tip:locking/core] locking/rwsem: Fix lock optimistic spinning when owner is not running
Date: Tue, 10 Mar 2015 18:28:16 +0100 [thread overview]
Message-ID: <20150310172816.GA9058@redhat.com> (raw)
In-Reply-To: <CA+55aFxMoq90OhVuZXRth51amgga7pD+7qDsiu4sSVcviwYZLQ@mail.gmail.com>
On 03/10, Linus Torvalds wrote:
>
> On Sat, Mar 7, 2015 at 9:13 AM, Oleg Nesterov <oleg@redhat.com> wrote:
> >> + /*
> >> + * Ensure we emit the owner->on_cpu, dereference _after_
> >> + * checking sem->owner still matches owner, if that fails,
> >> + * owner might point to free()d memory, if it still matches,
> >> + * the rcu_read_lock() ensures the memory stays valid.
> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >
> > Yes, this is another case when we wrongly assume this.
> >
> > Peter, should I resend
> >
> > [PATCH 3/3] introduce task_rcu_dereference()
> > http://marc.info/?l=linux-kernel&m=141443631413914
> >
> > ? or should we add another call_rcu() in finish_task_switch() (like -rt does)
> > to make this true?
>
> I think we should just make 'task_struct_cachep' have SLAB_DESTROY_BY_RCU.
This is what I initially suggested too, but then tried to argue with.
But it seems that I lost if you too prefer SLAB_DESTROY_BY_RCU.
Yes, SLAB_DESTROY_BY_RCU will work in this case because we recheck
->owner in a loop. And because task->on_cpu is just a word we can
safely read.
But this won't fix other problems we might have. For example, suppose
that we will need get_task_struct(owner) in this code, this won't work.
Or, as Kirill pointed out, lets look at "tsk = ACCESS_ONCE(cpu_rq(cpu)->curr)"
in task_numa_group(). Even if this will be "fixed" by SLAB_DESTROY_BY_RCU,
this code won't be correct anyway. Even if (I think) it will be safe to
dereference ->numa_group as well.
But OK, I won't argue.
Oleg.
next prev parent reply other threads:[~2015-03-10 17:31 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-07 7:45 [PATCH] locking/rwsem: Fix lock optimistic spinning when owner is not running Jason Low
2015-03-07 9:21 ` Peter Zijlstra
2015-03-09 17:42 ` Jason Low
2015-03-07 16:43 ` [tip:locking/core] " tip-bot for Jason Low
2015-03-07 17:13 ` Oleg Nesterov
2015-03-10 10:59 ` Peter Zijlstra
2015-03-10 16:04 ` Linus Torvalds
2015-03-10 16:16 ` Peter Zijlstra
2015-03-10 17:28 ` Oleg Nesterov [this message]
2015-03-10 17:45 ` Linus Torvalds
2015-03-10 18:33 ` Oleg Nesterov
2015-03-07 18:17 ` [PATCH] " Sasha Levin
2015-03-09 17:37 ` Jason Low
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=20150310172816.GA9058@redhat.com \
--to=oleg@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=dave@stgolabs.net \
--cc=davej@codemonkey.org.uk \
--cc=hpa@zytor.com \
--cc=jason.low2@hp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=ming.lei@canonical.com \
--cc=mingo@kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=sasha.levin@oracle.com \
--cc=tglx@linutronix.de \
--cc=tim.c.chen@linux.intel.com \
--cc=tkhai@yandex.ru \
--cc=torvalds@linux-foundation.org \
--cc=walken@google.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.