From: David Hildenbrand <david@redhat.com>
To: Matthew Wilcox <willy@infradead.org>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
linux-s390@vger.kernel.org, kvm@vger.kernel.org,
Heiko Carstens <hca@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Sven Schnelle <svens@linux.ibm.com>,
Janosch Frank <frankja@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
Gerald Schaefer <gerald.schaefer@linux.ibm.com>,
Thomas Huth <thuth@redhat.com>
Subject: Re: [PATCH v1 0/5] s390: page_mapcount(), page_has_private() and PG_arch_1
Date: Fri, 5 Apr 2024 09:07:16 +0200 [thread overview]
Message-ID: <3bae9c8b-d723-4a08-8579-fa6f3ea508e8@redhat.com> (raw)
In-Reply-To: <Zg9zOJowhmOozmcp@casper.infradead.org>
On 05.04.24 05:42, Matthew Wilcox wrote:
> On Thu, Apr 04, 2024 at 06:36:37PM +0200, David Hildenbrand wrote:
>> On my journey to remove page_mapcount(), I got hooked up on other folio
>> cleanups that Willy most certainly will enjoy.
>>
>> This series removes the s390x usage of:
>> * page_mapcount() [patches WIP]
>> * page_has_private() [have patches to remove it]
>>
>> ... and makes PG_arch_1 only be set on folio->flags (i.e., never on tail
>> pages of large folios).
>>
>> Further, one "easy" fix upfront.
>
> Looks like you didn't see:
>
> https://lore.kernel.org/linux-s390/20240322161149.2327518-1-willy@infradead.org/
Yes, I only skimmed linux-mm.
I think s390x certainly wants to handle PTE-mapped THP in that code, I
think there are ways to trigger that, we're just mostly lucky that it
doesn't happen in the common case.
But thinking about it, the current page_mapcount() based check could not
possibly have worked for them and rejected any PTE-mapped THP.
So I can just base my changes on top of yours (we might want to get the
first fix in ahead of time).
>
>> ... unfortunately there is one other issue I spotted that I am not
>> tackling in this series, because I am not 100% sure what we want to
>> do: the usage of page_ref_freeze()/folio_ref_freeze() in
>> make_folio_secure() is unsafe. :(
>>
>> In make_folio_secure(), we're holding the folio lock, the mmap lock and
>> the PT lock. So we are protected against concurrent fork(), zap, GUP,
>> swapin, migration ... The page_ref_freeze()/ folio_ref_freeze() should
>> also block concurrent GUP-fast very reliably.
>>
>> But if the folio is mapped into multiple page tables, we could see
>> concurrent zapping of the folio, a pagecache folios could get mapped/
>> accessed concurrent, we could see fork() sharing the page in another
>> process, GUP ... trying to adjust the folio refcount while we froze it.
>> Very bad.
>
> Hmmm. Why is that not then a problem for, eg, splitting or migrating?
> Is it because they unmap first and then try to freeze?
Yes, exactly. Using mapcount in combination with ref freezing is
problematic. Except maybe for anonymous folios with mapcount=1, while
holding a bunch of locks to stop anybody from stumbling over that.
--
Cheers,
David / dhildenb
prev parent reply other threads:[~2024-04-05 7:07 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-04 16:36 [PATCH v1 0/5] s390: page_mapcount(), page_has_private() and PG_arch_1 David Hildenbrand
2024-04-04 16:36 ` [PATCH v1 1/5] s390/uv: don't call wait_on_page_writeback() without a reference David Hildenbrand
2024-04-10 17:21 ` Claudio Imbrenda
2024-04-11 8:24 ` David Hildenbrand
2024-04-11 13:13 ` Alexander Gordeev
2024-04-04 16:36 ` [PATCH v1 2/5] s390/uv: convert gmap_make_secure() to work on folios David Hildenbrand
2024-04-05 3:29 ` Matthew Wilcox
2024-04-05 7:09 ` David Hildenbrand
2024-04-10 17:32 ` Claudio Imbrenda
2024-04-10 17:31 ` Claudio Imbrenda
2024-04-11 9:09 ` David Hildenbrand
2024-04-04 16:36 ` [PATCH v1 3/5] s390/uv: convert PG_arch_1 users to only work on small folios David Hildenbrand
2024-04-05 3:36 ` Matthew Wilcox
2024-04-11 10:41 ` David Hildenbrand
2024-04-10 17:42 ` Claudio Imbrenda
2024-04-11 10:38 ` David Hildenbrand
2024-04-04 16:36 ` [PATCH v1 4/5] s390/uv: update PG_arch_1 comment David Hildenbrand
2024-04-10 17:19 ` Claudio Imbrenda
2024-04-04 16:36 ` [PATCH v1 5/5] s390/hugetlb: convert PG_arch_1 code to work on folio->flags David Hildenbrand
2024-04-05 3:42 ` [PATCH v1 0/5] s390: page_mapcount(), page_has_private() and PG_arch_1 Matthew Wilcox
2024-04-05 7:07 ` David Hildenbrand [this message]
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=3bae9c8b-d723-4a08-8579-fa6f3ea508e8@redhat.com \
--to=david@redhat.com \
--cc=agordeev@linux.ibm.com \
--cc=borntraeger@linux.ibm.com \
--cc=frankja@linux.ibm.com \
--cc=gerald.schaefer@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-s390@vger.kernel.org \
--cc=svens@linux.ibm.com \
--cc=thuth@redhat.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox