From: Catalin Marinas <catalin.marinas@arm.com>
To: Kirill Tkhai <ktkhai@parallels.com>
Cc: Kirill Tkhai <tkhai@yandex.ru>,
Peter Zijlstra <peterz@infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Ingo Molnar <mingo@redhat.com>,
Martin Schwidefsky <schwidefsky@de.ibm.com>
Subject: Re: [PATCH] sched/core: Create new task with twice disabled preemption
Date: Fri, 14 Feb 2014 12:21:52 +0000 [thread overview]
Message-ID: <20140214122152.GD10590@arm.com> (raw)
In-Reply-To: <1392376569.5384.25.camel@tkhai>
On Fri, Feb 14, 2014 at 11:16:09AM +0000, Kirill Tkhai wrote:
> В Птн, 14/02/2014 в 10:52 +0000, Catalin Marinas пишет:
> > On Thu, Feb 13, 2014 at 09:32:22PM +0400, Kirill Tkhai wrote:
> > > Look at ARM64's finish_arch_post_lock_switch(). It looks a task
> > > must to not be preempted between switch_mm() and this function.
> > > But in case of new task this is possible.
> >
> > We had a thread about this at the end of last year:
> >
> > https://lkml.org/lkml/2013/11/15/82
> >
> > There is indeed a problem on arm64, something like this (and I think
> > s390 also needs a fix):
> >
> > 1. switch_mm() via check_and_switch_context() defers the actual mm
> > switch by setting TIF_SWITCH_MM
> > 2. the context switch is considered 'done' by the kernel before
> > finish_arch_post_lock_switch() and therefore we can be preempted to a
> > new thread before finish_arch_post_lock_switch()
> > 3. The new thread has the same mm as the preempted thread but we
> > actually missed the mm switching in finish_arch_post_lock_switch()
> > because TIF_SWITCH_MM is per thread rather than mm
> >
> > > This is the problem I tried to solve. I don't know arm64, and I can't
> > > say how it is serious.
> >
> > Have you managed to reproduce this? I don't say it doesn't exist, but I
> > want to make sure that any patch actually fixes it.
>
> No, I have not tried. I found this place while analysing scheduler code.
> But it seems with the RT technics suggested previous message it's quite
> possible.
Now I think I confused myself. Looking through the __schedule() code,
context_switch() and therefore finish_arch_post_lock_switch() are called
with preemption disabled. So the scenario above cannot exist since the
current thread cannot be preempted between switch_mm() and
finish_arch_post_lock_switch(). Do I miss anything?
Now I get your point about schedule_tail() which calls
finish_task_switch() with a preempt count of 0. I'll get back to your
original patch.
Thanks.
--
Catalin
next prev parent reply other threads:[~2014-02-14 12:22 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-13 15:51 [PATCH] sched/core: Create new task with twice disabled preemption Kirill Tkhai
2014-02-13 16:00 ` Peter Zijlstra
2014-02-13 17:32 ` Kirill Tkhai
2014-02-14 10:52 ` Catalin Marinas
2014-02-14 11:16 ` Kirill Tkhai
2014-02-14 12:21 ` Catalin Marinas [this message]
2014-02-14 12:33 ` Kirill Tkhai
2014-02-17 9:37 ` Martin Schwidefsky
2014-02-17 10:40 ` Catalin Marinas
2014-02-17 12:55 ` Martin Schwidefsky
2014-02-14 12:35 ` Catalin Marinas
2014-02-14 12:44 ` Kirill Tkhai
2014-02-14 15:49 ` Catalin Marinas
2014-02-17 14:43 ` Kirill Tkhai
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=20140214122152.GD10590@arm.com \
--to=catalin.marinas@arm.com \
--cc=ktkhai@parallels.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=schwidefsky@de.ibm.com \
--cc=tkhai@yandex.ru \
/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.