x86, um: merge Kconfig.i386 and Kconfig.x86_64

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
diff --git a/arch/um/Kconfig b/arch/um/Kconfig
index 393bccf..a0801fd 100644
--- a/arch/um/Kconfig
+++ b/arch/um/Kconfig
@@ -85,6 +85,10 @@
 	  Additionally, this option enables using higher memory spaces (up to
 	  2.75G) for UML.
 
+config SUBARCH
+	string
+	option env="SUBARCH"
+
 source "arch/um/Kconfig.arch"
 source "mm/Kconfig"
 source "kernel/time/Kconfig"
diff --git a/arch/um/Kconfig.i386 b/arch/um/Kconfig.x86
similarity index 68%
rename from arch/um/Kconfig.i386
rename to arch/um/Kconfig.x86
index 1f57c11..76200c9 100644
--- a/arch/um/Kconfig.i386
+++ b/arch/um/Kconfig.x86
@@ -5,24 +5,25 @@
 endmenu
 
 config UML_X86
-	bool
-	default y
-
-config X86_32
-	bool
-	default y
-  	select HAVE_AOUT
-
-config RWSEM_XCHGADD_ALGORITHM
 	def_bool y
 
 config 64BIT
 	bool
-	default n
+	default SUBARCH = "x86_64"
+
+config X86_32
+	def_bool !64BIT
+	select HAVE_AOUT
+
+config RWSEM_XCHGADD_ALGORITHM
+	def_bool X86_XADD
+
+config RWSEM_GENERIC_SPINLOCK
+	def_bool !X86_XADD
 
 config 3_LEVEL_PGTABLES
-	bool "Three-level pagetables (EXPERIMENTAL)"
-	default n
+	bool "Three-level pagetables (EXPERIMENTAL)" if !64BIT
+	default 64BIT
 	depends on EXPERIMENTAL
 	help
 	Three-level pagetables will let UML have more than 4G of physical
@@ -33,13 +34,13 @@
 	N (on x86-64 it's automatically enabled, instead, as it's safe there).
 
 config ARCH_HAS_SC_SIGNALS
-	bool
-	default y
+	def_bool !64BIT
 
 config ARCH_REUSE_HOST_VSYSCALL_AREA
-	bool
-	default y
+	def_bool !64BIT
+
+config SMP_BROKEN
+	def_bool 64BIT
 
 config GENERIC_HWEIGHT
-	bool
-	default y
+	def_bool y
diff --git a/arch/um/Kconfig.x86_64 b/arch/um/Kconfig.x86_64
deleted file mode 100644
index 40b3407..0000000
--- a/arch/um/Kconfig.x86_64
+++ /dev/null
@@ -1,39 +0,0 @@
-
-menu "Host processor type and features"
-
-source "arch/x86/Kconfig.cpu"
-
-endmenu
-
-config UML_X86
-	bool
-	default y
-
-config 64BIT
-	bool
-	default y
-
-#XXX: this is so in the underlying arch, but it's wrong!!!
-config RWSEM_GENERIC_SPINLOCK
-	bool
-	default y
-
-config 3_LEVEL_PGTABLES
-       bool
-       default y
-
-config ARCH_HAS_SC_SIGNALS
-	bool
-	default n
-
-config ARCH_REUSE_HOST_VSYSCALL_AREA
-	bool
-	default n
-
-config SMP_BROKEN
-	bool
-	default y
-
-config GENERIC_HWEIGHT
-	bool
-	default y
diff --git a/arch/um/Makefile b/arch/um/Makefile
index 2e042b0..bc070ce 100644
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -96,9 +96,9 @@
 endef
 
 ifneq ($(KBUILD_SRC),)
-$(shell mkdir -p $(ARCH_DIR) && ln -fsn $(srctree)/$(ARCH_DIR)/Kconfig.$(SUBARCH) $(ARCH_DIR)/Kconfig.arch)
+$(shell mkdir -p $(ARCH_DIR) && ln -fsn $(srctree)/$(ARCH_DIR)/Kconfig.$(HEADER_ARCH) $(ARCH_DIR)/Kconfig.arch)
 else
-$(shell ln -fsn Kconfig.$(SUBARCH) $(ARCH_DIR)/Kconfig.arch)
+$(shell ln -fsn Kconfig.$(HEADER_ARCH) $(ARCH_DIR)/Kconfig.arch)
 endif
 
 archprepare: $(ARCH_SYMLINKS) $(ARCH_DIR)/include/shared/user_constants.h