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"
 
 endmenu
 
 config UML_X86
+       def_bool y
+
+config 64BIT
        bool
-       default y
+       default SUBARCH = "x86_64"
 
 config X86_32
-       bool
-       default y
-       select HAVE_AOUT
+       def_bool !64BIT
+       select HAVE_AOUT
 
 config RWSEM_XCHGADD_ALGORITHM
-       def_bool y
+       def_bool X86_XADD
 
-config 64BIT
-       bool
-       default n
+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
        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
 
+++ /dev/null
-
-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
 
 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