diff --git a/mm/memblock.c b/mm/memblock.c index 873625fdc504791e0808704add6f0fff5cfa53b2..3989e171d2f75b5b276c925f900cc6fb99863291 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -366,14 +366,22 @@ 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_slub) + kfree(memblock.reserved.regions); + else + __memblock_free_late(addr, size); +tests fds fds } 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 +suggestion for source code + __memblock_free_late(addr, size); } memblock_memory = NULL;