Hi Andrew,

 

I noticed that __memblock_free_early and memblock_free has the same code. At first I think we can delete __memblock_free_early till __memblock_free_late remind me __memblock_free_early is meaningful. It’s a note to call this before struct page was initialized.

 

So I choose to make __memblock_free_early a wrapper of memblock_free. Here is the patch (see attachment file):

 

From 5f21fb0409e91b42373832627e44cd0a8275c820 Mon Sep 17 00:00:00 2001

From: Wentao Wang <witallwang@gmail.com>

Date: Thu, 22 Nov 2018 11:35:59 +0800

Subject: [PATCH] Make __memblock_free_early a wrapper of memblock_free rather

than dup it

 

Signed-off-by: Wentao Wang <witallwang@gmail.com>

---

mm/memblock.c | 7 +------

1 file changed, 1 insertion(+), 6 deletions(-)

 

diff --git a/mm/memblock.c b/mm/memblock.c

index 9a2d5ae..08bf136 100644

--- a/mm/memblock.c

+++ b/mm/memblock.c

@@ -1546,12 +1546,7 @@ void * __init memblock_alloc_try_nid(

  */

void __init __memblock_free_early(phys_addr_t base, phys_addr_t size)

{

-       phys_addr_t end = base + size - 1;

-

-       memblock_dbg("%s: [%pa-%pa] %pF\n",

-                    __func__, &base, &end, (void *)_RET_IP_);

-       kmemleak_free_part_phys(base, size);

-       memblock_remove_range(&memblock.reserved, base, size);

+       memblock_free(base, size);

}

 

/**

--

1.8.3.1

 

Testing:

Build with memblock, system bootup normally and works well.

 

Regards,

Wentao