From: David Hildenbrand <david@redhat.com>
To: Mike Kravetz <mike.kravetz@oracle.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Cc: Naoya Horiguchi <naoya.horiguchi@linux.dev>,
Axel Rasmussen <axelrasmussen@google.com>,
Mina Almasry <almasrymina@google.com>,
Peter Xu <peterx@redhat.com>, Nadav Amit <nadav.amit@gmail.com>,
Rik van Riel <riel@surriel.com>, Vlastimil Babka <vbabka@suse.cz>,
Matthew Wilcox <willy@infradead.org>,
Andrew Morton <akpm@linux-foundation.org>,
Wei Chen <harperchen1110@gmail.com>,
stable@vger.kernel.org
Subject: Re: [PATCH v9 1/3] madvise: use zap_page_range_single for madvise dontneed
Date: Mon, 14 Nov 2022 10:05:29 +0100 [thread overview]
Message-ID: <3d3e48cc-687c-8d4e-1e33-c34fb76c284f@redhat.com> (raw)
In-Reply-To: <20221111232628.290160-2-mike.kravetz@oracle.com>
On 12.11.22 00:26, Mike Kravetz wrote:
> Expose the routine zap_page_range_single to zap a range within a single
> vma. The madvise routine madvise_dontneed_single_vma can use this
> routine as it explicitly operates on a single vma. Also, update the mmu
> notification range in zap_page_range_single to take hugetlb pmd sharing
> into account. This is required as MADV_DONTNEED supports hugetlb vmas.
>
> Fixes: 90e7e7f5ef3f ("mm: enable MADV_DONTNEED for hugetlb mappings")
> Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
> Reported-by: Wei Chen <harperchen1110@gmail.com>
> Cc: <stable@vger.kernel.org>
[...]
>
> -/*
> - * Parameter block passed down to zap_pte_range in exceptional cases.
> - */
> -struct zap_details {
> - struct folio *single_folio; /* Locked folio to be unmapped */
> - bool even_cows; /* Zap COWed private pages too? */
> - zap_flags_t zap_flags; /* Extra flags for zapping */
> -};
> -
> /* Whether we should zap all COWed (private) pages too */
> static inline bool should_zap_cows(struct zap_details *details)
> {
> @@ -1736,19 +1727,27 @@ void zap_page_range(struct vm_area_struct *vma, unsigned long start,
> *
> * The range must fit into one VMA.
> */
> -static void zap_page_range_single(struct vm_area_struct *vma, unsigned long address,
> +void zap_page_range_single(struct vm_area_struct *vma, unsigned long address,
> unsigned long size, struct zap_details *details)
> {
> + unsigned long end = address + size;
Could make that const.
> struct mmu_notifier_range range;
> struct mmu_gather tlb;
>
> lru_add_drain();
> mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, vma->vm_mm,
> - address, address + size);
> + address, end);
> + if (is_vm_hugetlb_page(vma))
> + adjust_range_if_pmd_sharing_possible(vma, &range.start,
> + &range.end);
> tlb_gather_mmu(&tlb, vma->vm_mm);
> update_hiwater_rss(vma->vm_mm);
> mmu_notifier_invalidate_range_start(&range);
> - unmap_single_vma(&tlb, vma, address, range.end, details);
> + /*
> + * unmap 'address-end' not 'range.start-range.end' as range
> + * could have been expanded for hugetlb pmd sharing.
> + */
> + unmap_single_vma(&tlb, vma, address, end, details);
> mmu_notifier_invalidate_range_end(&range);
> tlb_finish_mmu(&tlb);
> }
Acked-by: David Hildenbrand <david@redhat.com>
--
Thanks,
David / dhildenb
next prev parent reply other threads:[~2022-11-14 9:05 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-11 23:26 [PATCH v9 0/3] fix hugetlb MADV_DONTNEED vma_lock handling Mike Kravetz
2022-11-11 23:26 ` [PATCH v9 1/3] madvise: use zap_page_range_single for madvise dontneed Mike Kravetz
2022-11-14 9:05 ` David Hildenbrand [this message]
2022-11-11 23:26 ` [PATCH v9 2/3] hugetlb: remove duplicate mmu notifications Mike Kravetz
2022-11-14 9:06 ` David Hildenbrand
2022-11-14 19:30 ` Mike Kravetz
2022-11-11 23:26 ` [PATCH v9 3/3] hugetlb: don't delete vma_lock in hugetlb MADV_DONTNEED processing Mike Kravetz
2022-11-12 19:37 ` [PATCH v9 0/3] fix hugetlb MADV_DONTNEED vma_lock handling Nadav Amit
2022-11-14 0:09 ` Peter Xu
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=3d3e48cc-687c-8d4e-1e33-c34fb76c284f@redhat.com \
--to=david@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=almasrymina@google.com \
--cc=axelrasmussen@google.com \
--cc=harperchen1110@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mike.kravetz@oracle.com \
--cc=nadav.amit@gmail.com \
--cc=naoya.horiguchi@linux.dev \
--cc=peterx@redhat.com \
--cc=riel@surriel.com \
--cc=stable@vger.kernel.org \
--cc=vbabka@suse.cz \
--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