qemu-devel
[Top][All Lists]
Advanced

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

[RFC PATCH 3/6] mm: mempolicy: Refactor out __mpol_set_shared_policy()


From: Ackerley Tng
Subject: [RFC PATCH 3/6] mm: mempolicy: Refactor out __mpol_set_shared_policy()
Date: Fri, 14 Apr 2023 00:11:52 +0000

Refactor out __mpol_set_shared_policy() to remove dependency on struct
vm_area_struct, since only 2 parameters from struct vm_area_struct are
used.

__mpol_set_shared_policy() will be used in a later patch by
restrictedmem_set_shared_policy().

Signed-off-by: Ackerley Tng <ackerleytng@google.com>
---
 include/linux/mempolicy.h |  2 ++
 mm/mempolicy.c            | 29 +++++++++++++++++++----------
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h
index d232de7cdc56..9a2a2dd95432 100644
--- a/include/linux/mempolicy.h
+++ b/include/linux/mempolicy.h
@@ -126,6 +126,8 @@ struct shared_policy {
 
 int vma_dup_policy(struct vm_area_struct *src, struct vm_area_struct *dst);
 void mpol_shared_policy_init(struct shared_policy *sp, struct mempolicy *mpol);
+int __mpol_set_shared_policy(struct shared_policy *info, struct mempolicy 
*mpol,
+                            unsigned long pgoff_start, unsigned long npages);
 int mpol_set_shared_policy(struct shared_policy *info,
                                struct vm_area_struct *vma,
                                struct mempolicy *new);
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index a2655b626731..f3fa5494e4a8 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -2817,30 +2817,39 @@ void mpol_shared_policy_init(struct shared_policy *sp, 
struct mempolicy *mpol)
        }
 }
 
-int mpol_set_shared_policy(struct shared_policy *info,
-                       struct vm_area_struct *vma, struct mempolicy *npol)
+int __mpol_set_shared_policy(struct shared_policy *info, struct mempolicy 
*mpol,
+                            unsigned long pgoff_start, unsigned long npages)
 {
        int err;
        struct sp_node *new = NULL;
-       unsigned long sz = vma_pages(vma);
+       unsigned long pgoff_end = pgoff_start + npages;
 
        pr_debug("set_shared_policy %lx sz %lu %d %d %lx\n",
-                vma->vm_pgoff,
-                sz, npol ? npol->mode : -1,
-                npol ? npol->flags : -1,
-                npol ? nodes_addr(npol->nodes)[0] : NUMA_NO_NODE);
+                pgoff_start, npages,
+                mpol ? mpol->mode : -1,
+                mpol ? mpol->flags : -1,
+                mpol ? nodes_addr(mpol->nodes)[0] : NUMA_NO_NODE);
 
-       if (npol) {
-               new = sp_alloc(vma->vm_pgoff, vma->vm_pgoff + sz, npol);
+       if (mpol) {
+               new = sp_alloc(pgoff_start, pgoff_end, mpol);
                if (!new)
                        return -ENOMEM;
        }
-       err = shared_policy_replace(info, vma->vm_pgoff, vma->vm_pgoff+sz, new);
+
+       err = shared_policy_replace(info, pgoff_start, pgoff_end, new);
+
        if (err && new)
                sp_free(new);
+
        return err;
 }
 
+int mpol_set_shared_policy(struct shared_policy *info,
+                       struct vm_area_struct *vma, struct mempolicy *mpol)
+{
+       return __mpol_set_shared_policy(info, mpol, vma->vm_pgoff, 
vma_pages(vma));
+}
+
 /* Free a backing policy store on inode delete. */
 void mpol_free_shared_policy(struct shared_policy *p)
 {
-- 
2.40.0.634.g4ca3ef3211-goog




reply via email to

[Prev in Thread] Current Thread [Next in Thread]