Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 743aa456 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'x86-nuke386-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull "Nuke 386-DX/SX support" from Ingo Molnar:
 "This tree removes ancient-386-CPUs support and thus zaps quite a bit
  of complexity:

    24 files changed, 56 insertions(+), 425 deletions(-)

  ... which complexity has plagued us with extra work whenever we wanted
  to change SMP primitives, for years.

  Unfortunately there's a nostalgic cost: your old original 386 DX33
  system from early 1991 won't be able to boot modern Linux kernels
  anymore.  Sniff."

I'm not sentimental.  Good riddance.

* 'x86-nuke386-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86, 386 removal: Document Nx586 as a 386 and thus unsupported
  x86, cleanups: Simplify sync_core() in the case of no CPUID
  x86, 386 removal: Remove CONFIG_X86_POPAD_OK
  x86, 386 removal: Remove CONFIG_X86_WP_WORKS_OK
  x86, 386 removal: Remove CONFIG_INVLPG
  x86, 386 removal: Remove CONFIG_BSWAP
  x86, 386 removal: Remove CONFIG_XADD
  x86, 386 removal: Remove CONFIG_CMPXCHG
  x86, 386 removal: Remove CONFIG_M386 from Kconfig
parents a05a4e24 11af32b6
Loading
Loading
Loading
Loading
+3 −8
Original line number Diff line number Diff line
@@ -69,8 +69,8 @@ config X86
	select HAVE_PERF_USER_STACK_DUMP
	select HAVE_DEBUG_KMEMLEAK
	select ANON_INODES
	select HAVE_ALIGNED_STRUCT_PAGE if SLUB && !M386
	select HAVE_CMPXCHG_LOCAL if !M386
	select HAVE_ALIGNED_STRUCT_PAGE if SLUB
	select HAVE_CMPXCHG_LOCAL
	select HAVE_CMPXCHG_DOUBLE
	select HAVE_ARCH_KMEMCHECK
	select HAVE_USER_RETURN_NOTIFIER
@@ -171,13 +171,8 @@ config ARCH_MAY_HAVE_PC_FDC
	def_bool y
	depends on ISA_DMA_API

config RWSEM_GENERIC_SPINLOCK
	def_bool y
	depends on !X86_XADD

config RWSEM_XCHGADD_ALGORITHM
	def_bool y
	depends on X86_XADD

config GENERIC_CALIBRATE_DELAY
	def_bool y
@@ -1100,7 +1095,7 @@ config HIGHMEM4G

config HIGHMEM64G
	bool "64GB"
	depends on !M386 && !M486
	depends on !M486
	select X86_PAE
	---help---
	  Select this if you have a 32-bit processor and more than 4
+20 −53
Original line number Diff line number Diff line
@@ -4,23 +4,24 @@ choice
	default M686 if X86_32
	default GENERIC_CPU if X86_64

config M386
	bool "386"
	depends on X86_32 && !UML
config M486
	bool "486"
	depends on X86_32
	---help---
	  This is the processor type of your CPU. This information is used for
	  optimizing purposes. In order to compile a kernel that can run on
	  all x86 CPU types (albeit not optimally fast), you can specify
	  "386" here.
	  This is the processor type of your CPU. This information is
	  used for optimizing purposes. In order to compile a kernel
	  that can run on all supported x86 CPU types (albeit not
	  optimally fast), you can specify "486" here.

	  Note that the 386 is no longer supported, this includes
	  AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix/TI 486DLC/DLC2,
	  UMC 486SX-S and the NexGen Nx586.

	  The kernel will not necessarily run on earlier architectures than
	  the one you have chosen, e.g. a Pentium optimized kernel will run on
	  a PPro, but not necessarily on a i486.

	  Here are the settings recommended for greatest speed:
	  - "386" for the AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix/TI
	  486DLC/DLC2, and UMC 486SX-S.  Only "386" kernels will run on a 386
	  class machine.
	  - "486" for the AMD/Cyrix/IBM/Intel 486DX/DX2/DX4 or
	  SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or U5S.
	  - "586" for generic Pentium CPUs lacking the TSC
