Commit bbeb69ce authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Ingo Molnar
Browse files

x86/mm: Remove CONFIG_HIGHMEM64G support



HIGHMEM64G support was added in linux-2.3.25 to support (then)
high-end Pentium Pro and Pentium III Xeon servers with more than 4GB of
addressing, NUMA and PCI-X slots started appearing.

I have found no evidence of this ever being used in regular dual-socket
servers or consumer devices, all the users seem obsolete these days,
even by i386 standards:

 - Support for NUMA servers (NUMA-Q, IBM x440, unisys) was already
   removed ten years ago.

 - 4+ socket non-NUMA servers based on Intel 450GX/450NX, HP F8 and
   ServerWorks ServerSet/GrandChampion could theoretically still work
   with 8GB, but these were exceptionally rare even 20 years ago and
   would have usually been equipped with than the maximum amount of
   RAM.

 - Some SKUs of the Celeron D from 2004 had 64-bit mode fused off but
   could still work in a Socket 775 mainboard designed for the later
   Core 2 Duo and 8GB. Apparently most BIOSes at the time only allowed
   64-bit CPUs.

 - The rare Xeon LV "Sossaman" came on a few motherboards with
   registered DDR2 memory support up to 16GB.

 - In the early days of x86-64 hardware, there was sometimes the need
   to run a 32-bit kernel to work around bugs in the hardware drivers,
   or in the syscall emulation for 32-bit userspace. This likely still
   works but there should never be a need for this any more.

PAE mode is still required to get access to the 'NX' bit on Atom
'Pentium M' and 'Core Duo' CPUs.

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/20250226213714.4040853-6-arnd@kernel.org
parent f388f60c
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -180,10 +180,6 @@ Dump-capture kernel config options (Arch Dependent, i386 and x86_64)
1) On i386, enable high memory support under "Processor type and
   features"::

	CONFIG_HIGHMEM64G=y

   or::

	CONFIG_HIGHMEM4G

2) With CONFIG_SMP=y, usually nr_cpus=1 need specified on the kernel
+1 −10
Original line number Diff line number Diff line
@@ -20,11 +20,7 @@ It has several drawbacks, though:
   features (wheel, extra buttons, touchpad mode) of the real PS/2 mouse may
   not be available.

2) If CONFIG_HIGHMEM64G is enabled, the PS/2 mouse emulation can cause
   system crashes, because the SMM BIOS is not expecting to be in PAE mode.
   The Intel E7505 is a typical machine where this happens.

3) If AMD64 64-bit mode is enabled, again system crashes often happen,
2) If AMD64 64-bit mode is enabled, again system crashes often happen,
   because the SMM BIOS isn't expecting the CPU to be in 64-bit mode.  The
   BIOS manufacturers only test with Windows, and Windows doesn't do 64-bit
   yet.
@@ -38,11 +34,6 @@ Problem 1)
  compiled-in, too.

Problem 2)
  can currently only be solved by either disabling HIGHMEM64G
  in the kernel config or USB Legacy support in the BIOS. A BIOS update
  could help, but so far no such update exists.

Problem 3)
  is usually fixed by a BIOS update. Check the board
  manufacturers web site. If an update is not available, disable USB
  Legacy support in the BIOS. If this alone doesn't help, try also adding
+6 −40
Original line number Diff line number Diff line
@@ -1388,15 +1388,11 @@ config X86_CPUID
	  with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to
	  /dev/cpu/31/cpuid.

choice
	prompt "High Memory Support"
	default HIGHMEM4G
config HIGHMEM4G
	bool "High Memory Support"
	depends on X86_32

config NOHIGHMEM
	bool "off"
	help
	  Linux can use up to 64 Gigabytes of physical memory on x86 systems.
	  Linux can use up to 4 Gigabytes of physical memory on x86 systems.
	  However, the address space of 32-bit x86 processors is only 4
	  Gigabytes large. That means that, if you have a large amount of
	  physical memory, not all of it can be "permanently mapped" by the
@@ -1412,38 +1408,9 @@ config NOHIGHMEM
	  possible.

	  If the machine has between 1 and 4 Gigabytes physical RAM, then
	  answer "4GB" here.
	  answer "Y" here.

	  If more than 4 Gigabytes is used then answer "64GB" here. This
	  selection turns Intel PAE (Physical Address Extension) mode on.
	  PAE implements 3-level paging on IA32 processors. PAE is fully
	  supported by Linux, PAE mode is implemented on all recent Intel
	  processors (Pentium Pro and better). NOTE: If you say "64GB" here,
	  then the kernel will not boot on CPUs that don't support PAE!

	  The actual amount of total physical memory will either be
	  auto detected or can be forced by using a kernel command line option
	  such as "mem=256M". (Try "man bootparam" or see the documentation of
	  your boot loader (lilo or loadlin) about how to pass options to the
	  kernel at boot time.)

	  If unsure, say "off".

config HIGHMEM4G
	bool "4GB"
	help
	  Select this if you have a 32-bit processor and between 1 and 4
	  gigabytes of physical RAM.

config HIGHMEM64G
	bool "64GB"
	depends on X86_HAVE_PAE
	select X86_PAE
	help
	  Select this if you have a 32-bit processor and more than 4
	  gigabytes of physical RAM.

endchoice
	  If unsure, say N.

choice
	prompt "Memory split" if EXPERT
@@ -1489,8 +1456,7 @@ config PAGE_OFFSET
	depends on X86_32

config HIGHMEM
	def_bool y
	depends on X86_32 && (HIGHMEM64G || HIGHMEM4G)
	def_bool HIGHMEM4G

config X86_PAE
	bool "PAE (Physical Address Extension) Support"
+0 −2
Original line number Diff line number Diff line
# global x86 required specific stuff
# On 32-bit HIGHMEM4G is not allowed
CONFIG_HIGHMEM64G=y
CONFIG_64BIT=y

# These enable us to allow some of the
+2 −2
Original line number Diff line number Diff line
@@ -11,8 +11,8 @@
 * a virtual address space of one gigabyte, which limits the
 * amount of physical memory you can use to about 950MB.
 *
 * If you want more physical memory than this then see the CONFIG_HIGHMEM4G
 * and CONFIG_HIGHMEM64G options in the kernel configuration.
 * If you want more physical memory than this then see the CONFIG_VMSPLIT_2G
 * and CONFIG_HIGHMEM4G options in the kernel configuration.
 */
#define __PAGE_OFFSET_BASE	_AC(CONFIG_PAGE_OFFSET, UL)
#define __PAGE_OFFSET		__PAGE_OFFSET_BASE
Loading