From: Linus Torvalds <torvalds@linux-foundation.org>
To: "Kirill A. Shutemov" <kirill@shutemov.name>
Cc: Matthew Wilcox <willy@infradead.org>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Will Deacon <will@kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Linux-MM <linux-mm@kvack.org>,
Linux ARM <linux-arm-kernel@lists.infradead.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Jan Kara <jack@suse.cz>, Minchan Kim <minchan@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Vinayak Menon <vinmenon@codeaurora.org>,
Android Kernel Team <kernel-team@android.com>
Subject: Re: [PATCH 1/2] mm: Allow architectures to request 'old' entries when prefaulting
Date: Wed, 16 Dec 2020 10:41:36 -0800 [thread overview]
Message-ID: <CAHk-=wiVRMADHC0qjTFAVx2Pp0DN-fT-VPC10boDdX0O4=h01w@mail.gmail.com> (raw)
In-Reply-To: <20201216170703.o5lpsnjfmoj7f3ml@box>
On Wed, Dec 16, 2020 at 9:07 AM Kirill A. Shutemov <kirill@shutemov.name> wrote:
>
> If this looks fine, I'll submit a proper patch.
That patch looks good to me.
It would be good if somebody else looked it through - maybe I like it
just because I got to pee in the snow and make my mark. But i think
that filemap_map_pages() now looks a lot more understandable, and
having that pte_offset_map_lock() outside the loop should be good.
In particular, it will make it much easier to then make arguments
about things like
- increase the page mapping count
- check that the page is not locked
- check that the page still has a mapping
we can say "we know we hold the page table lock, and we increased the
page mapping count, and we saw that the page still had a mapping and
was not locked after that".
And that means that with some trivial memory ordering rules, we can
know that any concurrent "truncate()" that got the page lock after we
checked it, will get held up at
if (page_mapped(page)) {
unsigned int nr = thp_nr_pages(page);
unmap_mapping_pages(mapping, page->index, nr, false);
}
in truncate_cleanup_page(), and that means that we can safely map the
page _without_ ever actually even doing a "trylock_page()" at all.
Before this patch of yours, that logic would have been broken, because
the page table lock wasn't actually held for the whole first iteration
of that loop in filemap_map_pages().
And getting rid of the trylock_page() in that path gets rid of _the_
major page lock case for at least one class of loads.
So I like the patch. But I would _really_ like for somebody else to
look at it, and look at my thinking above.
Because maybe I'm missing something.
Linus
WARNING: multiple messages have this Message-ID
From: Linus Torvalds <torvalds@linux-foundation.org>
To: "Kirill A. Shutemov" <kirill@shutemov.name>
Cc: Android Kernel Team <kernel-team@android.com>,
Jan Kara <jack@suse.cz>, Minchan Kim <minchan@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Matthew Wilcox <willy@infradead.org>,
Linux-MM <linux-mm@kvack.org>,
Vinayak Menon <vinmenon@codeaurora.org>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Andrew Morton <akpm@linux-foundation.org>,
Will Deacon <will@kernel.org>,
Linux ARM <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 1/2] mm: Allow architectures to request 'old' entries when prefaulting
Date: Wed, 16 Dec 2020 10:41:36 -0800 [thread overview]
Message-ID: <CAHk-=wiVRMADHC0qjTFAVx2Pp0DN-fT-VPC10boDdX0O4=h01w@mail.gmail.com> (raw)
In-Reply-To: <20201216170703.o5lpsnjfmoj7f3ml@box>
On Wed, Dec 16, 2020 at 9:07 AM Kirill A. Shutemov <kirill@shutemov.name> wrote:
>
> If this looks fine, I'll submit a proper patch.
That patch looks good to me.
It would be good if somebody else looked it through - maybe I like it
just because I got to pee in the snow and make my mark. But i think
that filemap_map_pages() now looks a lot more understandable, and
having that pte_offset_map_lock() outside the loop should be good.
In particular, it will make it much easier to then make arguments
about things like
- increase the page mapping count
- check that the page is not locked
- check that the page still has a mapping
we can say "we know we hold the page table lock, and we increased the
page mapping count, and we saw that the page still had a mapping and
was not locked after that".
And that means that with some trivial memory ordering rules, we can
know that any concurrent "truncate()" that got the page lock after we
checked it, will get held up at
if (page_mapped(page)) {
unsigned int nr = thp_nr_pages(page);
unmap_mapping_pages(mapping, page->index, nr, false);
}
in truncate_cleanup_page(), and that means that we can safely map the
page _without_ ever actually even doing a "trylock_page()" at all.
Before this patch of yours, that logic would have been broken, because
the page table lock wasn't actually held for the whole first iteration
of that loop in filemap_map_pages().
And getting rid of the trylock_page() in that path gets rid of _the_
major page lock case for at least one class of loads.
So I like the patch. But I would _really_ like for somebody else to
look at it, and look at my thinking above.
Because maybe I'm missing something.
Linus
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-12-16 18:42 UTC|newest]
Thread overview: 138+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-09 16:39 [PATCH 0/2] Create 'old' ptes for faultaround mappings on arm64 with hardware access flag Will Deacon
2020-12-09 16:39 ` Will Deacon
2020-12-09 16:39 ` [PATCH 1/2] mm: Allow architectures to request 'old' entries when prefaulting Will Deacon
2020-12-09 16:39 ` Will Deacon
2020-12-09 17:58 ` Linus Torvalds
2020-12-09 17:58 ` Linus Torvalds
2020-12-09 17:58 ` Linus Torvalds
2020-12-09 18:40 ` Will Deacon
2020-12-09 18:40 ` Will Deacon
2020-12-09 19:04 ` Linus Torvalds
2020-12-09 19:04 ` Linus Torvalds
2020-12-09 19:04 ` Linus Torvalds
2020-12-09 20:32 ` Matthew Wilcox
2020-12-09 20:32 ` Matthew Wilcox
2020-12-09 21:04 ` Linus Torvalds
2020-12-09 21:04 ` Linus Torvalds
2020-12-09 21:04 ` Linus Torvalds
2020-12-10 15:08 ` Kirill A. Shutemov
2020-12-10 15:08 ` Kirill A. Shutemov
2020-12-10 17:23 ` Linus Torvalds
2020-12-10 17:23 ` Linus Torvalds
2020-12-10 17:23 ` Linus Torvalds
2020-12-14 16:07 ` Kirill A. Shutemov
2020-12-14 16:07 ` Kirill A. Shutemov
2020-12-14 17:54 ` Linus Torvalds
2020-12-14 17:54 ` Linus Torvalds
2020-12-14 17:54 ` Linus Torvalds
2020-12-14 18:56 ` Matthew Wilcox
2020-12-14 18:56 ` Matthew Wilcox
2020-12-16 17:07 ` Kirill A. Shutemov
2020-12-16 17:07 ` Kirill A. Shutemov
2020-12-16 18:41 ` Linus Torvalds [this message]
2020-12-16 18:41 ` Linus Torvalds
2020-12-16 18:41 ` Linus Torvalds
2020-12-17 10:54 ` Kirill A. Shutemov
2020-12-17 10:54 ` Kirill A. Shutemov
2020-12-17 18:22 ` Linus Torvalds
2020-12-17 18:22 ` Linus Torvalds
2020-12-17 18:22 ` Linus Torvalds
2020-12-18 11:04 ` Kirill A. Shutemov
2020-12-18 11:04 ` Kirill A. Shutemov
2020-12-18 18:56 ` Linus Torvalds
2020-12-18 18:56 ` Linus Torvalds
2020-12-18 18:56 ` Linus Torvalds
2020-12-19 12:41 ` Kirill A. Shutemov
2020-12-19 12:41 ` Kirill A. Shutemov
2020-12-19 20:08 ` Linus Torvalds
2020-12-19 20:08 ` Linus Torvalds
2020-12-19 20:08 ` Linus Torvalds
2020-12-19 20:34 ` Linus Torvalds
2020-12-19 20:34 ` Linus Torvalds
2020-12-19 20:34 ` Linus Torvalds
2020-12-22 10:00 ` Kirill A. Shutemov
2020-12-22 10:00 ` Kirill A. Shutemov
2020-12-24 4:04 ` Hugh Dickins
2020-12-24 4:04 ` Hugh Dickins
2020-12-24 4:04 ` Hugh Dickins
2020-12-25 11:31 ` Kirill A. Shutemov
2020-12-25 11:31 ` Kirill A. Shutemov
2020-12-26 17:57 ` Linus Torvalds
2020-12-26 17:57 ` Linus Torvalds
2020-12-26 17:57 ` Linus Torvalds
2020-12-26 20:43 ` Kirill A. Shutemov
2020-12-26 20:43 ` Kirill A. Shutemov
2020-12-26 21:03 ` Hugh Dickins
2020-12-26 21:03 ` Hugh Dickins
2020-12-26 21:03 ` Hugh Dickins
2020-12-26 21:16 ` Linus Torvalds
2020-12-26 21:16 ` Linus Torvalds
2020-12-26 21:16 ` Linus Torvalds
2020-12-26 22:40 ` Kirill A. Shutemov
2020-12-26 22:40 ` Kirill A. Shutemov
2020-12-27 0:45 ` Hugh Dickins
2020-12-27 0:45 ` Hugh Dickins
2020-12-27 0:45 ` Hugh Dickins
2020-12-27 2:38 ` Hugh Dickins
2020-12-27 2:38 ` Hugh Dickins
2020-12-27 2:38 ` Hugh Dickins
2020-12-27 19:38 ` Linus Torvalds
2020-12-27 19:38 ` Linus Torvalds
2020-12-27 19:38 ` Linus Torvalds
2020-12-27 20:32 ` Damian Tometzki
2020-12-27 20:32 ` Damian Tometzki
2020-12-27 22:35 ` Hugh Dickins
2020-12-27 22:35 ` Hugh Dickins
2020-12-27 22:35 ` Hugh Dickins
2020-12-27 23:12 ` Linus Torvalds
2020-12-27 23:12 ` Linus Torvalds
2020-12-27 23:12 ` Linus Torvalds
2020-12-27 23:40 ` Linus Torvalds
2020-12-27 23:40 ` Linus Torvalds
2020-12-27 23:40 ` Linus Torvalds
2020-12-27 23:55 ` Kirill A. Shutemov
2020-12-27 23:55 ` Kirill A. Shutemov
2020-12-27 23:48 ` Kirill A. Shutemov
2020-12-27 23:48 ` Kirill A. Shutemov
2020-12-28 1:54 ` Linus Torvalds
2020-12-28 1:54 ` Linus Torvalds
2020-12-28 1:54 ` Linus Torvalds
2020-12-28 6:43 ` Hugh Dickins
2020-12-28 6:43 ` Hugh Dickins
2020-12-28 6:43 ` Hugh Dickins
2020-12-28 12:53 ` Kirill A. Shutemov
2020-12-28 12:53 ` Kirill A. Shutemov
2020-12-28 18:47 ` Linus Torvalds
2020-12-28 18:47 ` Linus Torvalds
2020-12-28 18:47 ` Linus Torvalds
2020-12-28 21:58 ` Linus Torvalds
2020-12-28 21:58 ` Linus Torvalds
2020-12-28 21:58 ` Linus Torvalds
2020-12-29 13:28 ` Kirill A. Shutemov
2020-12-29 13:28 ` Kirill A. Shutemov
2020-12-29 15:19 ` Matthew Wilcox
2020-12-29 15:19 ` Matthew Wilcox
2020-12-29 20:52 ` Linus Torvalds
2020-12-29 20:52 ` Linus Torvalds
2020-12-29 20:52 ` Linus Torvalds
2020-12-28 22:05 ` Kirill A. Shutemov
2020-12-28 22:05 ` Kirill A. Shutemov
2020-12-28 22:12 ` Kirill A. Shutemov
2020-12-28 22:12 ` Kirill A. Shutemov
2020-12-29 4:35 ` Hugh Dickins
2020-12-29 4:35 ` Hugh Dickins
2020-12-29 4:35 ` Hugh Dickins
2020-12-28 23:28 ` Linus Torvalds
2020-12-28 23:28 ` Linus Torvalds
2020-12-28 23:28 ` Linus Torvalds
2020-12-26 21:07 ` Linus Torvalds
2020-12-26 21:07 ` Linus Torvalds
2020-12-26 21:07 ` Linus Torvalds
2020-12-26 21:41 ` Matthew Wilcox
2020-12-26 21:41 ` Matthew Wilcox
2020-12-09 16:39 ` [PATCH 2/2] arm64: mm: Implement arch_wants_old_faultaround_pte() Will Deacon
2020-12-09 16:39 ` Will Deacon
2020-12-09 18:35 ` Catalin Marinas
2020-12-09 18:35 ` Catalin Marinas
2020-12-09 18:46 ` Will Deacon
2020-12-09 18:46 ` Will Deacon
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='CAHk-=wiVRMADHC0qjTFAVx2Pp0DN-fT-VPC10boDdX0O4=h01w@mail.gmail.com' \
--to=torvalds@linux-foundation.org \
--cc=akpm@linux-foundation.org \
--cc=catalin.marinas@arm.com \
--cc=jack@suse.cz \
--cc=kernel-team@android.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=kirill@shutemov.name \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=minchan@kernel.org \
--cc=vinmenon@codeaurora.org \
--cc=will@kernel.org \
--cc=willy@infradead.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.