linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Add a 'seqcount' between gup_fast and copy_page_range
@ 2020-10-24  0:19 Jason Gunthorpe
  2020-10-24  0:19 ` [PATCH 1/2] mm: reorganize internal_get_user_pages_fast() Jason Gunthorpe
                   ` (2 more replies)
  0 siblings, 3 replies; 20+ messages in thread
From: Jason Gunthorpe @ 2020-10-24  0:19 UTC (permalink / raw)
  To: linux-kernel, Peter Xu, Linus Torvalds
  Cc: Andrea Arcangeli, Andrew Morton, Aneesh Kumar K.V,
	Christoph Hellwig, Hugh Dickins, Jan Kara, Jann Horn,
	John Hubbard, Kirill Shutemov, Kirill Tkhai, Leon Romanovsky,
	Linux-MM, Michal Hocko, Oleg Nesterov

As discussed and suggested by Linus use a seqcount like thing to close the
small race between gup_fast and copy_page_range.

Unfortunately the good suggestion to just use write_seqcount_begin() blows
up lockdep immediately due to the (new?) requirement that the write side
of seqcount be in a preempt disabled region. For this application it does
not seem like a good idea, nor is it necessary as we don't spin on retry.

So I open coded a similar construct. Don't like it, will redo this in some
other way if there is a better idea. Since seqcount seems to have this
property now, it also feels wrong to be the only place to use the raw_
functions specifically to avoid the lockdep checks and other parts of
seqcount on the read side.

This can go after the merge window. I was table to test it using two
threads, one forking and the other using ibv_reg_mr() to trigger GUP
fast. Modifying copy_page_range() to sleep made the window large enough to
reliably hit to test the logic.

Jason Gunthorpe (2):
  mm: reorganize internal_get_user_pages_fast()
  mm: prevent gup_fast from racing with COW during fork

 include/linux/mm_types.h |   6 +++
 kernel/fork.c            |   1 +
 mm/gup.c                 | 107 ++++++++++++++++++++++++---------------
 mm/memory.c              |  16 +++++-
 4 files changed, 87 insertions(+), 43 deletions(-)

-- 
2.28.0



^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2020-11-02  3:26 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-24  0:19 [PATCH 0/2] Add a 'seqcount' between gup_fast and copy_page_range Jason Gunthorpe
2020-10-24  0:19 ` [PATCH 1/2] mm: reorganize internal_get_user_pages_fast() Jason Gunthorpe
2020-10-24  4:44   ` John Hubbard
2020-10-26 23:59     ` Jason Gunthorpe
2020-10-27  9:33     ` Jan Kara
2020-10-27  9:55       ` Christoph Hellwig
2020-10-28  6:00         ` John Hubbard
2020-10-27 13:15       ` Jason Gunthorpe
2020-10-28  6:00         ` John Hubbard
2020-10-28  6:05           ` John Hubbard
2020-10-24  0:19 ` [PATCH 2/2] mm: prevent gup_fast from racing with COW during fork Jason Gunthorpe
2020-10-24  5:19   ` John Hubbard
2020-10-24  5:31     ` John Hubbard
2020-10-26 23:49       ` Jason Gunthorpe
2020-10-27  0:14         ` Linus Torvalds
2020-10-27 11:32           ` Jason Gunthorpe
2020-10-27  0:35         ` John Hubbard
2020-10-27  7:32   ` John Hubbard
2020-11-02  3:25   ` [mm] e498078ae9: will-it-scale.per_thread_ops -1.4% regression kernel test robot
2020-10-24  5:14 ` [PATCH 0/2] Add a 'seqcount' between gup_fast and copy_page_range John Hubbard

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).