Skip to contentSkip to conversation

x86/Kconfig: Fix allnoconfig without explicitly specified ARCH

PATCH In review Borislav Petkov 3 participants 7 messages Apr 3, 2015 – Apr 4, 2015

Subsystems (2)
lore
Share & tools
lore

Borislav Petkov

author maintainer
#0 lore raw

PATCH 1/1 x86/Kconfig: Fix allnoconfig without explicitly specified ARCH

From: Borislav Petkov <[email protected]>

Doing

  $ make allnoconfig

I get a 32-bit allnoconfig:

  $ grep -i x86 .config
  # Linux/x86 4.0.0-rc6 Kernel Configuration
  CONFIG_X86_32=y
  CONFIG_X86=y
  CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"

The same if I do:

  $ make ARCH=i386 allnoconfig
  $ grep -i x86 .config | head -20
  CONFIG_X86_32=y
  CONFIG_X86=y
  CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"

Make allnoconfig without ARCH specified on the command line default to 64-bit.

---
 arch/x86/Kconfig | 1 +
 1 file changed, 1 insertion(+)
arch/x86/Kconfig +1 -0
index 0a37094e458e..04dfb4e7aeff 100644
@@ -2,6 +2,7 @@
 config 64BIT
 	bool "64-bit kernel" if ARCH = "x86"
 	default ARCH != "i386"
+	option allnoconfig_y
 	---help---
 	  Say yes to build a 64-bit kernel - formerly known as x86_64
 	  Say no to build a 32-bit kernel - formerly known as i386
Signature · 1 line
2.3.3
#1 lore raw

Borislav Petkov schreef op vr 03-04-2015 om 13:00 [+0200]:

Quoted 35 lines

From: Borislav Petkov <[email protected]>

Doing

  $ make allnoconfig

I get a 32-bit allnoconfig:

  $ grep -i x86 .config
  # Linux/x86 4.0.0-rc6 Kernel Configuration
  CONFIG_X86_32=y
  CONFIG_X86=y
  CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"

The same if I do:

  $ make ARCH=i386 allnoconfig
  $ grep -i x86 .config | head -20
  CONFIG_X86_32=y
  CONFIG_X86=y
  CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"

Make allnoconfig without ARCH specified on the command line default to 64-bit.

---
 arch/x86/Kconfig | 1 +
 1 file changed, 1 insertion(+)
arch/x86/Kconfig +0 -0
index 0a37094e458e..04dfb4e7aeff 100644

arch/x86/Kconfig line 8

Quoted 7 lines
arch/x86/Kconfig +1 -0
@@ -2,6 +2,7 @@
 config 64BIT
 	bool "64-bit kernel" if ARCH = "x86"
 	default ARCH != "i386"
+	option allnoconfig_y
 	---help---
 	  Say yes to build a 64-bit kernel - formerly known as x86_64
 	  Say no to build a 32-bit kernel - formerly known as i386

A side effect of this patch is that allnoconfig when building on 32 bits now also requires to set ARCH=i386, which is surprising. This seems to help with that:

Makefile +1 -1
@@ -221,7 +221,7 @@ export srctree objtree VPATH
 # then ARCH is assigned, getting whatever value it gets normally, and
 # SUBARCH is subsequently ignored.
 
-SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ \
+SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/x86_64/x86/ \
                                  -e s/sun4u/sparc64/ \
                                  -e s/arm.*/arm/ -e s/sa110/arm/ \
                                  -e s/s390x/s390/ -e s/parisc64/parisc/ \

And that will also set 64BIT to 'n' when doing an allyesconfig on 32 bits. So it removes another surprising configuration one can currently generate.

(I think that has no further side effects. But I need to double check.)

Would some solution that pins 64BIT to 'y' for x86_64 and to 'n' for i386 - even for allnoconfig and allyesconfig - do what you want?

Paul Bolle

author maintainer
#2 lore raw
Quoted 2 lines · Paul Bolle

A side effect of this patch is that allnoconfig when building on 32 bits now also requires to set ARCH=i386, which is surprising. This seems to

How else would you build a 32-bit allnoconfig?

Signature · 5 lines
Regards/Gruss,
    Boris.

ECO tip #101: Trim your mails when you reply.
--
#3 lore raw

Borislav Petkov schreef op vr 03-04-2015 om 16:59 [+0200]:

Quoted 5 lines · Paul Bolle
Quoted 2 lines

A side effect of this patch is that allnoconfig when building on 32 bits now also requires to set ARCH=i386, which is surprising. This seems to

How else would you build a 32-bit allnoconfig?

Well, "when building on 32 bits" it currently suffices to do:
make allnoconfig

and the patch changes that.

Just like it is surprising to get a CONFIG_X86_32=y .config when doing allnoconfig on x86_64 it is also surprising to get a CONFIG_X86_64=y .config when doing allyesconfig on i386. So I think a more general solution to these surprising .configs should be considered.

Thanks,

Paul Bolle

author maintainer
#4 lore raw
Quoted 4 lines · Paul Bolle

Well, "when building on 32 bits" it currently suffices to do:
make allnoconfig

and the patch changes that.

Hmm, so this would need more staring. The fact that 64-bit needs to set CONFIG_64BIT, we would need a way to say:

option allnoconfig_y if ARCH = "x86"

And Kconfig doesn't support that yet...

:-\

Signature · 5 lines
Regards/Gruss,
    Boris.

ECO tip #101: Trim your mails when you reply.
--
#5 lore raw
Quoted 4 lines · Borislav Petkov
Quoted 3 lines · Paul Bolle

Well, "when building on 32 bits" it currently suffices to do:
make allnoconfig

Quoted 8 lines
Quoted 1 line

and the patch changes that.

Hmm, so this would need more staring. The fact that 64-bit needs to set CONFIG_64BIT, we would need a way to say:

option allnoconfig_y if ARCH = "x86"

And Kconfig doesn't support that yet...

The fact that "make allnoconfig" and "make allyesconfig" can give you a .config for another subarchitecture is annoying. I think it would be nice if we teach those make targets (through tweaks in Kconfig files and/or Makefiles) to avoid doing that.

Not sure, yet, how a clean way to do that might look like, sorry.

Paul Bolle

#6 lore raw
Quoted 10 lines · Paul Bolle
Quoted 9 lines · Borislav Petkov
Quoted 4 lines · Paul Bolle

Well, "when building on 32 bits" it currently suffices to do:
make allnoconfig

and the patch changes that.

Hmm, so this would need more staring. The fact that 64-bit needs to set CONFIG_64BIT, we would need a way to say:

Quoted 6 lines
Quoted 3 lines

option allnoconfig_y if ARCH = "x86"

And Kconfig doesn't support that yet...

The fact that "make allnoconfig" and "make allyesconfig" can give you a .config for another subarchitecture is annoying. [...]

Absolutely! No 'make *config' option should change the current .config's architecture, except if ARCH= is specified on the command line.

Thanks,

Ingo