* [PATCH 0/3] mm/vmalloc: minor cleanups
@ 2026-09-14 3:33 Ye Liu
2026-09-14 3:34 ` [PATCH 1/3] mm/vmalloc: group xa_init with vbq field initializations Ye Liu
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Ye Liu @ 2026-09-14 3:33 UTC (permalink / raw)
To: Andrew Morton, Uladzislau Rezki; +Cc: linux-mm, linux-kernel, Ye Liu
Small cleanup series for mm/vmalloc.c, no functional changes:
- Group xa_init() with the other vmap_block_queue field initializations
in vmalloc_init(), instead of after the unrelated vfree_deferred setup.
- Extract vmap_insert_free_area() helper to deduplicate the allocate-
and-insert pattern that appeared both inside the loop body and after
the loop in vmap_init_free_space().
- Extract show_busy_info() from vmalloc_info_show(), mirroring the
existing show_purge_info() pattern, so the top-level show function
only orchestrates the two data sources.
Signed-off-by: Ye Liu <liuye@kylinos.cn>
---
Ye Liu (3):
mm/vmalloc: group xa_init with vbq field initializations
mm/vmalloc: extract vmap_insert_free_area helper
mm/vmalloc: extract show_busy_info from vmalloc_info_show
mm/vmalloc.c | 58 ++++++++++++++++++++++++++++++----------------------------
1 file changed, 30 insertions(+), 28 deletions(-)
---
base-commit: 68142f986ff04b2b70b31db00f719bf690f64a9a
change-id: 20260914-vmalloc_study-b3fe7c738f2a
Best regards,
--
Ye Liu <ye.liu@linux.dev>
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/3] mm/vmalloc: group xa_init with vbq field initializations
2026-09-14 3:33 [PATCH 0/3] mm/vmalloc: minor cleanups Ye Liu
@ 2026-09-14 3:34 ` Ye Liu
2026-09-14 16:57 ` Uladzislau Rezki
2026-09-15 3:52 ` Dev Jain
2026-09-14 3:34 ` [PATCH 2/3] mm/vmalloc: extract vmap_insert_free_area helper Ye Liu
2026-09-14 3:34 ` [PATCH 3/3] mm/vmalloc: extract show_busy_info from vmalloc_info_show Ye Liu
2 siblings, 2 replies; 13+ messages in thread
From: Ye Liu @ 2026-09-14 3:34 UTC (permalink / raw)
To: Andrew Morton, Uladzislau Rezki; +Cc: linux-mm, linux-kernel, Ye Liu
From: Ye Liu <liuye@kylinos.cn>
Move xa_init() next to the other vbq field initializations instead of
after the unrelated vfree_deferred setup.
Signed-off-by: Ye Liu <liuye@kylinos.cn>
---
mm/vmalloc.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 859e6d2d57a3..117483dd048c 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -5585,10 +5585,11 @@ void __init vmalloc_init(void)
vbq = &per_cpu(vmap_block_queue, i);
spin_lock_init(&vbq->lock);
INIT_LIST_HEAD(&vbq->free);
+ xa_init(&vbq->vmap_blocks);
+
p = &per_cpu(vfree_deferred, i);
init_llist_head(&p->list);
INIT_WORK(&p->wq, delayed_vfree_work);
- xa_init(&vbq->vmap_blocks);
}
/*
--
2.25.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 2/3] mm/vmalloc: extract vmap_insert_free_area helper
2026-09-14 3:33 [PATCH 0/3] mm/vmalloc: minor cleanups Ye Liu
2026-09-14 3:34 ` [PATCH 1/3] mm/vmalloc: group xa_init with vbq field initializations Ye Liu
@ 2026-09-14 3:34 ` Ye Liu
2026-09-14 17:02 ` Uladzislau Rezki
2026-09-14 3:34 ` [PATCH 3/3] mm/vmalloc: extract show_busy_info from vmalloc_info_show Ye Liu
2 siblings, 1 reply; 13+ messages in thread
From: Ye Liu @ 2026-09-14 3:34 UTC (permalink / raw)
To: Andrew Morton, Uladzislau Rezki; +Cc: linux-mm, linux-kernel, Ye Liu
From: Ye Liu <liuye@kylinos.cn>
The allocation and insertion of a free vmap_area is duplicated
between the loop body and the tail of vmap_init_free_space. Factor
it into a small helper so the main function only deals with computing
the free gaps between busy regions.
Signed-off-by: Ye Liu <liuye@kylinos.cn>
---
mm/vmalloc.c | 41 ++++++++++++++++++-----------------------
1 file changed, 18 insertions(+), 23 deletions(-)
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 117483dd048c..797933ba9451 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -5433,11 +5433,23 @@ module_init(proc_vmalloc_init);
#endif
+static void __init vmap_insert_free_area(unsigned long start, unsigned long end)
+{
+ struct vmap_area *free = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);
+
+ if (!WARN_ON_ONCE(!free)) {
+ free->va_start = start;
+ free->va_end = end;
+ insert_vmap_area_augment(free, NULL,
+ &free_vmap_area_root,
+ &free_vmap_area_list);
+ }
+}
+
static void __init vmap_init_free_space(void)
{
unsigned long vmap_start = 1;
const unsigned long vmap_end = ULONG_MAX;
- struct vmap_area *free;
struct vm_struct *busy;
/*
@@ -5447,32 +5459,15 @@ static void __init vmap_init_free_space(void)
* |<--------------------------------->|
*/
for (busy = vmlist; busy; busy = busy->next) {
- if ((unsigned long) busy->addr - vmap_start > 0) {
- free = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);
- if (!WARN_ON_ONCE(!free)) {
- free->va_start = vmap_start;
- free->va_end = (unsigned long) busy->addr;
-
- insert_vmap_area_augment(free, NULL,
- &free_vmap_area_root,
- &free_vmap_area_list);
- }
- }
+ if ((unsigned long)busy->addr - vmap_start > 0)
+ vmap_insert_free_area(vmap_start,
+ (unsigned long)busy->addr);
vmap_start = (unsigned long) busy->addr + busy->size;
}
- if (vmap_end - vmap_start > 0) {
- free = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);
- if (!WARN_ON_ONCE(!free)) {
- free->va_start = vmap_start;
- free->va_end = vmap_end;
-
- insert_vmap_area_augment(free, NULL,
- &free_vmap_area_root,
- &free_vmap_area_list);
- }
- }
+ if (vmap_end - vmap_start > 0)
+ vmap_insert_free_area(vmap_start, vmap_end);
}
static void vmap_init_nodes(void)
--
2.25.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 3/3] mm/vmalloc: extract show_busy_info from vmalloc_info_show
2026-09-14 3:33 [PATCH 0/3] mm/vmalloc: minor cleanups Ye Liu
2026-09-14 3:34 ` [PATCH 1/3] mm/vmalloc: group xa_init with vbq field initializations Ye Liu
2026-09-14 3:34 ` [PATCH 2/3] mm/vmalloc: extract vmap_insert_free_area helper Ye Liu
@ 2026-09-14 3:34 ` Ye Liu
2026-09-14 17:10 ` Uladzislau Rezki
2026-09-15 4:23 ` Dev Jain
2 siblings, 2 replies; 13+ messages in thread
From: Ye Liu @ 2026-09-14 3:34 UTC (permalink / raw)
To: Andrew Morton, Uladzislau Rezki; +Cc: linux-mm, linux-kernel, Ye Liu
From: Ye Liu <liuye@kylinos.cn>
Extract the busy vmap area iteration into show_busy_info, mirroring
the existing show_purge_info pattern.
Signed-off-by: Ye Liu <liuye@kylinos.cn>
---
mm/vmalloc.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 797933ba9451..7638845377f5 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -5345,12 +5345,12 @@ static void show_purge_info(struct seq_file *m)
}
}
-static int vmalloc_info_show(struct seq_file *m, void *p)
+static void show_busy_info(struct seq_file *m)
{
struct vmap_node *vn;
struct vmap_area *va;
struct vm_struct *v;
- unsigned int *counters;
+ unsigned int *counters = NULL;
if (IS_ENABLED(CONFIG_NUMA))
counters = kmalloc_array(nr_node_ids, sizeof(unsigned int), GFP_KERNEL);
@@ -5415,12 +5415,18 @@ static int vmalloc_info_show(struct seq_file *m, void *p)
spin_unlock(&vn->busy.lock);
}
+ if (IS_ENABLED(CONFIG_NUMA))
+ kfree(counters);
+}
+
+static int vmalloc_info_show(struct seq_file *m, void *p)
+{
+ show_busy_info(m);
+
/*
* As a final step, dump "unpurged" areas.
*/
show_purge_info(m);
- if (IS_ENABLED(CONFIG_NUMA))
- kfree(counters);
return 0;
}
--
2.25.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/3] mm/vmalloc: group xa_init with vbq field initializations
2026-09-14 3:34 ` [PATCH 1/3] mm/vmalloc: group xa_init with vbq field initializations Ye Liu
@ 2026-09-14 16:57 ` Uladzislau Rezki
2026-09-15 3:52 ` Dev Jain
1 sibling, 0 replies; 13+ messages in thread
From: Uladzislau Rezki @ 2026-09-14 16:57 UTC (permalink / raw)
To: Ye Liu; +Cc: Andrew Morton, Uladzislau Rezki, linux-mm, linux-kernel, Ye Liu
On Mon, Sep 14, 2026 at 11:34:00AM +0800, Ye Liu wrote:
> From: Ye Liu <liuye@kylinos.cn>
>
> Move xa_init() next to the other vbq field initializations instead of
> after the unrelated vfree_deferred setup.
>
> Signed-off-by: Ye Liu <liuye@kylinos.cn>
> ---
> mm/vmalloc.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index 859e6d2d57a3..117483dd048c 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -5585,10 +5585,11 @@ void __init vmalloc_init(void)
> vbq = &per_cpu(vmap_block_queue, i);
> spin_lock_init(&vbq->lock);
> INIT_LIST_HEAD(&vbq->free);
> + xa_init(&vbq->vmap_blocks);
> +
> p = &per_cpu(vfree_deferred, i);
> init_llist_head(&p->list);
> INIT_WORK(&p->wq, delayed_vfree_work);
> - xa_init(&vbq->vmap_blocks);
> }
>
> /*
>
> --
> 2.25.1
>
LGTM:
Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
--
Uladzislau Rezki
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/3] mm/vmalloc: extract vmap_insert_free_area helper
2026-09-14 3:34 ` [PATCH 2/3] mm/vmalloc: extract vmap_insert_free_area helper Ye Liu
@ 2026-09-14 17:02 ` Uladzislau Rezki
2026-09-15 2:25 ` Ye Liu
0 siblings, 1 reply; 13+ messages in thread
From: Uladzislau Rezki @ 2026-09-14 17:02 UTC (permalink / raw)
To: Ye Liu; +Cc: Andrew Morton, Uladzislau Rezki, linux-mm, linux-kernel, Ye Liu
On Mon, Sep 14, 2026 at 11:34:01AM +0800, Ye Liu wrote:
> From: Ye Liu <liuye@kylinos.cn>
>
> The allocation and insertion of a free vmap_area is duplicated
> between the loop body and the tail of vmap_init_free_space. Factor
> it into a small helper so the main function only deals with computing
> the free gaps between busy regions.
>
> Signed-off-by: Ye Liu <liuye@kylinos.cn>
> ---
> mm/vmalloc.c | 41 ++++++++++++++++++-----------------------
> 1 file changed, 18 insertions(+), 23 deletions(-)
>
> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index 117483dd048c..797933ba9451 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -5433,11 +5433,23 @@ module_init(proc_vmalloc_init);
>
> #endif
>
> +static void __init vmap_insert_free_area(unsigned long start, unsigned long end)
> +{
> + struct vmap_area *free = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);
> +
> + if (!WARN_ON_ONCE(!free)) {
> + free->va_start = start;
> + free->va_end = end;
> + insert_vmap_area_augment(free, NULL,
> + &free_vmap_area_root,
> + &free_vmap_area_list);
> + }
> +}
> +
> static void __init vmap_init_free_space(void)
> {
> unsigned long vmap_start = 1;
> const unsigned long vmap_end = ULONG_MAX;
> - struct vmap_area *free;
> struct vm_struct *busy;
>
> /*
> @@ -5447,32 +5459,15 @@ static void __init vmap_init_free_space(void)
> * |<--------------------------------->|
> */
> for (busy = vmlist; busy; busy = busy->next) {
> - if ((unsigned long) busy->addr - vmap_start > 0) {
>
This line gets removed and then re-added below because of removing space
after (unsigned long). Maybe it is better to keep that space.
> - free = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);
> - if (!WARN_ON_ONCE(!free)) {
> - free->va_start = vmap_start;
> - free->va_end = (unsigned long) busy->addr;
> -
> - insert_vmap_area_augment(free, NULL,
> - &free_vmap_area_root,
> - &free_vmap_area_list);
> - }
> - }
> + if ((unsigned long)busy->addr - vmap_start > 0)
> + vmap_insert_free_area(vmap_start,
> + (unsigned long)busy->addr);
>
> vmap_start = (unsigned long) busy->addr + busy->size;
> }
>
> - if (vmap_end - vmap_start > 0) {
> - free = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);
> - if (!WARN_ON_ONCE(!free)) {
> - free->va_start = vmap_start;
> - free->va_end = vmap_end;
> -
> - insert_vmap_area_augment(free, NULL,
> - &free_vmap_area_root,
> - &free_vmap_area_list);
> - }
> - }
> + if (vmap_end - vmap_start > 0)
> + vmap_insert_free_area(vmap_start, vmap_end);
> }
>
> static void vmap_init_nodes(void)
>
> --
> 2.25.1
>
LGTM:
Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
--
Uladzislau Rezki
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] mm/vmalloc: extract show_busy_info from vmalloc_info_show
2026-09-14 3:34 ` [PATCH 3/3] mm/vmalloc: extract show_busy_info from vmalloc_info_show Ye Liu
@ 2026-09-14 17:10 ` Uladzislau Rezki
2026-09-15 2:26 ` Ye Liu
2026-09-15 4:38 ` Andrew Morton
2026-09-15 4:23 ` Dev Jain
1 sibling, 2 replies; 13+ messages in thread
From: Uladzislau Rezki @ 2026-09-14 17:10 UTC (permalink / raw)
To: Ye Liu; +Cc: Andrew Morton, Uladzislau Rezki, linux-mm, linux-kernel, Ye Liu
On Mon, Sep 14, 2026 at 11:34:02AM +0800, Ye Liu wrote:
> From: Ye Liu <liuye@kylinos.cn>
>
> Extract the busy vmap area iteration into show_busy_info, mirroring
> the existing show_purge_info pattern.
>
> Signed-off-by: Ye Liu <liuye@kylinos.cn>
> ---
> mm/vmalloc.c | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index 797933ba9451..7638845377f5 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -5345,12 +5345,12 @@ static void show_purge_info(struct seq_file *m)
> }
> }
>
> -static int vmalloc_info_show(struct seq_file *m, void *p)
> +static void show_busy_info(struct seq_file *m)
> {
> struct vmap_node *vn;
> struct vmap_area *va;
> struct vm_struct *v;
> - unsigned int *counters;
> + unsigned int *counters = NULL;
>
Is setting counters setting to NULL odd here?
Other than that, LGTM:
Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
--
Uladzislau Rezki
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/3] mm/vmalloc: extract vmap_insert_free_area helper
2026-09-14 17:02 ` Uladzislau Rezki
@ 2026-09-15 2:25 ` Ye Liu
2026-09-15 3:48 ` Dev Jain
0 siblings, 1 reply; 13+ messages in thread
From: Ye Liu @ 2026-09-15 2:25 UTC (permalink / raw)
To: Uladzislau Rezki; +Cc: Andrew Morton, linux-mm, linux-kernel, Ye Liu
在 2026/9/15 01:02, Uladzislau Rezki 写道:
> On Mon, Sep 14, 2026 at 11:34:01AM +0800, Ye Liu wrote:
>> From: Ye Liu <liuye@kylinos.cn>
>>
>> The allocation and insertion of a free vmap_area is duplicated
>> between the loop body and the tail of vmap_init_free_space. Factor
>> it into a small helper so the main function only deals with computing
>> the free gaps between busy regions.
>>
>> Signed-off-by: Ye Liu <liuye@kylinos.cn>
>> ---
>> mm/vmalloc.c | 41 ++++++++++++++++++-----------------------
>> 1 file changed, 18 insertions(+), 23 deletions(-)
>>
>> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
>> index 117483dd048c..797933ba9451 100644
>> --- a/mm/vmalloc.c
>> +++ b/mm/vmalloc.c
>> @@ -5433,11 +5433,23 @@ module_init(proc_vmalloc_init);
>>
>> #endif
>>
>> +static void __init vmap_insert_free_area(unsigned long start, unsigned long end)
>> +{
>> + struct vmap_area *free = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);
>> +
>> + if (!WARN_ON_ONCE(!free)) {
>> + free->va_start = start;
>> + free->va_end = end;
>> + insert_vmap_area_augment(free, NULL,
>> + &free_vmap_area_root,
>> + &free_vmap_area_list);
>> + }
>> +}
>> +
>> static void __init vmap_init_free_space(void)
>> {
>> unsigned long vmap_start = 1;
>> const unsigned long vmap_end = ULONG_MAX;
>> - struct vmap_area *free;
>> struct vm_struct *busy;
>>
>> /*
>> @@ -5447,32 +5459,15 @@ static void __init vmap_init_free_space(void)
>> * |<--------------------------------->|
>> */
>> for (busy = vmlist; busy; busy = busy->next) {
>> - if ((unsigned long) busy->addr - vmap_start > 0) {
>>
> This line gets removed and then re-added below because of removing space
> after (unsigned long). Maybe it is better to keep that space.
However, the '{' is still there, but I'll add a space anyway.
>
>> - free = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);
>> - if (!WARN_ON_ONCE(!free)) {
>> - free->va_start = vmap_start;
>> - free->va_end = (unsigned long) busy->addr;
>> -
>> - insert_vmap_area_augment(free, NULL,
>> - &free_vmap_area_root,
>> - &free_vmap_area_list);
>> - }
>> - }
>> + if ((unsigned long)busy->addr - vmap_start > 0)
>> + vmap_insert_free_area(vmap_start,
>> + (unsigned long)busy->addr);
>>
>> vmap_start = (unsigned long) busy->addr + busy->size;
>> }
>>
>> - if (vmap_end - vmap_start > 0) {
>> - free = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);
>> - if (!WARN_ON_ONCE(!free)) {
>> - free->va_start = vmap_start;
>> - free->va_end = vmap_end;
>> -
>> - insert_vmap_area_augment(free, NULL,
>> - &free_vmap_area_root,
>> - &free_vmap_area_list);
>> - }
>> - }
>> + if (vmap_end - vmap_start > 0)
>> + vmap_insert_free_area(vmap_start, vmap_end);
>> }
>>
>> static void vmap_init_nodes(void)
>>
>> --
>> 2.25.1
>>
> LGTM:
>
> Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
>
> --
> Uladzislau Rezki
--
Thanks,
Ye Liu
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] mm/vmalloc: extract show_busy_info from vmalloc_info_show
2026-09-14 17:10 ` Uladzislau Rezki
@ 2026-09-15 2:26 ` Ye Liu
2026-09-15 4:38 ` Andrew Morton
1 sibling, 0 replies; 13+ messages in thread
From: Ye Liu @ 2026-09-15 2:26 UTC (permalink / raw)
To: Uladzislau Rezki; +Cc: Andrew Morton, linux-mm, linux-kernel, Ye Liu
在 2026/9/15 01:10, Uladzislau Rezki 写道:
> On Mon, Sep 14, 2026 at 11:34:02AM +0800, Ye Liu wrote:
>> From: Ye Liu <liuye@kylinos.cn>
>>
>> Extract the busy vmap area iteration into show_busy_info, mirroring
>> the existing show_purge_info pattern.
>>
>> Signed-off-by: Ye Liu <liuye@kylinos.cn>
>> ---
>> mm/vmalloc.c | 14 ++++++++++----
>> 1 file changed, 10 insertions(+), 4 deletions(-)
>>
>> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
>> index 797933ba9451..7638845377f5 100644
>> --- a/mm/vmalloc.c
>> +++ b/mm/vmalloc.c
>> @@ -5345,12 +5345,12 @@ static void show_purge_info(struct seq_file *m)
>> }
>> }
>>
>> -static int vmalloc_info_show(struct seq_file *m, void *p)
>> +static void show_busy_info(struct seq_file *m)
>> {
>> struct vmap_node *vn;
>> struct vmap_area *va;
>> struct vm_struct *v;
>> - unsigned int *counters;
>> + unsigned int *counters = NULL;
>>
> Is setting counters setting to NULL odd here?
>
I would remove '= NULL'.
> Other than that, LGTM:
>
> Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
>
> --
> Uladzislau Rezki
--
Thanks,
Ye Liu
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/3] mm/vmalloc: extract vmap_insert_free_area helper
2026-09-15 2:25 ` Ye Liu
@ 2026-09-15 3:48 ` Dev Jain
0 siblings, 0 replies; 13+ messages in thread
From: Dev Jain @ 2026-09-15 3:48 UTC (permalink / raw)
To: Ye Liu, Uladzislau Rezki; +Cc: Andrew Morton, linux-mm, linux-kernel, Ye Liu
On 15/09/26 7:55 am, Ye Liu wrote:
>
>
> 在 2026/9/15 01:02, Uladzislau Rezki 写道:
>> On Mon, Sep 14, 2026 at 11:34:01AM +0800, Ye Liu wrote:
>>> From: Ye Liu <liuye@kylinos.cn>
>>>
>>> The allocation and insertion of a free vmap_area is duplicated
>>> between the loop body and the tail of vmap_init_free_space. Factor
>>> it into a small helper so the main function only deals with computing
>>> the free gaps between busy regions.
>>>
>>> Signed-off-by: Ye Liu <liuye@kylinos.cn>
>>> ---
>>> mm/vmalloc.c | 41 ++++++++++++++++++-----------------------
>>> 1 file changed, 18 insertions(+), 23 deletions(-)
>>>
>>> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
>>> index 117483dd048c..797933ba9451 100644
>>> --- a/mm/vmalloc.c
>>> +++ b/mm/vmalloc.c
>>> @@ -5433,11 +5433,23 @@ module_init(proc_vmalloc_init);
>>>
>>> #endif
>>>
>>> +static void __init vmap_insert_free_area(unsigned long start, unsigned long end)
>>> +{
>>> + struct vmap_area *free = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);
>>> +
>>> + if (!WARN_ON_ONCE(!free)) {
>>> + free->va_start = start;
>>> + free->va_end = end;
>>> + insert_vmap_area_augment(free, NULL,
>>> + &free_vmap_area_root,
>>> + &free_vmap_area_list);
>>> + }
>>> +}
>>> +
>>> static void __init vmap_init_free_space(void)
>>> {
>>> unsigned long vmap_start = 1;
>>> const unsigned long vmap_end = ULONG_MAX;
>>> - struct vmap_area *free;
>>> struct vm_struct *busy;
>>>
>>> /*
>>> @@ -5447,32 +5459,15 @@ static void __init vmap_init_free_space(void)
>>> * |<--------------------------------->|
>>> */
>>> for (busy = vmlist; busy; busy = busy->next) {
>>> - if ((unsigned long) busy->addr - vmap_start > 0) {
>>>
>> This line gets removed and then re-added below because of removing space
>> after (unsigned long). Maybe it is better to keep that space.
> However, the '{' is still there, but I'll add a space anyway.
Just mentioning in the commit message "while at it, drop redundant whitespace
in "(unsigned long) busy->addr" should suffice.
Reviewed-by: Dev Jain <dev.jain@arm.com>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/3] mm/vmalloc: group xa_init with vbq field initializations
2026-09-14 3:34 ` [PATCH 1/3] mm/vmalloc: group xa_init with vbq field initializations Ye Liu
2026-09-14 16:57 ` Uladzislau Rezki
@ 2026-09-15 3:52 ` Dev Jain
1 sibling, 0 replies; 13+ messages in thread
From: Dev Jain @ 2026-09-15 3:52 UTC (permalink / raw)
To: Ye Liu, Andrew Morton, Uladzislau Rezki; +Cc: linux-mm, linux-kernel, Ye Liu
On 14/09/26 9:04 am, Ye Liu wrote:
> From: Ye Liu <liuye@kylinos.cn>
>
> Move xa_init() next to the other vbq field initializations instead of
> after the unrelated vfree_deferred setup.
>
> Signed-off-by: Ye Liu <liuye@kylinos.cn>
> ---
LGTM
Reviewed-by: Dev Jain <dev.jain@arm.com>
> mm/vmalloc.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index 859e6d2d57a3..117483dd048c 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -5585,10 +5585,11 @@ void __init vmalloc_init(void)
> vbq = &per_cpu(vmap_block_queue, i);
> spin_lock_init(&vbq->lock);
> INIT_LIST_HEAD(&vbq->free);
> + xa_init(&vbq->vmap_blocks);
> +
> p = &per_cpu(vfree_deferred, i);
> init_llist_head(&p->list);
> INIT_WORK(&p->wq, delayed_vfree_work);
> - xa_init(&vbq->vmap_blocks);
> }
>
> /*
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] mm/vmalloc: extract show_busy_info from vmalloc_info_show
2026-09-14 3:34 ` [PATCH 3/3] mm/vmalloc: extract show_busy_info from vmalloc_info_show Ye Liu
2026-09-14 17:10 ` Uladzislau Rezki
@ 2026-09-15 4:23 ` Dev Jain
1 sibling, 0 replies; 13+ messages in thread
From: Dev Jain @ 2026-09-15 4:23 UTC (permalink / raw)
To: Ye Liu, Andrew Morton, Uladzislau Rezki; +Cc: linux-mm, linux-kernel, Ye Liu
On 14/09/26 9:04 am, Ye Liu wrote:
> From: Ye Liu <liuye@kylinos.cn>
>
> Extract the busy vmap area iteration into show_busy_info, mirroring
> the existing show_purge_info pattern.
>
> Signed-off-by: Ye Liu <liuye@kylinos.cn>
> ---
> mm/vmalloc.c | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index 797933ba9451..7638845377f5 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -5345,12 +5345,12 @@ static void show_purge_info(struct seq_file *m)
> }
> }
>
> -static int vmalloc_info_show(struct seq_file *m, void *p)
> +static void show_busy_info(struct seq_file *m)
> {
> struct vmap_node *vn;
> struct vmap_area *va;
> struct vm_struct *v;
> - unsigned int *counters;
> + unsigned int *counters = NULL;
As pointed out by Uladzislau, setting to NULL is redundant.
Apart from that LGTM
Reviewed-by: Dev Jain <dev.jain@arm.com>
>
> if (IS_ENABLED(CONFIG_NUMA))
> counters = kmalloc_array(nr_node_ids, sizeof(unsigned int), GFP_KERNEL);
> @@ -5415,12 +5415,18 @@ static int vmalloc_info_show(struct seq_file *m, void *p)
> spin_unlock(&vn->busy.lock);
> }
>
> + if (IS_ENABLED(CONFIG_NUMA))
> + kfree(counters);
> +}
> +
> +static int vmalloc_info_show(struct seq_file *m, void *p)
> +{
> + show_busy_info(m);
> +
> /*
> * As a final step, dump "unpurged" areas.
> */
> show_purge_info(m);
> - if (IS_ENABLED(CONFIG_NUMA))
> - kfree(counters);
> return 0;
> }
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] mm/vmalloc: extract show_busy_info from vmalloc_info_show
2026-09-14 17:10 ` Uladzislau Rezki
2026-09-15 2:26 ` Ye Liu
@ 2026-09-15 4:38 ` Andrew Morton
1 sibling, 0 replies; 13+ messages in thread
From: Andrew Morton @ 2026-09-15 4:38 UTC (permalink / raw)
To: Uladzislau Rezki; +Cc: Ye Liu, linux-mm, linux-kernel, Ye Liu
On Mon, 14 Sep 2026 19:10:37 +0200 Uladzislau Rezki <urezki@gmail.com> wrote:
> On Mon, Sep 14, 2026 at 11:34:02AM +0800, Ye Liu wrote:
> > From: Ye Liu <liuye@kylinos.cn>
> >
> > Extract the busy vmap area iteration into show_busy_info, mirroring
> > the existing show_purge_info pattern.
> >
> > Signed-off-by: Ye Liu <liuye@kylinos.cn>
> > ---
> > mm/vmalloc.c | 14 ++++++++++----
> > 1 file changed, 10 insertions(+), 4 deletions(-)
> >
> > diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> > index 797933ba9451..7638845377f5 100644
> > --- a/mm/vmalloc.c
> > +++ b/mm/vmalloc.c
> > @@ -5345,12 +5345,12 @@ static void show_purge_info(struct seq_file *m)
> > }
> > }
> >
> > -static int vmalloc_info_show(struct seq_file *m, void *p)
> > +static void show_busy_info(struct seq_file *m)
> > {
> > struct vmap_node *vn;
> > struct vmap_area *va;
> > struct vm_struct *v;
> > - unsigned int *counters;
> > + unsigned int *counters = NULL;
> >
> Is setting counters setting to NULL odd here?
static void show_busy_info(struct seq_file *m)
{
...
unsigned int *counters = NULL;
if (IS_ENABLED(CONFIG_NUMA))
counters = ...
...
if (IS_ENABLED(CONFIG_NUMA))
kfree(counters);
...
}
Presumably some dumb compiler or checker warned about
kfree(uninitialized-val).
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2026-09-15 4:38 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-14 3:33 [PATCH 0/3] mm/vmalloc: minor cleanups Ye Liu
2026-09-14 3:34 ` [PATCH 1/3] mm/vmalloc: group xa_init with vbq field initializations Ye Liu
2026-09-14 16:57 ` Uladzislau Rezki
2026-09-15 3:52 ` Dev Jain
2026-09-14 3:34 ` [PATCH 2/3] mm/vmalloc: extract vmap_insert_free_area helper Ye Liu
2026-09-14 17:02 ` Uladzislau Rezki
2026-09-15 2:25 ` Ye Liu
2026-09-15 3:48 ` Dev Jain
2026-09-14 3:34 ` [PATCH 3/3] mm/vmalloc: extract show_busy_info from vmalloc_info_show Ye Liu
2026-09-14 17:10 ` Uladzislau Rezki
2026-09-15 2:26 ` Ye Liu
2026-09-15 4:38 ` Andrew Morton
2026-09-15 4:23 ` Dev Jain
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®