lkml.org 
[lkml]   [2014]   [Oct]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 09/17] mm: PT lock: export double_pt_lock/unlock
    Date
    Those two helpers are needed by remap_anon_pages.

    Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
    ---
    include/linux/mm.h | 4 ++++
    mm/fremap.c | 29 +++++++++++++++++++++++++++++
    2 files changed, 33 insertions(+)

    diff --git a/include/linux/mm.h b/include/linux/mm.h
    index bf3df07..71dbe03 100644
    --- a/include/linux/mm.h
    +++ b/include/linux/mm.h
    @@ -1408,6 +1408,10 @@ static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long a
    }
    #endif /* CONFIG_MMU && !__ARCH_HAS_4LEVEL_HACK */

    +/* mm/fremap.c */
    +extern void double_pt_lock(spinlock_t *ptl1, spinlock_t *ptl2);
    +extern void double_pt_unlock(spinlock_t *ptl1, spinlock_t *ptl2);
    +
    #if USE_SPLIT_PTE_PTLOCKS
    #if ALLOC_SPLIT_PTLOCKS
    void __init ptlock_cache_init(void);
    diff --git a/mm/fremap.c b/mm/fremap.c
    index 72b8fa3..1e509f7 100644
    --- a/mm/fremap.c
    +++ b/mm/fremap.c
    @@ -281,3 +281,32 @@ out_freed:

    return err;
    }
    +
    +void double_pt_lock(spinlock_t *ptl1,
    + spinlock_t *ptl2)
    + __acquires(ptl1)
    + __acquires(ptl2)
    +{
    + spinlock_t *ptl_tmp;
    +
    + if (ptl1 > ptl2) {
    + /* exchange ptl1 and ptl2 */
    + ptl_tmp = ptl1;
    + ptl1 = ptl2;
    + ptl2 = ptl_tmp;
    + }
    + /* lock in virtual address order to avoid lock inversion */
    + spin_lock(ptl1);
    + if (ptl1 != ptl2)
    + spin_lock_nested(ptl2, SINGLE_DEPTH_NESTING);
    +}
    +
    +void double_pt_unlock(spinlock_t *ptl1,
    + spinlock_t *ptl2)
    + __releases(ptl1)
    + __releases(ptl2)
    +{
    + spin_unlock(ptl1);
    + if (ptl1 != ptl2)
    + spin_unlock(ptl2);
    +}

    \
     
     \ /
      Last update: 2014-10-03 20:01    [W:4.461 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site