@@ -43,16 +44,7 @@ config M386
	  - "VIA C3-2" for VIA C3-2 "Nehemiah" (model 9 and above).
	  - "VIA C7" for VIA C7.

	  If you don't know what to do, choose "386".

config M486
	bool "486"
	depends on X86_32
	---help---
	  Select this for a 486 series processor, either Intel or one of the
	  compatible processors from AMD, Cyrix, IBM, or Intel.  Includes DX,
	  DX2, and DX4 variants; also SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or
	  U5S.
	  If you don't know what to do, choose "486".

config M586
	bool "586/K5/5x86/6x86/6x86MX"
@@ -305,24 +297,16 @@ config X86_INTERNODE_CACHE_SHIFT
	default "12" if X86_VSMP
	default X86_L1_CACHE_SHIFT

config X86_CMPXCHG
	def_bool y
	depends on X86_64 || (X86_32 && !M386)

config X86_L1_CACHE_SHIFT
	int
	default "7" if MPENTIUM4 || MPSC
	default "6" if MK7 || MK8 || MPENTIUMM || MCORE2 || MATOM || MVIAC7 || X86_GENERIC || GENERIC_CPU
	default "4" if MELAN || M486 || M386 || MGEODEGX1
	default "4" if MELAN || M486 || MGEODEGX1
	default "5" if MWINCHIP3D || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 || MGEODE_LX

config X86_XADD
	def_bool y
	depends on !M386

config X86_PPRO_FENCE
	bool "PentiumPro memory ordering errata workaround"
	depends on M686 || M586MMX || M586TSC || M586 || M486 || M386 || MGEODEGX1
	depends on M686 || M586MMX || M586TSC || M586 || M486 || MGEODEGX1
	---help---
	  Old PentiumPro multiprocessor systems had errata that could cause
	  memory operations to violate the x86 ordering standard in rare cases.
@@ -335,27 +319,11 @@ config X86_PPRO_FENCE

config X86_F00F_BUG
	def_bool y
	depends on M586MMX || M586TSC || M586 || M486 || M386
	depends on M586MMX || M586TSC || M586 || M486

config X86_INVD_BUG
	def_bool y
	depends on M486 || M386

config X86_WP_WORKS_OK
	def_bool y
	depends on !M386

config X86_INVLPG
	def_bool y
	depends on X86_32 && !M386

config X86_BSWAP
	def_bool y
	depends on X86_32 && !M386

config X86_POPAD_OK
	def_bool y
	depends on X86_32 && !M386
	depends on M486

config X86_ALIGNMENT_16
	def_bool y
@@ -412,12 +380,11 @@ config X86_MINIMUM_CPU_FAMILY
	default "64" if X86_64
	default "6" if X86_32 && X86_P6_NOP
	default "5" if X86_32 && X86_CMPXCHG64
	default "4" if X86_32 && (X86_XADD || X86_CMPXCHG || X86_BSWAP || X86_WP_WORKS_OK)
	default "3"
	default "4"

config X86_DEBUGCTLMSR
	def_bool y
	depends on !(MK6 || MWINCHIPC6 || MWINCHIP3D || MCYRIXIII || M586MMX || M586TSC || M586 || M486 || M386) && !UML
	depends on !(MK6 || MWINCHIPC6 || MWINCHIP3D || MCYRIXIII || M586MMX || M586TSC || M586 || M486) && !UML

menuconfig PROCESSOR_SELECT
	bool "Supported processor vendors" if EXPERT
@@ -441,7 +408,7 @@ config CPU_SUP_INTEL
config CPU_SUP_CYRIX_32
	default y
	bool "Support Cyrix processors" if PROCESSOR_SELECT
	depends on M386 || M486 || M586 || M586TSC || M586MMX || (EXPERT && !64BIT)
	depends on M486 || M586 || M586TSC || M586MMX || (EXPERT && !64BIT)
	---help---
	  This enables detection, tunings and quirks for Cyrix processors

@@ -495,7 +462,7 @@ config CPU_SUP_TRANSMETA_32
config CPU_SUP_UMC_32
	default y
	bool "Support UMC processors" if PROCESSOR_SELECT
	depends on M386 || M486 || (EXPERT && !64BIT)
	depends on M486 || (EXPERT && !64BIT)
	---help---
	  This enables detection, tunings and quirks for UMC processors

