From f59fc858b55ceeaecbe102503e79e89bd2d65d5f Mon Sep 17 00:00:00 2001 From: Miaohe Lin Date: Thu, 17 Feb 2022 22:53:27 +0800 Subject: [PATCH 1/4] memblock: use kfree() to release kmalloced memblock regions commit c94afc46cae7ad41b2ad6a99368147879f4b0e56 upstream. memblock.{reserved,memory}.regions may be allocated using kmalloc() in memblock_double_array(). Use kfree() to release these kmalloced regions indicated by memblock_{reserved,memory}_in_slab. Signed-off-by: Miaohe Lin Fixes: 3010f876500f ("mm: discard memblock data later") Signed-off-by: Mike Rapoport Signed-off-by: Greg Kroah-Hartman (cherry picked from commit 78706b051a8a314b55f13bcef3351e7d8e974a88) Signed-off-by: Xie XiuQi --- mm/memblock.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/mm/memblock.c b/mm/memblock.c index 873625fdc5047..b93fa16292d04 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -366,14 +366,20 @@ void __init memblock_discard(void) addr = __pa(memblock.reserved.regions); size = PAGE_ALIGN(sizeof(struct memblock_region) * memblock.reserved.max); - __memblock_free_late(addr, size); + if (memblock_reserved_in_slab) + kfree(memblock.reserved.regions); + else + __memblock_free_late(addr, size); } if (memblock.memory.regions != memblock_memory_init_regions) { addr = __pa(memblock.memory.regions); size = PAGE_ALIGN(sizeof(struct memblock_region) * memblock.memory.max); - __memblock_free_late(addr, size); + if (memblock_memory_in_slab) + kfree(memblock.memory.regions); + else + __memblock_free_late(addr, size); } memblock_memory = NULL; -- Gitee From 83073fcac9ba871f7439927e22007ad0f838ea8e Mon Sep 17 00:00:00 2001 From: XieXiuQi Date: Sat, 5 Mar 2022 07:17:59 +0000 Subject: [PATCH 2/4] Update mm/memblock.c test comments --- mm/memblock.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mm/memblock.c b/mm/memblock.c index b93fa16292d04..c7e4e91b96110 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -370,6 +370,7 @@ void __init memblock_discard(void) kfree(memblock.reserved.regions); else __memblock_free_late(addr, size); +tests fds fds } if (memblock.memory.regions != memblock_memory_init_regions) { -- Gitee From ec77ee190e1cdce07201ac86b073270fd41f4d0a Mon Sep 17 00:00:00 2001 From: XieXiuQi Date: Sat, 5 Mar 2022 08:33:54 +0000 Subject: [PATCH 3/4] Apply all suggestions from code review test comment modify --- mm/memblock.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mm/memblock.c b/mm/memblock.c index c7e4e91b96110..d97895a46abee 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -380,6 +380,7 @@ tests fds fds if (memblock_memory_in_slab) kfree(memblock.memory.regions); else +suggestion for source code __memblock_free_late(addr, size); } -- Gitee From 3fab81d766415dc5e1c197558bf4317b2b25baa1 Mon Sep 17 00:00:00 2001 From: XieXiuQi Date: Sat, 5 Mar 2022 08:34:48 +0000 Subject: [PATCH 4/4] Update mm/memblock.c testyfds df --- mm/memblock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/memblock.c b/mm/memblock.c index d97895a46abee..3989e171d2f75 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -366,7 +366,7 @@ void __init memblock_discard(void) addr = __pa(memblock.reserved.regions); size = PAGE_ALIGN(sizeof(struct memblock_region) * memblock.reserved.max); - if (memblock_reserved_in_slab) + if (memblock_reserved_in_slub) kfree(memblock.reserved.regions); else __memblock_free_late(addr, size); -- Gitee