lkml.org 
[lkml]   [2023]   [May]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 16/23] s390: gmap use pte_unmap_unlock() not spin_unlock()
    pte_alloc_map_lock() expects to be followed by pte_unmap_unlock(): to
    keep balance in future, pass ptep as well as ptl to gmap_pte_op_end(),
    and use pte_unmap_unlock() instead of direct spin_unlock() (even though
    ptep ends up unused inside the macro).

    Signed-off-by: Hugh Dickins <hughd@google.com>
    ---
    arch/s390/mm/gmap.c | 22 +++++++++++-----------
    1 file changed, 11 insertions(+), 11 deletions(-)

    diff --git a/arch/s390/mm/gmap.c b/arch/s390/mm/gmap.c
    index d198fc9475a2..638dcd9bc820 100644
    --- a/arch/s390/mm/gmap.c
    +++ b/arch/s390/mm/gmap.c
    @@ -895,12 +895,12 @@ static int gmap_pte_op_fixup(struct gmap *gmap, unsigned long gaddr,

    /**
    * gmap_pte_op_end - release the page table lock
    - * @ptl: pointer to the spinlock pointer
    + * @ptep: pointer to the locked pte
    + * @ptl: pointer to the page table spinlock
    */
    -static void gmap_pte_op_end(spinlock_t *ptl)
    +static void gmap_pte_op_end(pte_t *ptep, spinlock_t *ptl)
    {
    - if (ptl)
    - spin_unlock(ptl);
    + pte_unmap_unlock(ptep, ptl);
    }

    /**
    @@ -1011,7 +1011,7 @@ static int gmap_protect_pte(struct gmap *gmap, unsigned long gaddr,
    {
    int rc;
    pte_t *ptep;
    - spinlock_t *ptl = NULL;
    + spinlock_t *ptl;
    unsigned long pbits = 0;

    if (pmd_val(*pmdp) & _SEGMENT_ENTRY_INVALID)
    @@ -1025,7 +1025,7 @@ static int gmap_protect_pte(struct gmap *gmap, unsigned long gaddr,
    pbits |= (bits & GMAP_NOTIFY_SHADOW) ? PGSTE_VSIE_BIT : 0;
    /* Protect and unlock. */
    rc = ptep_force_prot(gmap->mm, gaddr, ptep, prot, pbits);
    - gmap_pte_op_end(ptl);
    + gmap_pte_op_end(ptep, ptl);
    return rc;
    }

    @@ -1154,7 +1154,7 @@ int gmap_read_table(struct gmap *gmap, unsigned long gaddr, unsigned long *val)
    /* Do *NOT* clear the _PAGE_INVALID bit! */
    rc = 0;
    }
    - gmap_pte_op_end(ptl);
    + gmap_pte_op_end(ptep, ptl);
    }
    if (!rc)
    break;
    @@ -1248,7 +1248,7 @@ static int gmap_protect_rmap(struct gmap *sg, unsigned long raddr,
    if (!rc)
    gmap_insert_rmap(sg, vmaddr, rmap);
    spin_unlock(&sg->guest_table_lock);
    - gmap_pte_op_end(ptl);
    + gmap_pte_op_end(ptep, ptl);
    }
    radix_tree_preload_end();
    if (rc) {
    @@ -2156,7 +2156,7 @@ int gmap_shadow_page(struct gmap *sg, unsigned long saddr, pte_t pte)
    tptep = (pte_t *) gmap_table_walk(sg, saddr, 0);
    if (!tptep) {
    spin_unlock(&sg->guest_table_lock);
    - gmap_pte_op_end(ptl);
    + gmap_pte_op_end(sptep, ptl);
    radix_tree_preload_end();
    break;
    }
    @@ -2167,7 +2167,7 @@ int gmap_shadow_page(struct gmap *sg, unsigned long saddr, pte_t pte)
    rmap = NULL;
    rc = 0;
    }
    - gmap_pte_op_end(ptl);
    + gmap_pte_op_end(sptep, ptl);
    spin_unlock(&sg->guest_table_lock);
    }
    radix_tree_preload_end();
    @@ -2495,7 +2495,7 @@ void gmap_sync_dirty_log_pmd(struct gmap *gmap, unsigned long bitmap[4],
    continue;
    if (ptep_test_and_clear_uc(gmap->mm, vmaddr, ptep))
    set_bit(i, bitmap);
    - spin_unlock(ptl);
    + pte_unmap_unlock(ptep, ptl);
    }
    }
    gmap_pmd_op_end(gmap, pmdp);
    --
    2.35.3
    \
     
     \ /
      Last update: 2023-05-10 07:03    [W:7.861 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site