[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <269299324.40115.1596561919633.JavaMail.zimbra@efficios.com>
Date: Tue, 4 Aug 2020 13:25:19 -0400 (EDT)
From: Mathieu Desnoyers <mathieu.desnoyers@...icios.com>
To: Peter Zijlstra <peterz@...radead.org>
Cc: linux-kernel <linux-kernel@...r.kernel.org>,
Will Deacon <will@...nel.org>, paulmck <paulmck@...nel.org>,
Nicholas Piggin <npiggin@...il.com>,
Andy Lutomirski <luto@...capital.net>,
Thomas Gleixner <tglx@...utronix.de>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Alan Stern <stern@...land.harvard.edu>,
linux-mm <linux-mm@...ck.org>
Subject: Re: [RFC PATCH 1/2] sched: Fix exit_mm vs membarrier
----- On Aug 4, 2020, at 12:51 PM, Peter Zijlstra peterz@...radead.org wrote:
> On Tue, Aug 04, 2020 at 10:48:41AM -0400, Mathieu Desnoyers wrote:
>> Here is the scenario I have in mind:
>
>> Userspace variables:
>>
>> int x = 0, y = 0;
>>
>> CPU 0 CPU 1
>> Thread A Thread B
>> (in thread group A) (in thread group B)
>>
>> x = 1
>> barrier()
>> y = 1
>> exit()
>> exit_mm()
>> current->mm = NULL;
>> r1 = load y
>> membarrier()
>> skips CPU 0 (no IPI) because its current mm is NULL
>> r2 = load x
>> BUG_ON(r1 == 1 && r2 == 0)
>>
>
> Ah, yes of course.
>
> We really should have a bunch of these scenarios in membarrier.c.
Good point.
>
>
>
> Now, the above cannot happen because we have an unconditional
> atomic_dec_and_test() in do_exit() before exit_mm(), but I'm sure
> relying on that is a wee bit dodgy.
I am not against using this already existing barrier to provide the
guarantee we need, but it would have to be documented in the code.
Thanks,
Mathieu
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
Powered by blists - more mailing lists