mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 13:22:23 +00:00
mm/ioremap: fix iomap_max_page_shift
iomap_max_page_shift is expected to contain a page shift, so it can't be a
'bool', has to be an 'unsigned int'
And fix the default values: P4D_SHIFT is when huge iomap is allowed.
However, on some architectures (eg: powerpc book3s/64), P4D_SHIFT is not a
constant so it can't be used to initialise a static variable. So,
initialise iomap_max_page_shift with a maximum shift supported by the
architecture, it is gated by P4D_SHIFT in vmap_try_huge_p4d() anyway.
Link: https://lkml.kernel.org/r/ad2d366015794a9f21320dcbdd0a8eb98979e9df.1620898113.git.christophe.leroy@csgroup.eu
Fixes: bbc180a5ad
("mm: HUGE_VMAP arch support cleanup")
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
f4d3f25ace
commit
86d0c16427
@ -16,16 +16,16 @@
|
||||
#include "pgalloc-track.h"
|
||||
|
||||
#ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
|
||||
static bool __ro_after_init iomap_max_page_shift = PAGE_SHIFT;
|
||||
static unsigned int __ro_after_init iomap_max_page_shift = BITS_PER_LONG - 1;
|
||||
|
||||
static int __init set_nohugeiomap(char *str)
|
||||
{
|
||||
iomap_max_page_shift = P4D_SHIFT;
|
||||
iomap_max_page_shift = PAGE_SHIFT;
|
||||
return 0;
|
||||
}
|
||||
early_param("nohugeiomap", set_nohugeiomap);
|
||||
#else /* CONFIG_HAVE_ARCH_HUGE_VMAP */
|
||||
static const bool iomap_max_page_shift = PAGE_SHIFT;
|
||||
static const unsigned int iomap_max_page_shift = PAGE_SHIFT;
|
||||
#endif /* CONFIG_HAVE_ARCH_HUGE_VMAP */
|
||||
|
||||
int ioremap_page_range(unsigned long addr,
|
||||
|
Loading…
Reference in New Issue
Block a user