[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 06/13] mm/vma: convert vm_pgprot_modify() to use vma_flags_t and rename



Update vm_pgprot_modify() to use the new VMA flags type vma_flags_t, and
rename to vma_pgprot_modify() accordingly.

This is part of the ongoing work to convert vm_flags_t to vma_flags_t, in
order to eliminate the arbitrary limit of the number of bits in a system
word on available VMA flags.

Update VMA userland tests accordingly, updating vma_set_page_prot() to no
longer inline vma_pgprot_modify(), rather we can simply define
vma_pgprot_modify() as a static inline function and the tests will pick it
up from vma.h.

No functional change intended.

Signed-off-by: Lorenzo Stoakes <ljs@xxxxxxxxxx>
---
 mm/mmap.c                       |  8 ++++----
 mm/vma.c                        |  2 +-
 mm/vma.h                        |  6 ++++--
 tools/testing/vma/include/dup.h | 12 +++++-------
 4 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/mm/mmap.c b/mm/mmap.c
index 477f4a77361a..e834ec9273e3 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -80,13 +80,13 @@ core_param(ignore_rlimit_data, ignore_rlimit_data, bool, 
0644);
 /* Update vma->vm_page_prot to reflect vma->vm_flags. */
 void vma_set_page_prot(struct vm_area_struct *vma)
 {
-       vm_flags_t vm_flags = vma->vm_flags;
+       vma_flags_t vma_flags = vma->flags;
        pgprot_t vm_page_prot;
 
-       vm_page_prot = vm_pgprot_modify(vma->vm_page_prot, vm_flags);
+       vm_page_prot = vma_pgprot_modify(vma->vm_page_prot, vma_flags);
        if (vma_wants_writenotify(vma, vm_page_prot)) {
-               vm_flags &= ~VM_SHARED;
-               vm_page_prot = vm_pgprot_modify(vm_page_prot, vm_flags);
+               vma_flags_clear(&vma_flags, VMA_SHARED_BIT);
+               vm_page_prot = vma_pgprot_modify(vm_page_prot, vma_flags);
        }
        /* remove_protection_ptes reads vma->vm_page_prot without mmap_lock */
        WRITE_ONCE(vma->vm_page_prot, vm_page_prot);
diff --git a/mm/vma.c b/mm/vma.c
index fb4341943576..395b6619ecc1 100644
--- a/mm/vma.c
+++ b/mm/vma.c
@@ -2179,7 +2179,7 @@ bool vma_wants_writenotify(struct vm_area_struct *vma, 
pgprot_t vm_page_prot)
        /* The open routine did something to the protections that pgprot_modify
         * won't preserve? */
        if (pgprot_val(vm_page_prot) !=
-           pgprot_val(vm_pgprot_modify(vm_page_prot, vma->vm_flags)))
+           pgprot_val(vma_pgprot_modify(vm_page_prot, vma->flags)))
                return false;
 
        /*
diff --git a/mm/vma.h b/mm/vma.h
index bcf0c2773449..6a8abb8ae937 100644
--- a/mm/vma.h
+++ b/mm/vma.h
@@ -522,9 +522,11 @@ static inline bool 
vma_wants_manual_pte_write_upgrade(struct vm_area_struct *vma
 }
 
 #ifdef CONFIG_MMU
-static inline pgprot_t vm_pgprot_modify(pgprot_t oldprot, vm_flags_t vm_flags)
+static inline pgprot_t vma_pgprot_modify(pgprot_t oldprot, vma_flags_t 
vma_flags)
 {
-       return pgprot_modify(oldprot, vm_get_page_prot(vm_flags));
+       const pgprot_t prot = vma_get_page_prot(vma_flags);
+
+       return pgprot_modify(oldprot, prot);
 }
 #endif
 
diff --git a/tools/testing/vma/include/dup.h b/tools/testing/vma/include/dup.h
index 6f5bcd7fbcd8..813044781719 100644
--- a/tools/testing/vma/include/dup.h
+++ b/tools/testing/vma/include/dup.h
@@ -1434,20 +1434,18 @@ struct vm_area_struct *vma_iter_next_range(struct 
vma_iterator *vmi)
 }
 
 bool vma_wants_writenotify(struct vm_area_struct *vma, pgprot_t vm_page_prot);
+static inline pgprot_t vma_pgprot_modify(pgprot_t oldprot, vma_flags_t 
vma_flags);
 
 /* Update vma->vm_page_prot to reflect vma->vm_flags. */
 static inline void vma_set_page_prot(struct vm_area_struct *vma)
 {
-       vm_flags_t vm_flags = vma->vm_flags;
+       vma_flags_t vma_flags = vma->flags;
        pgprot_t vm_page_prot;
 
-       /* testing: we inline vm_pgprot_modify() to avoid clash with vma.h. */
-       vm_page_prot = pgprot_modify(vma->vm_page_prot, 
vm_get_page_prot(vm_flags));
-
+       vm_page_prot = vma_pgprot_modify(vma->vm_page_prot, vma_flags);
        if (vma_wants_writenotify(vma, vm_page_prot)) {
-               vm_flags &= ~VM_SHARED;
-               /* testing: we inline vm_pgprot_modify() to avoid clash with 
vma.h. */
-               vm_page_prot = pgprot_modify(vm_page_prot, 
vm_get_page_prot(vm_flags));
+               vma_flags_clear(&vma_flags, VMA_SHARED_BIT);
+               vm_page_prot = vma_pgprot_modify(vm_page_prot, vma_flags);
        }
        /* remove_protection_ptes reads vma->vm_page_prot without mmap_lock */
        WRITE_ONCE(vma->vm_page_prot, vm_page_prot);
-- 
2.54.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.