All of lore.kernel.org
 help / color / mirror / Atom feed
From: Qian Cai <cai@lca.pw>
To: John Hubbard <jhubbard@nvidia.com>
Cc: Jan Kara <jack@suse.cz>, David Hildenbrand <david@redhat.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	ira.weiny@intel.com, Dan Williams <dan.j.williams@intel.com>,
	Marco Elver <elver@google.com>,
	Linux Memory Management List <linux-mm@kvack.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] mm: fix a data race in put_page()
Date: Thu, 6 Feb 2020 19:55:38 -0500	[thread overview]
Message-ID: <1CFC5A47-3334-4696-89FE-CDF01026B12B@lca.pw> (raw)
In-Reply-To: <90ab0b09-0f70-fe6d-259e-f529f4ef9174@nvidia.com>



> On Feb 6, 2020, at 7:27 PM, John Hubbard <jhubbard@nvidia.com> wrote:
> 
> On 2/6/20 4:18 PM, Qian Cai wrote:
>>> On Feb 6, 2020, at 6:34 PM, John Hubbard <jhubbard@nvidia.com> wrote:
>>> On 2/6/20 7:23 AM, Qian Cai wrote:
>>>>> On Feb 6, 2020, at 9:55 AM, Jan Kara <jack@suse.cz> wrote:
>>>>> I don't think the problem is real. The question is how to make KCSAN happy
>>>>> in a way that doesn't silence other possibly useful things it can find and
>>>>> also which makes it most obvious to the reader what's going on... IMHO
>>>>> using READ_ONCE() fulfills these targets nicely - it is free
>>>>> performance-wise in this case, it silences the checker without impacting
>>>>> other races on page->flags, its kind of obvious we don't want the load torn
>>>>> in this case so it makes sense to the reader (although a comment may be
>>>>> nice).
>>>> 
>>>> Actually, use the data_race() macro there fulfilling the same purpose too, i.e, silence the splat here but still keep searching for other races.
>>>> 
>>> 
>>> Yes, but both READ_ONCE() and data_race() would be saying untrue things about this code,
>>> and that somewhat offends my sense of perfection... :)
>>> 
>>> * READ_ONCE(): this field need not be restricted to being read only once, so the
>>> name is immediately wrong. We're using side effects of READ_ONCE().
>>> 
>>> * data_race(): there is no race on the N bits worth of page zone number data. There
>>> is only a perceived race, due to tools that look at word-level granularity.
>>> 
>>> I'd propose one or both of the following:
>>> 
>>> a) Hope that Marco (I've fixed the typo in his name. --jh) has an idea to enhance KCSAN so as to support this model of
>>>  access, and/or
>> 
>> A similar thing was brought up before, i.e., anything compared to zero is immune to load-tearing
>> issues, but it is rather difficult to implement it in the compiler, so it was settled to use data_race(),
>> 
>> https://lore.kernel.org/lkml/CANpmjNN8J1oWtLPHTgCwbbtTuU_Js-8HD=cozW5cYkm8h-GTBg@mail.gmail.com/#r
>> 
> 
> 
> Thanks for that link to the previous discussion, good context.
> 
> 
>>> 
>>> b) Add a new, better-named macro to indicate what's going on. Initial bikeshed-able
>>>  candidates:
>>> 
>>> 	READ_RO_BITS()
>>> 	READ_IMMUTABLE_BITS()
>>> 	...etc...
>>> 
>> 
>> Actually, Linus might hate those kinds of complication rather than a simple data_race() macro,
>> 
>> https://lore.kernel.org/linux-fsdevel/CAHk-=wg5CkOEF8DTez1Qu0XTEFw_oHhxN98bDnFqbY7HL5AB2g@mail.gmail.com/
>> 
> 
> Another good link. However, my macros above haven't been proposed yet, and I'm perfectly 
> comfortable proposing something that Linus *might* (or might not!) hate. No point in 
> guessing about it, IMHO.
> 
> If you want, I'll be happy to put on my flame suit and post a patchset proposing 
> READ_IMMUTABLE_BITS() (or a better-named thing, if someone has another name idea).  :)
> 

BTW, the current comment said (note, it is called “access” which in this case it does read the whole word
rather than those 3 bits, even though it is only those bits are of interested for us),

/*
 * data_race(): macro to document that accesses in an expression may conflict with
 * other concurrent accesses resulting in data races, but the resulting
 * behaviour is deemed safe regardless.
 *
 * This macro *does not* affect normal code generation, but is a hint to tooling
 * that data races here should be ignored.
 */

Macro might have more to say.

  reply	other threads:[~2020-02-07  0:55 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-06 13:17 [PATCH] mm: fix a data race in put_page() Qian Cai
2020-02-06 13:33 ` David Hildenbrand
2020-02-06 13:51   ` Qian Cai
2020-02-06 13:51     ` Qian Cai
2020-02-06 14:55   ` Jan Kara
2020-02-06 14:59     ` David Hildenbrand
2020-02-06 15:23     ` Qian Cai
2020-02-06 23:34       ` John Hubbard
2020-02-06 23:36         ` John Hubbard
2020-02-06 23:55         ` Qian Cai
2020-02-07  0:18         ` Qian Cai
2020-02-07  0:27           ` John Hubbard
2020-02-07  0:55             ` Qian Cai [this message]
2020-02-07 13:17               ` Marco Elver
2020-02-07 13:17                 ` Marco Elver
2020-02-09  1:44                 ` John Hubbard
2020-02-09  3:10                   ` Qian Cai
2020-02-09  7:12                     ` John Hubbard
2020-02-10  7:48                       ` Marco Elver
2020-02-10  7:48                         ` Marco Elver
2020-02-10 12:16                         ` Qian Cai
2020-02-10 12:58                           ` Marco Elver
2020-02-10 12:58                             ` Marco Elver
2020-02-10 13:36                             ` Qian Cai
2020-02-10 13:38                               ` Marco Elver
2020-02-10 13:38                                 ` Marco Elver
2020-02-10 13:55                                 ` Qian Cai
2020-02-10 14:12                                   ` Marco Elver
2020-02-10 14:12                                     ` Marco Elver
2020-02-10 14:31                                     ` Qian Cai
2020-02-10 16:23                         ` Qian Cai
2020-02-10 16:23                           ` Qian Cai
2020-02-10 16:33                           ` Marco Elver
2020-02-10 16:33                             ` Marco Elver

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=1CFC5A47-3334-4696-89FE-CDF01026B12B@lca.pw \
    --to=cai@lca.pw \
    --cc=akpm@linux-foundation.org \
    --cc=dan.j.williams@intel.com \
    --cc=david@redhat.com \
    --cc=elver@google.com \
    --cc=ira.weiny@intel.com \
    --cc=jack@suse.cz \
    --cc=jhubbard@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /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.