2007-11-17 14:36:00

by Sam Ravnborg

[permalink] [raw]
Subject: [PATCH] x86: simplify "make ARCH=x86" and fix kconfig all.config

Simplify "make ARCH=x86" and fix kconfig so we again
can set 64BIT in all.config.

For a fix the diffstat is nice:
6 files changed, 3 insertions(+), 36 deletions(-)

The patch reverts these commits:
0f855aa64b3f63d35a891510cf7db932a435c116
-> kconfig: add helper to set config symbol from environment variable

2a113281f5cd2febbab21a93c8943f8d3eece4d3
-> kconfig: use $K64BIT to set 64BIT with all*config targets

Roman Zippel pointed out that kconfig supported string
compares so the additional complexity introduced by the
above two patches were not needed.

With this patch we have following behaviour:

# make {allno,allyes,allmod,rand}config [ARCH=...]
option \ host arch | 32bit | 64bit
=====================================================
./. | 32bit | 64bit
ARCH=x86 | 32bit | 32bit
ARCH=i386 | 32bit | 32bit
ARCH=x86_64 | 64bit | 64bit

The general rule are that ARCH= and native architecture
takes precedence over the configuration.
So make ARCH=i386 [whatever] will always build a 32-bit
kernel no matter what the configuration says.
The configuration will be updated to 32-bit if it was
configured to 64-bit and the other way around.

This behaviour is consistent with previous behaviour so
no suprises here.

make ARCH=x86 will per default result in a 32-bit kernel
but as the only ARCH= value x86 allow the user to select
between 32-bit and 64-bit using menuconfig.

Signed-off-by: Sam Ravnborg <[email protected]>
Cc: Roman Zippel <[email protected]>
Cc: Andreas Herrmann <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
---

Linus - please apply to -rc3.

Note: This patch does not fix the uname -m issue - to do so
Andreas' patch is needed.

Sam

Makefile | 4 +---
README | 2 --
arch/x86/Kconfig | 4 ++--
scripts/kconfig/conf.c | 1 -
scripts/kconfig/confdata.c | 27 ---------------------------
scripts/kconfig/lkc_proto.h | 1 -
6 files changed, 3 insertions(+), 36 deletions(-)

diff --git a/Makefile b/Makefile
index 9c9c4bf..b32963a 100644
--- a/Makefile
+++ b/Makefile
@@ -200,11 +200,9 @@ SRCARCH := $(ARCH)
# Additional ARCH settings for x86
ifeq ($(ARCH),i386)
SRCARCH := x86
- K64BIT := n
endif
ifeq ($(ARCH),x86_64)
SRCARCH := x86
- K64BIT := y
endif

KCONFIG_CONFIG ?= .config
@@ -341,7 +339,7 @@ KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)

export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
-export ARCH SRCARCH K64BIT CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC
+export ARCH SRCARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC
export CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE
export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS

diff --git a/README b/README
index 592f8a2..159912c 100644
--- a/README
+++ b/README
@@ -194,8 +194,6 @@ CONFIGURING the kernel:
"make *config" checks for a file named "all{yes/mod/no/random}.config"
for symbol values that are to be forced. If this file is not found,
it checks for a file named "all.config" to contain forced values.
- Finally it checks the environment variable K64BIT and if found, sets
- the config symbol "64BIT" to the value of the K64BIT variable.

NOTES on "make config":
- having unnecessary drivers will make the kernel bigger, and can
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 1eb5997..368864d 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -3,8 +3,8 @@ mainmenu "Linux Kernel Configuration for x86"

# Select 32 or 64 bit
config 64BIT
- bool "64-bit kernel"
- default n
+ bool "64-bit kernel" if ARCH = "x86"
+ default ARCH = "x86_64"
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
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
index c6bee85..a38787a 100644
--- a/scripts/kconfig/conf.c
+++ b/scripts/kconfig/conf.c
@@ -591,7 +591,6 @@ int main(int ac, char **av)
conf_read_simple(name, S_DEF_USER);
else if (!stat("all.config", &tmpstat))
conf_read_simple("all.config", S_DEF_USER);
- conf_set_env_sym("K64BIT", "64BIT", S_DEF_USER);
break;
default:
break;
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index e4fa3f3..e0f402f 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -145,33 +145,6 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
return 0;
}

