Let's fallback to single pages if short on huge pages. No need to stop memory hotplug. Cc: Heiko Carstens <heiko.carstens@xxxxxxxxxx> Cc: Vasily Gorbik <gor@xxxxxxxxxxxxx> Cc: Christian Borntraeger <borntraeger@xxxxxxxxxx> Cc: Gerald Schaefer <gerald.schaefer@xxxxxxxxxx> Signed-off-by: David Hildenbrand <david@xxxxxxxxxx> --- arch/s390/mm/vmem.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c index 5239130770b7b..b7fdb9536707f 100644 --- a/arch/s390/mm/vmem.c +++ b/arch/s390/mm/vmem.c @@ -422,23 +422,23 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, } pm_dir = pmd_offset(pu_dir, address); - if (pmd_none(*pm_dir)) { + if (pmd_none(*pm_dir) && MACHINE_HAS_EDAT1) { + void *new_page; + /* Use 1MB frames for vmemmap if available. We always * use large frames even if they are only partially * used. * Otherwise we would have also page tables since * vmemmap_populate gets called for each section * separately. */ - if (MACHINE_HAS_EDAT1) { - void *new_page; - - new_page = vmemmap_alloc_block(PMD_SIZE, node); - if (!new_page) - goto out; + new_page = vmemmap_alloc_block(PMD_SIZE, node); + if (new_page) { pmd_val(*pm_dir) = __pa(new_page) | sgt_prot; address = (address + PMD_SIZE) & PMD_MASK; continue; } + } + if (pmd_none(*pm_dir)) { pt_dir = vmem_pte_alloc(); if (!pt_dir) goto out; -- 2.26.2