* [PATCH 0/3] minor cleanups for page_ext
@ 2023-07-14 11:47 Kemeng Shi
2023-07-14 11:47 ` [PATCH 1/3] mm/page_ext: remove unused return value of offline_page_ext Kemeng Shi
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Kemeng Shi @ 2023-07-14 11:47 UTC (permalink / raw)
To: akpm, linux-mm, linux-kernel; +Cc: shikemeng
Hi all, this series contains some random minor cleanups for page_ext.
More details can be found in respective patches. Thanks!
Kemeng Shi (3):
mm/page_ext: remove unused return value of offline_page_ext
mm/page_ext: remove rollback for untouched mem_section in
online_page_ext
mm/page_ext: move functions around for minor cleanups to page_ext
mm/page_ext.c | 101 ++++++++++++++++++++++++--------------------------
1 file changed, 48 insertions(+), 53 deletions(-)
--
2.30.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/3] mm/page_ext: remove unused return value of offline_page_ext
2023-07-14 11:47 [PATCH 0/3] minor cleanups for page_ext Kemeng Shi
@ 2023-07-14 11:47 ` Kemeng Shi
2023-07-14 11:47 ` [PATCH 2/3] mm/page_ext: remove rollback for untouched mem_section in online_page_ext Kemeng Shi
2023-07-14 11:47 ` [PATCH 3/3] mm/page_ext: move functions around for minor cleanups to page_ext Kemeng Shi
2 siblings, 0 replies; 6+ messages in thread
From: Kemeng Shi @ 2023-07-14 11:47 UTC (permalink / raw)
To: akpm, linux-mm, linux-kernel; +Cc: shikemeng
offline_page_ext always returns 0 and no caller checks the return value.
Just remove unused return value of offline_page_ext.
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
---
mm/page_ext.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/mm/page_ext.c b/mm/page_ext.c
index dc1626be458b..096451df1c87 100644
--- a/mm/page_ext.c
+++ b/mm/page_ext.c
@@ -430,7 +430,7 @@ static int __meminit online_page_ext(unsigned long start_pfn,
return -ENOMEM;
}
-static int __meminit offline_page_ext(unsigned long start_pfn,
+static void __meminit offline_page_ext(unsigned long start_pfn,
unsigned long nr_pages)
{
unsigned long start, end, pfn;
@@ -454,8 +454,6 @@ static int __meminit offline_page_ext(unsigned long start_pfn,
for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION)
__free_page_ext(pfn);
- return 0;
-
}
static int __meminit page_ext_callback(struct notifier_block *self,
--
2.30.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] mm/page_ext: remove rollback for untouched mem_section in online_page_ext
2023-07-14 11:47 [PATCH 0/3] minor cleanups for page_ext Kemeng Shi
2023-07-14 11:47 ` [PATCH 1/3] mm/page_ext: remove unused return value of offline_page_ext Kemeng Shi
@ 2023-07-14 11:47 ` Kemeng Shi
2023-07-14 17:54 ` Andrew Morton
2023-07-14 11:47 ` [PATCH 3/3] mm/page_ext: move functions around for minor cleanups to page_ext Kemeng Shi
2 siblings, 1 reply; 6+ messages in thread
From: Kemeng Shi @ 2023-07-14 11:47 UTC (permalink / raw)
To: akpm, linux-mm, linux-kernel; +Cc: shikemeng
If init_section_page_ext failed, we only need rollback for mem_section
before failed mem_section. Make rollback end point to failed mem_section
to remove unnecessary rollback.
As pfn += PAGES_PER_SECTION will be executed even if init_section_page_ext
failed. So pfn points to mem_section after failed mem_section. Subtract
one mem_section from pfn to get failed mem_section.
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
---
mm/page_ext.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/mm/page_ext.c b/mm/page_ext.c
index 096451df1c87..f052397dc70f 100644
--- a/mm/page_ext.c
+++ b/mm/page_ext.c
@@ -424,6 +424,7 @@ static int __meminit online_page_ext(unsigned long start_pfn,
return 0;
/* rollback */
+ end = pfn - PAGES_PER_SECTION;
for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION)
__free_page_ext(pfn);
--
2.30.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] mm/page_ext: move functions around for minor cleanups to page_ext
2023-07-14 11:47 [PATCH 0/3] minor cleanups for page_ext Kemeng Shi
2023-07-14 11:47 ` [PATCH 1/3] mm/page_ext: remove unused return value of offline_page_ext Kemeng Shi
2023-07-14 11:47 ` [PATCH 2/3] mm/page_ext: remove rollback for untouched mem_section in online_page_ext Kemeng Shi
@ 2023-07-14 11:47 ` Kemeng Shi
2 siblings, 0 replies; 6+ messages in thread
From: Kemeng Shi @ 2023-07-14 11:47 UTC (permalink / raw)
To: akpm, linux-mm, linux-kernel; +Cc: shikemeng
1. move page_ext_get and page_ext_put down to remove forward declaration
of lookup_page_ext.
2. move page_ext_init_flatmem_late down to existing non SPARS block
to remove a new non SPARS block and to keep code for non SPARS tight.
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
---
mm/page_ext.c | 96 ++++++++++++++++++++++++---------------------------
1 file changed, 46 insertions(+), 50 deletions(-)
diff --git a/mm/page_ext.c b/mm/page_ext.c
index f052397dc70f..4548fcc66d74 100644
--- a/mm/page_ext.c
+++ b/mm/page_ext.c
@@ -90,7 +90,6 @@ static struct page_ext_operations *page_ext_ops[] __initdata = {
unsigned long page_ext_size;
static unsigned long total_usage;
-static struct page_ext *lookup_page_ext(const struct page *page);
bool early_page_ext __meminitdata;
static int __init setup_early_page_ext(char *str)
@@ -137,62 +136,16 @@ static void __init invoke_init_callbacks(void)
}
}
-#ifndef CONFIG_SPARSEMEM
-void __init page_ext_init_flatmem_late(void)
-{
- invoke_init_callbacks();
-}
-#endif
-
static inline struct page_ext *get_entry(void *base, unsigned long index)
{
return base + page_ext_size * index;
}
-/**
- * page_ext_get() - Get the extended information for a page.
- * @page: The page we're interested in.
- *
- * Ensures that the page_ext will remain valid until page_ext_put()
- * is called.
- *
- * Return: NULL if no page_ext exists for this page.
- * Context: Any context. Caller may not sleep until they have called
- * page_ext_put().
- */
-struct page_ext *page_ext_get(struct page *page)
-{
- struct page_ext *page_ext;
-
- rcu_read_lock();
- page_ext = lookup_page_ext(page);
- if (!page_ext) {
- rcu_read_unlock();
- return NULL;
- }
-
- return page_ext;
-}
-
-/**
- * page_ext_put() - Working with page extended information is done.
- * @page_ext: Page extended information received from page_ext_get().
- *
- * The page extended information of the page may not be valid after this
- * function is called.
- *
- * Return: None.
- * Context: Any context with corresponding page_ext_get() is called.
- */
-void page_ext_put(struct page_ext *page_ext)
+#ifndef CONFIG_SPARSEMEM
+void __init page_ext_init_flatmem_late(void)
{
- if (unlikely(!page_ext))
- return;
-
- rcu_read_unlock();
+ invoke_init_callbacks();
}
-#ifndef CONFIG_SPARSEMEM
-
void __meminit pgdat_page_ext_init(struct pglist_data *pgdat)
{
@@ -536,3 +489,46 @@ void __meminit pgdat_page_ext_init(struct pglist_data *pgdat)
}
#endif
+
+/**
+ * page_ext_get() - Get the extended information for a page.
+ * @page: The page we're interested in.
+ *
+ * Ensures that the page_ext will remain valid until page_ext_put()
+ * is called.
+ *
+ * Return: NULL if no page_ext exists for this page.
+ * Context: Any context. Caller may not sleep until they have called
+ * page_ext_put().
+ */
+struct page_ext *page_ext_get(struct page *page)
+{
+ struct page_ext *page_ext;
+
+ rcu_read_lock();
+ page_ext = lookup_page_ext(page);
+ if (!page_ext) {
+ rcu_read_unlock();
+ return NULL;
+ }
+
+ return page_ext;
+}
+
+/**
+ * page_ext_put() - Working with page extended information is done.
+ * @page_ext: Page extended information received from page_ext_get().
+ *
+ * The page extended information of the page may not be valid after this
+ * function is called.
+ *
+ * Return: None.
+ * Context: Any context with corresponding page_ext_get() is called.
+ */
+void page_ext_put(struct page_ext *page_ext)
+{
+ if (unlikely(!page_ext))
+ return;
+
+ rcu_read_unlock();
+}
--
2.30.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] mm/page_ext: remove rollback for untouched mem_section in online_page_ext
2023-07-14 11:47 ` [PATCH 2/3] mm/page_ext: remove rollback for untouched mem_section in online_page_ext Kemeng Shi
@ 2023-07-14 17:54 ` Andrew Morton
2023-07-17 1:47 ` Kemeng Shi
0 siblings, 1 reply; 6+ messages in thread
From: Andrew Morton @ 2023-07-14 17:54 UTC (permalink / raw)
To: Kemeng Shi; +Cc: linux-mm, linux-kernel
On Fri, 14 Jul 2023 19:47:48 +0800 Kemeng Shi <shikemeng@huaweicloud.com> wrote:
> If init_section_page_ext failed, we only need rollback for mem_section
> before failed mem_section. Make rollback end point to failed mem_section
> to remove unnecessary rollback.
>
> As pfn += PAGES_PER_SECTION will be executed even if init_section_page_ext
> failed. So pfn points to mem_section after failed mem_section. Subtract
> one mem_section from pfn to get failed mem_section.
>
> ...
>
> --- a/mm/page_ext.c
> +++ b/mm/page_ext.c
> @@ -424,6 +424,7 @@ static int __meminit online_page_ext(unsigned long start_pfn,
> return 0;
>
> /* rollback */
> + end = pfn - PAGES_PER_SECTION;
> for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION)
> __free_page_ext(pfn);
>
This is a bugfix, yes?
I guess init_section_page_ext() never fails for anyone...
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] mm/page_ext: remove rollback for untouched mem_section in online_page_ext
2023-07-14 17:54 ` Andrew Morton
@ 2023-07-17 1:47 ` Kemeng Shi
0 siblings, 0 replies; 6+ messages in thread
From: Kemeng Shi @ 2023-07-17 1:47 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-mm, linux-kernel
on 7/15/2023 1:54 AM, Andrew Morton wrote:
> On Fri, 14 Jul 2023 19:47:48 +0800 Kemeng Shi <shikemeng@huaweicloud.com> wrote:
>
>> If init_section_page_ext failed, we only need rollback for mem_section
>> before failed mem_section. Make rollback end point to failed mem_section
>> to remove unnecessary rollback.
>>
>> As pfn += PAGES_PER_SECTION will be executed even if init_section_page_ext
>> failed. So pfn points to mem_section after failed mem_section. Subtract
>> one mem_section from pfn to get failed mem_section.
>>
>> ...
>>
>> --- a/mm/page_ext.c
>> +++ b/mm/page_ext.c
>> @@ -424,6 +424,7 @@ static int __meminit online_page_ext(unsigned long start_pfn,
>> return 0;
>>
>> /* rollback */
>> + end = pfn - PAGES_PER_SECTION;
>> for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION)
>> __free_page_ext(pfn);
>>
>
> This is a bugfix, yes?
>
> I guess init_section_page_ext() never fails for anyone...
I marked this as cleanup because __free_page_ext can handle NULL page_ext
from uninitialized mem_section. Then no real bug will be triggered even
if init_section_page_ext failed.
--
Best wishes
Kemeng Shi
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-07-17 1:47 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-14 11:47 [PATCH 0/3] minor cleanups for page_ext Kemeng Shi
2023-07-14 11:47 ` [PATCH 1/3] mm/page_ext: remove unused return value of offline_page_ext Kemeng Shi
2023-07-14 11:47 ` [PATCH 2/3] mm/page_ext: remove rollback for untouched mem_section in online_page_ext Kemeng Shi
2023-07-14 17:54 ` Andrew Morton
2023-07-17 1:47 ` Kemeng Shi
2023-07-14 11:47 ` [PATCH 3/3] mm/page_ext: move functions around for minor cleanups to page_ext Kemeng Shi
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.