-/* Read an environment variable and assign the value to the symbol */
-int conf_set_env_sym(const char *env, const char *symname, int def)
-{
- struct symbol *sym;
- char *p;
- int def_flags;
-
- p = getenv(env);
- if (p) {
- char warning[200];
- sprintf(warning, "Environment variable (%s = \"%s\")", env, p);
- conf_filename = warning;
- def_flags = SYMBOL_DEF << def;
- if (def == S_DEF_USER) {
- sym = sym_find(symname);
- if (!sym)
- return 1;
- } else {
- sym = sym_lookup(symname, 0);
- if (sym->type == S_UNKNOWN)
- sym->type = S_OTHER;
- }
- conf_set_sym_val(sym, def, def_flags, p);
- }
- return 0;
-}
-
int conf_read_simple(const char *name, int def)
{
FILE *in = NULL;
diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h
index dca294e..4d09f6d 100644
--- a/scripts/kconfig/lkc_proto.h
+++ b/scripts/kconfig/lkc_proto.h
@@ -1,7 +1,6 @@

/* confdata.c */
P(conf_parse,void,(const char *name));
-P(conf_set_env_sym,int,(const char *envname, const char *symname, int def));
P(conf_read,int,(const char *name));
P(conf_read_simple,int,(const char *name, int));
P(conf_write,int,(const char *name));


2007-11-19 09:34:49

by Andreas Herrmann

[permalink] [raw]
Subject: [PATCH] x86: fix UTS_MACHINE to be i386 for 32-bit build and x86_64 for 64-bit build

On Sat, Nov 17, 2007 at 03:37:31PM +0100, Sam Ravnborg wrote:
>
> Note: This patch does not fix the uname -m issue - to do so
> Andreas' patch is needed.
>
> Sam

Linus,

The issue Sam refers to is that UTS_MACHINE is set to "x86" instead of
"i386" or "x86_64" when building with ARCH=x86. Thus the new kernel
when booted will give either "x86" on x86_64 and many i386 systems or
even "x66" on other i386 systems for 'uname -m'.

Many tools rely on the usual values of "x86_64", "i366" and "i686"
here. So we shouldn't change this.

Attached patch fixes that issue. Please apply.


Regards,

Andreas

--
x86: fix UTS_MACHINE to be i386 for 32-bit build and x86_64 for 64-bit build

Cc: Thomas Gleixner <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Cc: Sam Ravnborg <[email protected]>
Cc: Roman Zippel <[email protected]>
Signed-off-by: Andreas Herrmann <[email protected]>
---
arch/x86/Makefile | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 116b03a..7aa1dc6 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -11,10 +11,9 @@ endif
$(srctree)/arch/x86/Makefile%: ;

ifeq ($(CONFIG_X86_32),y)
+ UTS_MACHINE := i386
include $(srctree)/arch/x86/Makefile_32
else
+ UTS_MACHINE := x86_64
include $(srctree)/arch/x86/Makefile_64
endif
-
-
-
--
1.5.3.4


2007-11-19 10:39:56

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [PATCH] x86: fix UTS_MACHINE to be i386 for 32-bit build and x86_64 for 64-bit build

On Mon, Nov 19, 2007 at 10:34:37AM +0100, Andreas Herrmann wrote:
> On Sat, Nov 17, 2007 at 03:37:31PM +0100, Sam Ravnborg wrote:
> >
> > Note: This patch does not fix the uname -m issue - to do so
> > Andreas' patch is needed.
> >
> > Sam
>
> Linus,
>
> The issue Sam refers to is that UTS_MACHINE is set to "x86" instead of
> "i386" or "x86_64" when building with ARCH=x86. Thus the new kernel
> when booted will give either "x86" on x86_64 and many i386 systems or
> even "x66" on other i386 systems for 'uname -m'.
>
> Many tools rely on the usual values of "x86_64", "i366" and "i686"
> here. So we shouldn't change this.

Andreas - I will suggest you to submit a new patch with
a better changelog where you jsut describe what you fix.
The above explanations looks a bit weird if read stand alone.

You can always add additional comments after the line containing:
---

In this way it is not included in the changelog but Linus can read it.

Anyway - your patch has my ack.

Sam

>
> Attached patch fixes that issue. Please apply.
>
>
> Regards,
>
> Andreas
>
> --
> x86: fix UTS_MACHINE to be i386 for 32-bit build and x86_64 for 64-bit build
>
> Cc: Thomas Gleixner <[email protected]>
> Cc: Ingo Molnar <[email protected]>
> Cc: "H. Peter Anvin" <[email protected]>
> Cc: Sam Ravnborg <[email protected]>
> Cc: Roman Zippel <[email protected]>
> Signed-off-by: Andreas Herrmann <[email protected]>
Acked-by: Sam Ravnborg <[email protected]>

> ---
> arch/x86/Makefile | 5 ++---
> 1 files changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/Makefile b/arch/x86/Makefile
> index 116b03a..7aa1dc6 100644
> --- a/arch/x86/Makefile
> +++ b/arch/x86/Makefile
> @@ -11,10 +11,9 @@ endif
> $(srctree)/arch/x86/Makefile%: ;
>
> ifeq ($(CONFIG_X86_32),y)
> + UTS_MACHINE := i386
> include $(srctree)/arch/x86/Makefile_32
> else
> + UTS_MACHINE := x86_64
> include $(srctree)/arch/x86/Makefile_64
> endif
> -
> -
> -
> --
> 1.5.3.4
>
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/

Subject: Re: [PATCH] x86: fix UTS_MACHINE to be i386 for 32-bit build and x86_64 for 64-bit build

On Mon, Nov 19, 2007 at 11:41:29AM +0100, Sam Ravnborg wrote:
> On Mon, Nov 19, 2007 at 10:34:37AM +0100, Andreas Herrmann wrote:
> > On Sat, Nov 17, 2007 at 03:37:31PM +0100, Sam Ravnborg wrote:
> > >
> > > Note: This patch does not fix the uname -m issue - to do so
> > > Andreas' patch is needed.
> > >
> > > Sam
> >
> > Linus,
> >
> > The issue Sam refers to is that UTS_MACHINE is set to "x86" instead of
> > "i386" or "x86_64" when building with ARCH=x86. Thus the new kernel
> > when booted will give either "x86" on x86_64 and many i386 systems or
> > even "x66" on other i386 systems for 'uname -m'.
> >
> > Many tools rely on the usual values of "x86_64", "i366" and "i686"
> > here. So we shouldn't change this.
>
> Andreas - I will suggest you to submit a new patch with
> a better changelog where you jsut describe what you fix.
> The above explanations looks a bit weird if read stand alone.

Ok, I'll resend the patch with an updated changelog asap.

> You can always add additional comments after the line containing:
> ---
>
> In this way it is not included in the changelog but Linus can read it.
>
> Anyway - your patch has my ack.

Thanks,


Andreas



2007-11-19 22:59:15

by Andreas Herrmann

[permalink] [raw]
Subject: [PATCH] x86: correctly set UTS_MACHINE for "make ARCH=x86"

Upon request I have updated the patch description
and hope it is now more explanatory.

IMHO this should go into 2.6.24.
BTW, the patch was tested with v2.6.24-rc3-19-g2ffbb83.


Regards,

Andreas

--
x86: correctly set UTS_MACHINE for "make ARCH=x86"

For a kernel built with "make ARCH=x86" the following system
information is displayed when running the new kernel

$ uname -m
x86

On some i386 systems (e.g. K7) we even have the following information

$ uname -m
x66

This is weird. The usual information for "uname -m" should be "x86_64"
on 64-bit and "i386" or "i686" on 32-bit.

This patch fixes the issue by setting UTS_MACHINE to "i386" for 32-bit
kernel builds and to "x86_64" for 64-bit kernel builds. I.e., "x86"
won't be used for UTS_MACHINE anymore.

Cc: Thomas Gleixner <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Acked-by: Sam Ravnborg <[email protected]>
Signed-off-by: Andreas Herrmann <[email protected]>

---
arch/x86/Makefile | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 116b03a..7aa1dc6 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -11,10 +11,9 @@ endif
$(srctree)/arch/x86/Makefile%: ;

ifeq ($(CONFIG_X86_32),y)
+ UTS_MACHINE := i386
include $(srctree)/arch/x86/Makefile_32
else
+ UTS_MACHINE := x86_64
include $(srctree)/arch/x86/Makefile_64
endif
-
-
-
--
1.5.3.4