[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <0f2bc27e-af1a-4590-985a-dc6bacdbcd57@redhat.com>
Date: Tue, 5 Dec 2023 14:50:34 +0100
From: David Hildenbrand <david@...hat.com>
To: Ryan Roberts <ryan.roberts@....com>, linux-kernel@...r.kernel.org
Cc: linux-mm@...ck.org, Andrew Morton <akpm@...ux-foundation.org>,
"Matthew Wilcox (Oracle)" <willy@...radead.org>,
Hugh Dickins <hughd@...gle.com>,
Yin Fengwei <fengwei.yin@...el.com>,
Mike Kravetz <mike.kravetz@...cle.com>,
Muchun Song <muchun.song@...ux.dev>,
Peter Xu <peterx@...hat.com>
Subject: Re: [PATCH RFC 34/39] mm/rmap: introduce
folio_try_dup_anon_rmap_[pte|ptes|pmd]()
On 05.12.23 14:40, Ryan Roberts wrote:
> On 05/12/2023 13:18, David Hildenbrand wrote:
>> On 05.12.23 14:17, David Hildenbrand wrote:
>>> On 05.12.23 14:12, Ryan Roberts wrote:
>>>> On 04/12/2023 14:21, David Hildenbrand wrote:
>>>>> The last user of page_needs_cow_for_dma() and __page_dup_rmap() are gone,
>>>>> remove them.
>>>>>
>>>>> Add folio_try_dup_anon_rmap_ptes() right away, we want to perform rmap
>>>>> baching during fork() soon.
>>>>>
>>>>> Signed-off-by: David Hildenbrand <david@...hat.com>
>>>>> ---
>>>>> include/linux/mm.h | 6 --
>>>>> include/linux/rmap.h | 145 +++++++++++++++++++++++++++++--------------
>>>>> 2 files changed, 100 insertions(+), 51 deletions(-)
>>>>>
>>>>> diff --git a/include/linux/mm.h b/include/linux/mm.h
>>>>> index 24c1c7c5a99c0..f7565b35ae931 100644
>>>>> --- a/include/linux/mm.h
>>>>> +++ b/include/linux/mm.h
>>>>> @@ -1964,12 +1964,6 @@ static inline bool folio_needs_cow_for_dma(struct
>>>>> vm_area_struct *vma,
>>>>> return folio_maybe_dma_pinned(folio);
>>>>> }
>>>>> -static inline bool page_needs_cow_for_dma(struct vm_area_struct *vma,
>>>>> - struct page *page)
>>>>> -{
>>>>> - return folio_needs_cow_for_dma(vma, page_folio(page));
>>>>> -}
>>>>> -
>>>>> /**
>>>>> * is_zero_page - Query if a page is a zero page
>>>>> * @page: The page to query
>>>>> diff --git a/include/linux/rmap.h b/include/linux/rmap.h
>>>>> index 21d72cc602adc..84439f7720c62 100644
>>>>> --- a/include/linux/rmap.h
>>>>> +++ b/include/linux/rmap.h
>>>>> @@ -354,68 +354,123 @@ static inline void folio_dup_file_rmap_pmd(struct
>>>>> folio *folio,
>>>>> #endif
>>>>> }
>>>>> -static inline void __page_dup_rmap(struct page *page, bool compound)
>>>>> +static inline int __folio_try_dup_anon_rmap(struct folio *folio,
>>>>
>>>> __always_inline?
>>>
>>> Yes.
>>
>> Ah, no, I did this for a reason. This function lives in a header, so it will
>> always be inlined.
>>
>
> Really? It will certainly be duplicated across every compilation unit, but
> that's separate from being inlined - if the optimizer is off, won't it just end
> up as an out-of-line function in every compilation unit?
Good point, I didn't really consider that here, and thinking about it it
makes perfect sense.
I think the compiler might even ignore "always_inline". I read that
especially with recursion the compiler might ignore that. But people can
then complain to the compiler writers about performance issues here, we
told the compiler what we think is best.
--
Cheers,
David / dhildenb
Powered by blists - more mailing lists