diff options
Diffstat (limited to 'include/linux/mm_inline.h')
| -rw-r--r-- | include/linux/mm_inline.h | 57 |
1 files changed, 2 insertions, 55 deletions
diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h index a8430a7ae054..621c8653d8f7 100644 --- a/include/linux/mm_inline.h +++ b/include/linux/mm_inline.h @@ -566,59 +566,6 @@ static inline pte_marker copy_pte_marker( return dstm; } -/* - * If this pte is wr-protected by uffd-wp in any form, arm the special pte to - * replace a none pte. NOTE! This should only be called when *pte is already - * cleared so we will never accidentally replace something valuable. Meanwhile - * none pte also means we are not demoting the pte so tlb flushed is not needed. - * E.g., when pte cleared the caller should have taken care of the tlb flush. - * - * Must be called with pgtable lock held so that no thread will see the none - * pte, and if they see it, they'll fault and serialize at the pgtable lock. - * - * Returns true if an uffd-wp pte was installed, false otherwise. - */ -static inline bool -pte_install_uffd_wp_if_needed(struct vm_area_struct *vma, unsigned long addr, - pte_t *pte, pte_t pteval) -{ - bool arm_uffd_pte = false; - - if (!uffd_supports_wp_marker()) - return false; - - /* The current status of the pte should be "cleared" before calling */ - WARN_ON_ONCE(!pte_none(ptep_get(pte))); - - /* - * NOTE: userfaultfd_wp_unpopulated() doesn't need this whole - * thing, because when zapping either it means it's dropping the - * page, or in TTU where the present pte will be quickly replaced - * with a swap pte. There's no way of leaking the bit. - */ - if (vma_is_anonymous(vma) || !userfaultfd_wp(vma)) - return false; - - /* A uffd-wp wr-protected normal pte */ - if (unlikely(pte_present(pteval) && pte_uffd_wp(pteval))) - arm_uffd_pte = true; - - /* - * A uffd-wp wr-protected swap pte. Note: this should even cover an - * existing pte marker with uffd-wp bit set. - */ - if (unlikely(pte_swp_uffd_wp_any(pteval))) - arm_uffd_pte = true; - - if (unlikely(arm_uffd_pte)) { - set_pte_at(vma->vm_mm, addr, pte, - make_pte_marker(PTE_MARKER_UFFD_WP)); - return true; - } - - return false; -} - static inline bool vma_has_recency(const struct vm_area_struct *vma) { if (vma->vm_flags & (VM_SEQ_READ | VM_RAND_READ)) @@ -650,7 +597,7 @@ static inline bool vma_has_recency(const struct vm_area_struct *vma) static inline size_t num_pages_contiguous(struct page **pages, size_t nr_pages) { struct page *cur_page = pages[0]; - unsigned long section = memdesc_section(cur_page->flags); + unsigned long section = memdesc_section(&cur_page->flags); size_t i; for (i = 1; i < nr_pages; i++) { @@ -660,7 +607,7 @@ static inline size_t num_pages_contiguous(struct page **pages, size_t nr_pages) * In unproblematic kernel configs, page_to_section() == 0 and * the whole check will get optimized out. */ - if (memdesc_section(cur_page->flags) != section) + if (memdesc_section(&cur_page->flags) != section) break; } |
