[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <96503fba082709bc4894ba4134f9fac1d179ba93.1747686021.git.lorenzo.stoakes@oracle.com>
Date: Mon, 19 May 2025 21:52:38 +0100
From: Lorenzo Stoakes <lorenzo.stoakes@...cle.com>
To: Andrew Morton <akpm@...ux-foundation.org>
Cc: "Liam R . Howlett" <Liam.Howlett@...cle.com>,
David Hildenbrand <david@...hat.com>, Vlastimil Babka <vbabka@...e.cz>,
Jann Horn <jannh@...gle.com>, Arnd Bergmann <arnd@...db.de>,
Christian Brauner <brauner@...nel.org>, linux-mm@...ck.org,
linux-arch@...r.kernel.org, linux-kernel@...r.kernel.org,
SeongJae Park <sj@...nel.org>, Usama Arif <usamaarif642@...il.com>
Subject: [RFC PATCH 1/5] mm: madvise: refactor madvise_populate()
Use a for-loop rather than a while with the update of the start argument at
the end of the while-loop.
This is in preparation for a subsequent commit which modifies this
function, we therefore separate the refactoring from the actual change
cleanly by separating the two.
Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@...cle.com>
---
mm/madvise.c | 39 ++++++++++++++++++++-------------------
1 file changed, 20 insertions(+), 19 deletions(-)
diff --git a/mm/madvise.c b/mm/madvise.c
index 8433ac9b27e0..63cc69daa4c7 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -967,32 +967,33 @@ static long madvise_populate(struct mm_struct *mm, unsigned long start,
int locked = 1;
long pages;
- while (start < end) {
+ for (; start < end; start += pages * PAGE_SIZE) {
/* Populate (prefault) page tables readable/writable. */
pages = faultin_page_range(mm, start, end, write, &locked);
if (!locked) {
mmap_read_lock(mm);
locked = 1;
}
- if (pages < 0) {
- switch (pages) {
- case -EINTR:
- return -EINTR;
- case -EINVAL: /* Incompatible mappings / permissions. */
- return -EINVAL;
- case -EHWPOISON:
- return -EHWPOISON;
- case -EFAULT: /* VM_FAULT_SIGBUS or VM_FAULT_SIGSEGV */
- return -EFAULT;
- default:
- pr_warn_once("%s: unhandled return value: %ld\n",
- __func__, pages);
- fallthrough;
- case -ENOMEM: /* No VMA or out of memory. */
- return -ENOMEM;
- }
+
+ if (pages >= 0)
+ continue;
+
+ switch (pages) {
+ case -EINTR:
+ return -EINTR;
+ case -EINVAL: /* Incompatible mappings / permissions. */
+ return -EINVAL;
+ case -EHWPOISON:
+ return -EHWPOISON;
+ case -EFAULT: /* VM_FAULT_SIGBUS or VM_FAULT_SIGSEGV */
+ return -EFAULT;
+ default:
+ pr_warn_once("%s: unhandled return value: %ld\n",
+ __func__, pages);
+ fallthrough;
+ case -ENOMEM: /* No VMA or out of memory. */
+ return -ENOMEM;
}
- start += pages * PAGE_SIZE;
}
return 0;
}
--
2.49.0
Powered by blists - more mailing lists