+0 −1
Original line number Diff line number Diff line
@@ -10,7 +10,6 @@ tune = $(call cc-option,-mcpu=$(1),$(2))
endif

align := $(cc-option-align)
cflags-$(CONFIG_M386)		+= -march=i386
cflags-$(CONFIG_M486)		+= -march=i486
cflags-$(CONFIG_M586)		+= -march=i586
cflags-$(CONFIG_M586TSC)	+= -march=i586
+0 −16
Original line number Diff line number Diff line
@@ -172,23 +172,7 @@ static inline int atomic_add_negative(int i, atomic_t *v)
 */
static inline int atomic_add_return(int i, atomic_t *v)
{
#ifdef CONFIG_M386
	int __i;
	unsigned long flags;
	if (unlikely(boot_cpu_data.x86 <= 3))
		goto no_xadd;
#endif
	/* Modern 486+ processor */
	return i + xadd(&v->counter, i);

#ifdef CONFIG_M386
no_xadd: /* Legacy 386 processor */
	raw_local_irq_save(flags);
	__i = atomic_read(v);
	atomic_set(v, i + __i);
	raw_local_irq_restore(flags);
	return i + __i;
#endif
}

/**
+0 −55
Original line number Diff line number Diff line
@@ -34,9 +34,7 @@ static inline void set_64bit(volatile u64 *ptr, u64 value)
		     : "memory");
}

#ifdef CONFIG_X86_CMPXCHG
#define __HAVE_ARCH_CMPXCHG 1
#endif

#ifdef CONFIG_X86_CMPXCHG64
#define cmpxchg64(ptr, o, n)						\
@@ -73,59 +71,6 @@ static inline u64 __cmpxchg64_local(volatile u64 *ptr, u64 old, u64 new)
	return prev;
}

#ifndef CONFIG_X86_CMPXCHG
/*
 * Building a kernel capable running on 80386. It may be necessary to
 * simulate the cmpxchg on the 80386 CPU. For that purpose we define
 * a function for each of the sizes we support.
 */

extern unsigned long cmpxchg_386_u8(volatile void *, u8, u8);
extern unsigned long cmpxchg_386_u16(volatile void *, u16, u16);
extern unsigned long cmpxchg_386_u32(volatile void *, u32, u32);

static inline unsigned long cmpxchg_386(volatile void *ptr, unsigned long old,
					unsigned long new, int size)
{
	switch (size) {
	case 1:
		return cmpxchg_386_u8(ptr, old, new);
	case 2:
		return cmpxchg_386_u16(ptr, old, new);
	case 4:
		return cmpxchg_386_u32(ptr, old, new);
	}
	return old;
}

#define cmpxchg(ptr, o, n)						\
({									\
	__typeof__(*(ptr)) __ret;					\
	if (likely(boot_cpu_data.x86 > 3))				\
		__ret = (__typeof__(*(ptr)))__cmpxchg((ptr),		\
				(unsigned long)(o), (unsigned long)(n),	\
				sizeof(*(ptr)));			\
	else								\
		__ret = (__typeof__(*(ptr)))cmpxchg_386((ptr),		\
				(unsigned long)(o), (unsigned long)(n),	\
				sizeof(*(ptr)));			\
	__ret;								\
})
#define cmpxchg_local(ptr, o, n)					\
({									\
	__typeof__(*(ptr)) __ret;					\
	if (likely(boot_cpu_data.x86 > 3))				\
		__ret = (__typeof__(*(ptr)))__cmpxchg_local((ptr),	\
				(unsigned long)(o), (unsigned long)(n),	\
				sizeof(*(ptr)));			\
	else								\
		__ret = (__typeof__(*(ptr)))cmpxchg_386((ptr),		\
				(unsigned long)(o), (unsigned long)(n),	\
				sizeof(*(ptr)));			\
	__ret;								\
})
#endif

#ifndef CONFIG_X86_CMPXCHG64
/*
 * Building a kernel capable running on 80386 and 80486. It may be necessary
Loading