linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: John Hubbard <jhubbard@nvidia.com>,
	Yang Shi <shy828301@gmail.com>,
	peterx@redhat.com, kirill.shutemov@linux.intel.com,
	jgg@nvidia.com, hughd@google.com, akpm@linux-foundation.org
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] mm: gup: fix the fast GUP race against THP collapse
Date: Tue, 6 Sep 2022 14:50:46 +0200	[thread overview]
Message-ID: <30e2f5e1-a2de-0036-6242-b6f7021a8692@redhat.com> (raw)
In-Reply-To: <c38494f0-1bc5-61e4-8459-be9160029539@nvidia.com>

> OK, I believe you're referring to this:
> 
> 	folio = try_grab_folio(page, 1, flags);
> 
> just earlier in gup_pte_range(). Yes that's true...but it's hidden, which
> is unfortunate. Maybe a comment could help.
> 

Most certainly.

>>
>> If we still intend to change that code, we should fixup all GUP-fast
>> functions in a similar way. But again, I don't think we need a change here.
>>
> 
> It's really rough, having to play this hide-and-seek game of "who did
> the memory barrier". And I'm tempted to suggest adding READ_ONCE() to
> any and all reads of the page table entries, just to help stay out of
> trouble. It's a visual reminder that page table reads are always a
> lockless read and are inherently volatile.
> 
> Of course, I realize that adding extra READ_ONCE() calls is not a good
> thing. It might be a performance hit, although, again, these are
> volatile reads by nature, so you probably had a membar anyway.
> 
> And looking in reverse, there are actually a number of places here where
> we could probably get away with *removing* READ_ONCE()!
> 
> Overall, I would be inclined to load up on READ_ONCE() calls, yes. But I
> sort of expect to be overridden on that, due to potential performance
> concerns, and that's reasonable.
> 
> At a minimum we should add a few short comments about what memory
> barriers are used, and why we don't need a READ_ONCE() or something
> stronger when reading the pte.

Adding more unnecessary memory barriers doesn't necessarily improve the 
situation.

Messing with memory barriers is and remains absolutely disgusting.

IMHO, only clear documentation and ASCII art can keep it somehow 
maintainable for human beings.

> 
> 
>>
>>>> -	 * After this gup_fast can't run anymore. This also removes
>>>> -	 * any huge TLB entry from the CPU so we won't allow
>>>> -	 * huge and small TLB entries for the same virtual address
>>>> -	 * to avoid the risk of CPU bugs in that area.
>>>> +	 * This removes any huge TLB entry from the CPU so we won't allow
>>>> +	 * huge and small TLB entries for the same virtual address to
>>>> +	 * avoid the risk of CPU bugs in that area.
>>>> +	 *
>>>> +	 * Parallel fast GUP is fine since fast GUP will back off when
>>>> +	 * it detects PMD is changed.
>>>>    	 */
>>>>    	_pmd = pmdp_collapse_flush(vma, address, pmd);
>>>
>>> To follow up on David Hildenbrand's note about this in the nearby thread...
>>> I'm also not sure if pmdp_collapse_flush() implies a memory barrier on
>>> all arches. It definitely does do an atomic op with a return value on x86,
>>> but that's just one arch.
>>>
>>
>> I think a ptep/pmdp clear + TLB flush really has to imply a memory
>> barrier, otherwise TLB flushing code might easily mess up with
>> surrounding code. But we should better double-check.
> 
> Let's document the function as such, once it's verified: "This is a
> guaranteed memory barrier".

Yes. Hopefully it indeed is on all architectures :)

-- 
Thanks,

David / dhildenb


  reply	other threads:[~2022-09-06 12:51 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-01 22:27 [PATCH] mm: gup: fix the fast GUP race against THP collapse Yang Shi
2022-09-01 23:26 ` Peter Xu
2022-09-01 23:50   ` Yang Shi
2022-09-02  6:39     ` David Hildenbrand
2022-09-02 15:23       ` Yang Shi
2022-09-02 15:59     ` Peter Xu
2022-09-02 16:04       ` Peter Xu
2022-09-02 17:30       ` Yang Shi
2022-09-02 17:45       ` Yang Shi
2022-09-02 20:33         ` Peter Xu
2022-09-05  8:56           ` Aneesh Kumar K.V
2022-09-05  8:54         ` Aneesh Kumar K.V
2022-09-06 19:07           ` Yang Shi
2022-09-07  4:50             ` Aneesh Kumar K V
2022-09-07 17:08               ` Yang Shi
2022-09-04 22:21       ` John Hubbard
2022-09-02  6:42 ` David Hildenbrand
2022-09-04 22:29 ` John Hubbard
2022-09-05  7:59   ` David Hildenbrand
2022-09-05 10:16     ` Baolin Wang
2022-09-05 10:24       ` David Hildenbrand
2022-09-05 11:11         ` David Hildenbrand
2022-09-05 14:35           ` Baolin Wang
2022-09-05 14:40             ` David Hildenbrand
2022-09-06  5:53               ` Baolin Wang
2022-09-06  2:12     ` John Hubbard
2022-09-06 12:50       ` David Hildenbrand [this message]
2022-09-06 13:47     ` Jason Gunthorpe
2022-09-06 13:57       ` David Hildenbrand
2022-09-06 14:30         ` Jason Gunthorpe
2022-09-06 14:44           ` David Hildenbrand
2022-09-06 15:33             ` Jason Gunthorpe
2022-09-06 19:11             ` Yang Shi
2022-09-06 23:16             ` John Hubbard
2022-09-06 19:01     ` Yang Shi
2022-09-05  9:03   ` Baolin Wang
2022-09-06 18:50   ` Yang Shi
2022-09-06 21:27     ` John Hubbard

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=30e2f5e1-a2de-0036-6242-b6f7021a8692@redhat.com \
    --to=david@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=hughd@google.com \
    --cc=jgg@nvidia.com \
    --cc=jhubbard@nvidia.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=peterx@redhat.com \
    --cc=shy828301@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).