mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-25 13:43:55 +08:00
0cfaee2af3
A compiler throws a warning on an arm64 system since commit 9849a5697d
("arch, mm: convert all architectures to use 5level-fixup.h"),
mm/kasan/init.c: In function 'kasan_free_p4d':
mm/kasan/init.c:344:9: warning: variable 'p4d' set but not used [-Wunused-but-set-variable]
p4d_t *p4d;
^~~
because p4d_none() in "5level-fixup.h" is compiled away while it is a
static inline function in "pgtable-nopud.h".
However, if converted p4d_none() to a static inline there, powerpc would
be unhappy as it reads those in assembler language in
"arch/powerpc/include/asm/book3s/64/pgtable.h", so it needs to skip
assembly include for the static inline C function.
While at it, converted a few similar functions to be consistent with the
ones in "pgtable-nopud.h".
Link: http://lkml.kernel.org/r/20190806232917.881-1-cai@lca.pw
Signed-off-by: Qian Cai <cai@lca.pw>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Jason Gunthorpe <jgg@ziepe.ca>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
60 lines
1.4 KiB
C
60 lines
1.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _5LEVEL_FIXUP_H
|
|
#define _5LEVEL_FIXUP_H
|
|
|
|
#define __ARCH_HAS_5LEVEL_HACK
|
|
#define __PAGETABLE_P4D_FOLDED 1
|
|
|
|
#define P4D_SHIFT PGDIR_SHIFT
|
|
#define P4D_SIZE PGDIR_SIZE
|
|
#define P4D_MASK PGDIR_MASK
|
|
#define MAX_PTRS_PER_P4D 1
|
|
#define PTRS_PER_P4D 1
|
|
|
|
#define p4d_t pgd_t
|
|
|
|
#define pud_alloc(mm, p4d, address) \
|
|
((unlikely(pgd_none(*(p4d))) && __pud_alloc(mm, p4d, address)) ? \
|
|
NULL : pud_offset(p4d, address))
|
|
|
|
#define p4d_alloc(mm, pgd, address) (pgd)
|
|
#define p4d_offset(pgd, start) (pgd)
|
|
|
|
#ifndef __ASSEMBLY__
|
|
static inline int p4d_none(p4d_t p4d)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int p4d_bad(p4d_t p4d)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int p4d_present(p4d_t p4d)
|
|
{
|
|
return 1;
|
|
}
|
|
#endif
|
|
|
|
#define p4d_ERROR(p4d) do { } while (0)
|
|
#define p4d_clear(p4d) pgd_clear(p4d)
|
|
#define p4d_val(p4d) pgd_val(p4d)
|
|
#define p4d_populate(mm, p4d, pud) pgd_populate(mm, p4d, pud)
|
|
#define p4d_populate_safe(mm, p4d, pud) pgd_populate(mm, p4d, pud)
|
|
#define p4d_page(p4d) pgd_page(p4d)
|
|
#define p4d_page_vaddr(p4d) pgd_page_vaddr(p4d)
|
|
|
|
#define __p4d(x) __pgd(x)
|
|
#define set_p4d(p4dp, p4d) set_pgd(p4dp, p4d)
|
|
|
|
#undef p4d_free_tlb
|
|
#define p4d_free_tlb(tlb, x, addr) do { } while (0)
|
|
#define p4d_free(mm, x) do { } while (0)
|
|
#define __p4d_free_tlb(tlb, x, addr) do { } while (0)
|
|
|
|
#undef p4d_addr_end
|
|
#define p4d_addr_end(addr, end) (end)
|
|
|
|
#endif
|