Commit 2b35f08e authored by Mike Rapoport's avatar Mike Rapoport Committed by Zheng Zengkai
Browse files

microblaze: simplify pte_alloc_one_kernel()

mainline inclusion
from mainline-v5.15-rc1
commit 22e78781
category: bugfix
bugzilla: 186414, https://gitee.com/openeuler/kernel/issues/I5K7IY
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=22e7878102f94a50e9a4c2c19f909a9a0898c4ce

--------------------------------

The microblaze's implementation of pte_alloc_one_kernel() used
memblock_alloc_try_nid_raw() along with clear_page() to allocated a zeroed
page during early setup.

Replace calls of these functions with a call to memblock_alloc_try_nid()
that already returns zeroed page and respects the same allocation limits
as memblock_alloc_try_nid_raw().

While on it drop early_get_page() wrapper that was only used in
pte_alloc_one_kernel().

Link: https://lkml.kernel.org/r/20210714123739.16493-3-rppt@kernel.org


Signed-off-by: default avatarMike Rapoport <rppt@linux.ibm.com>
Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
Cc: Michal Simek <monstr@monstr.eu>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Conflicts:
	arch/microblaze/mm/init.c
Signed-off-by: default avatarLiu Shixin <liushixin2@huawei.com>
Reviewed-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent 750b955b
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -486,8 +486,6 @@ extern int mem_init_done;

asmlinkage void __init mmu_init(void);

void __init *early_get_page(void);

#endif /* __ASSEMBLY__ */
#endif /* __KERNEL__ */

+0 −12
Original line number Diff line number Diff line
@@ -318,18 +318,6 @@ asmlinkage void __init mmu_init(void)
	dma_contiguous_reserve(memory_start + lowmem_size - 1);
}

/* This is only called until mem_init is done. */
void __init *early_get_page(void)
{
	/*
	 * Mem start + kernel_tlb -> here is limit
	 * because of mem mapping from head.S
	 */
	return memblock_alloc_try_nid_raw(PAGE_SIZE, PAGE_SIZE,
				MEMBLOCK_LOW_LIMIT, memory_start + kernel_tlb,
				NUMA_NO_NODE);
}

#endif /* CONFIG_MMU */

void * __ref zalloc_maybe_bootmem(size_t size, gfp_t mask)
+8 −9
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include <linux/init.h>
#include <linux/mm_types.h>
#include <linux/pgtable.h>
#include <linux/memblock.h>

#include <asm/pgalloc.h>
#include <linux/io.h>
@@ -242,15 +243,13 @@ unsigned long iopa(unsigned long addr)

__ref pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
{
	pte_t *pte;
	if (mem_init_done) {
		pte = (pte_t *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
	} else {
		pte = (pte_t *)early_get_page();
		if (pte)
			clear_page(pte);
	}
	return pte;
	if (mem_init_done)
		return (pte_t *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
	else
		return memblock_alloc_try_nid(PAGE_SIZE, PAGE_SIZE,
					      MEMBLOCK_LOW_LIMIT,
					      memory_start + kernel_tlb,
					      NUMA_NO_NODE);
}

void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t flags)