Commit 65d287c7 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull asm-generic updates from Arnd Bergmann:
 "Just two small updates this time:

   - A series I did to unify the definition of PAGE_SIZE through
     Kconfig, intended to help with a vdso rework that needs the
     constant but cannot include the normal kernel headers when building
     the compat VDSO on arm64 and potentially others

   - a patch from Yan Zhao to remove the pfn_to_virt() definitions from
     a couple of architectures after finding they were both incorrect
     and entirely unused"

* tag 'asm-generic-6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic:
  arch: define CONFIG_PAGE_SIZE_*KB on all architectures
  arch: simplify architecture specific page size configuration
  arch: consolidate existing CONFIG_PAGE_SIZE_*KB definitions
  mm: Remove broken pfn_to_virt() on arch csky/hexagon/openrisc
parents 3efa10eb 5394f1e9
Loading
Loading
Loading
Loading
+92 −2
Original line number Diff line number Diff line
@@ -1078,17 +1078,107 @@ config HAVE_ARCH_COMPAT_MMAP_BASES
	  and vice-versa 32-bit applications to call 64-bit mmap().
	  Required for applications doing different bitness syscalls.

config HAVE_PAGE_SIZE_4KB
	bool

config HAVE_PAGE_SIZE_8KB
	bool

config HAVE_PAGE_SIZE_16KB
	bool

config HAVE_PAGE_SIZE_32KB
	bool

config HAVE_PAGE_SIZE_64KB
	bool

config HAVE_PAGE_SIZE_256KB
	bool

choice
	prompt "MMU page size"

config PAGE_SIZE_4KB
	bool "4KiB pages"
	depends on HAVE_PAGE_SIZE_4KB
	help
	  This option select the standard 4KiB Linux page size and the only
	  available option on many architectures. Using 4KiB page size will
	  minimize memory consumption and is therefore recommended for low
	  memory systems.
	  Some software that is written for x86 systems makes incorrect
	  assumptions about the page size and only runs on 4KiB pages.

config PAGE_SIZE_8KB
	bool "8KiB pages"
	depends on HAVE_PAGE_SIZE_8KB
	help
	  This option is the only supported page size on a few older
	  processors, and can be slightly faster than 4KiB pages.

config PAGE_SIZE_16KB
	bool "16KiB pages"
	depends on HAVE_PAGE_SIZE_16KB
	help
	  This option is usually a good compromise between memory
	  consumption and performance for typical desktop and server
	  workloads, often saving a level of page table lookups compared
	  to 4KB pages as well as reducing TLB pressure and overhead of
	  per-page operations in the kernel at the expense of a larger
	  page cache.

config PAGE_SIZE_32KB
	bool "32KiB pages"
	depends on HAVE_PAGE_SIZE_32KB
	help
	  Using 32KiB page size will result in slightly higher performance
	  kernel at the price of higher memory consumption compared to
	  16KiB pages.	This option is available only on cnMIPS cores.
	  Note that you will need a suitable Linux distribution to
	  support this.

config PAGE_SIZE_64KB
	bool "64KiB pages"
	depends on HAVE_PAGE_SIZE_64KB
	help
	  Using 64KiB page size will result in slightly higher performance
	  kernel at the price of much higher memory consumption compared to
	  4KiB or 16KiB pages.
	  This is not suitable for general-purpose workloads but the
	  better performance may be worth the cost for certain types of
	  supercomputing or database applications that work mostly with
	  large in-memory data rather than small files.

config PAGE_SIZE_256KB
	bool "256KiB pages"
	depends on HAVE_PAGE_SIZE_256KB
	help
	  256KiB pages have little practical value due to their extreme
	  memory usage.  The kernel will only be able to run applications
	  that have been compiled with '-zmax-page-size' set to 256KiB
	  (the default is 64KiB or 4KiB on most architectures).

endchoice

config PAGE_SIZE_LESS_THAN_64KB
	def_bool y
	depends on !ARM64_64K_PAGES
	depends on !PAGE_SIZE_64KB
	depends on !PARISC_PAGE_SIZE_64KB
	depends on PAGE_SIZE_LESS_THAN_256KB

config PAGE_SIZE_LESS_THAN_256KB
	def_bool y
	depends on !PAGE_SIZE_256KB

config PAGE_SHIFT
	int
	default 12 if PAGE_SIZE_4KB
	default 13 if PAGE_SIZE_8KB
	default 14 if PAGE_SIZE_16KB
	default 15 if PAGE_SIZE_32KB
	default 16 if PAGE_SIZE_64KB
	default 18 if PAGE_SIZE_256KB

# This allows to use a set of generic functions to determine mmap base
# address by giving priority to top-down scheme only if the process
# is not in legacy mode (compat task, unlimited stack size or
+1 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ config ALPHA
	select PCI_DOMAINS if PCI
	select PCI_SYSCALL if PCI
	select HAVE_ASM_MODVERSIONS
	select HAVE_PAGE_SIZE_8KB
	select HAVE_PCSPKR_PLATFORM
	select HAVE_PERF_EVENTS
	select NEED_DMA_MAP_STATE
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@
#include <asm/pal.h>

/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT	13
#define PAGE_SHIFT	CONFIG_PAGE_SHIFT
#define PAGE_SIZE	(_AC(1,UL) << PAGE_SHIFT)
#define PAGE_MASK	(~(PAGE_SIZE-1))

+3 −0
Original line number Diff line number Diff line
@@ -284,14 +284,17 @@ choice

config ARC_PAGE_SIZE_8K
	bool "8KB"
	select HAVE_PAGE_SIZE_8KB
	help
	  Choose between 8k vs 16k

config ARC_PAGE_SIZE_16K
	select HAVE_PAGE_SIZE_16KB
	bool "16KB"

config ARC_PAGE_SIZE_4K
	bool "4KB"
	select HAVE_PAGE_SIZE_4KB
	depends on ARC_MMU_V3 || ARC_MMU_V4

endchoice
+2 −4
Original line number Diff line number Diff line
@@ -13,10 +13,8 @@
#include <linux/const.h>

/* PAGE_SHIFT determines the page size */
#if defined(CONFIG_ARC_PAGE_SIZE_16K)
#define PAGE_SHIFT 14
#elif defined(CONFIG_ARC_PAGE_SIZE_4K)
#define PAGE_SHIFT 12
#ifdef __KERNEL__
#define PAGE_SHIFT CONFIG_PAGE_SHIFT
#else
/*
 * Default 8k
Loading