lkml.org 
[lkml]   [2021]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 20/26] mm/hugetlb: Introduce huge version of special swap pte helpers
    Date
    This is to let hugetlbfs be prepared to also recognize swap special ptes just
    like uffd-wp special swap ptes.

    Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
    Signed-off-by: Peter Xu <peterx@redhat.com>
    ---
    mm/hugetlb.c | 24 ++++++++++++++++++++++--
    1 file changed, 22 insertions(+), 2 deletions(-)

    diff --git a/mm/hugetlb.c b/mm/hugetlb.c
    index 4edb3ee885ea..517ee30f272c 100644
    --- a/mm/hugetlb.c
    +++ b/mm/hugetlb.c
    @@ -95,6 +95,26 @@ static inline bool subpool_is_free(struct hugepage_subpool *spool)
    return true;
    }

    +/*
    + * These are sister versions of is_swap_pte() and pte_has_swap_entry(). We
    + * need standalone ones because huge_pte_none() is handled differently from
    + * pte_none(). For more information, please refer to comments above
    + * is_swap_pte() and pte_has_swap_entry().
    + *
    + * Here we directly reuse the pte level of swap special ptes, for example, the
    + * pte_swp_uffd_wp_special(). It just stands for a huge page rather than a
    + * small page for hugetlbfs pages.
    + */
    +static inline bool is_huge_swap_pte(pte_t pte)
    +{
    + return !huge_pte_none(pte) && !pte_present(pte);
    +}
    +
    +static inline bool huge_pte_has_swap_entry(pte_t pte)
    +{
    + return is_huge_swap_pte(pte) && !is_swap_special_pte(pte);
    +}
    +
    static inline void unlock_or_release_subpool(struct hugepage_subpool *spool,
    unsigned long irq_flags)
    {
    @@ -4138,7 +4158,7 @@ bool is_hugetlb_entry_migration(pte_t pte)
    {
    swp_entry_t swp;

    - if (huge_pte_none(pte) || pte_present(pte))
    + if (!huge_pte_has_swap_entry(pte))
    return false;
    swp = pte_to_swp_entry(pte);
    if (is_migration_entry(swp))
    @@ -4151,7 +4171,7 @@ static bool is_hugetlb_entry_hwpoisoned(pte_t pte)
    {
    swp_entry_t swp;

    - if (huge_pte_none(pte) || pte_present(pte))
    + if (!huge_pte_has_swap_entry(pte))
    return false;
    swp = pte_to_swp_entry(pte);
    if (is_hwpoison_entry(swp))
    --
    2.31.1
    \
     
     \ /
      Last update: 2021-07-15 22:19    [W:2.214 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site