2006-01-31 22:32:21

by Jacek Lipkowski

[permalink] [raw]
Subject: patch to make 2.4.32 work on i486 again

Booting the 2.4.32 kernel compiled for a i486 on an i486 box fails,
because "Kernel compiled for Pentium+, requires TSC feature!" (printed
from check_config() include/asm-i386/bugs.h). To reproduce, select 486 in
the kernel configuration and grep CONFIG_X86_TSC .config

Seems strange that no one noticed this, am i the only one still using 486
boxes? :)

Jacek

Simple patch against vanilla 2.4.32:

--- arch/i386/config.in.old 2006-01-30 22:57:21.000000000 +0100
+++ arch/i386/config.in 2006-01-30 23:00:55.000000000 +0100
@@ -65,6 +65,7 @@
define_bool CONFIG_X86_POPAD_OK y
define_bool CONFIG_RWSEM_GENERIC_SPINLOCK n
define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM y
+ define_bool CONFIG_X86_TSC n
fi
if [ "$CONFIG_M486" = "y" ]; then
define_int CONFIG_X86_L1_CACHE_SHIFT 4
@@ -72,6 +73,7 @@
define_bool CONFIG_X86_ALIGNMENT_16 y
define_bool CONFIG_X86_PPRO_FENCE y
define_bool CONFIG_X86_F00F_WORKS_OK n
+ define_bool CONFIG_X86_TSC n
fi
if [ "$CONFIG_M586" = "y" ]; then
define_int CONFIG_X86_L1_CACHE_SHIFT 5


2006-01-31 22:37:04

by Grant Coady

[permalink] [raw]
Subject: Re: patch to make 2.4.32 work on i486 again

On 2/1/06, Jacek Lipkowski <[email protected]> wrote:
> Booting the 2.4.32 kernel compiled for a i486 on an i486 box fails,
> because "Kernel compiled for Pentium+, requires TSC feature!" (printed
> from check_config() include/asm-i386/bugs.h). To reproduce, select 486 in
> the kernel configuration and grep CONFIG_X86_TSC .config
>
> Seems strange that no one noticed this, am i the only one still using 486
> boxes? :)

I keep old stuff going, but no i486 mobo's here :(

Grant.

2006-02-01 05:21:13

by Willy Tarreau

[permalink] [raw]
Subject: Re: patch to make 2.4.32 work on i486 again

Hi,

On Tue, Jan 31, 2006 at 11:29:05PM +0100, Jacek Lipkowski wrote:
> Booting the 2.4.32 kernel compiled for a i486 on an i486 box fails,
> because "Kernel compiled for Pentium+, requires TSC feature!" (printed
> from check_config() include/asm-i386/bugs.h). To reproduce, select 486 in
> the kernel configuration and grep CONFIG_X86_TSC .config
>
> Seems strange that no one noticed this, am i the only one still using 486
> boxes? :)

perhaps :-)
It's been more than one year since I last booted mine. However, I believe
I came through this bug by accident while compiling a kernel of a VIA Eden
CPU, then I realized it should be compiled as i586 and forgot about the
bug.

> Jacek
>
> Simple patch against vanilla 2.4.32:

Thanks. I've queued it for the next hotfix.
Marcelo, I've put it in -upstream if you want.

Regards,
Willy

2006-02-01 10:29:21

by Mikael Pettersson

[permalink] [raw]
Subject: Re: patch to make 2.4.32 work on i486 again

Jacek Lipkowski writes:
> Booting the 2.4.32 kernel compiled for a i486 on an i486 box fails,
> because "Kernel compiled for Pentium+, requires TSC feature!" (printed
> from check_config() include/asm-i386/bugs.h). To reproduce, select 486 in
> the kernel configuration and grep CONFIG_X86_TSC .config
>
> Seems strange that no one noticed this, am i the only one still using 486
> boxes? :)
>
> Jacek
>
> Simple patch against vanilla 2.4.32:
>
> --- arch/i386/config.in.old 2006-01-30 22:57:21.000000000 +0100
> +++ arch/i386/config.in 2006-01-30 23:00:55.000000000 +0100
> @@ -65,6 +65,7 @@
> define_bool CONFIG_X86_POPAD_OK y
> define_bool CONFIG_RWSEM_GENERIC_SPINLOCK n
> define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM y
> + define_bool CONFIG_X86_TSC n
> fi
> if [ "$CONFIG_M486" = "y" ]; then
> define_int CONFIG_X86_L1_CACHE_SHIFT 4
> @@ -72,6 +73,7 @@
> define_bool CONFIG_X86_ALIGNMENT_16 y
> define_bool CONFIG_X86_PPRO_FENCE y
> define_bool CONFIG_X86_F00F_WORKS_OK n
> + define_bool CONFIG_X86_TSC n
> fi
> if [ "$CONFIG_M586" = "y" ]; then
> define_int CONFIG_X86_L1_CACHE_SHIFT 5

This is a known limitation of the 2.4 kernel's configuration system:
a single round of make ${foo}config doesn't always reach a fixpoint
with regard to the derived options. CONFIG_X86_TSC is the standard
example of this: switching from a stable .config with TSC (say i686)
to one without (say i486) leaves a stray definition of CONFIG_X86_TSC
behind in .config. Solution: run 'make oldconfig' after flipping the
user-selectatable options.

Your patch may fix the TSC case, but there are probably more cases
like this in 2.4.

/Mikael

2006-02-02 23:21:33

by Marcelo Tosatti

[permalink] [raw]
Subject: Re: patch to make 2.4.32 work on i486 again

On Wed, Feb 01, 2006 at 06:20:06AM +0100, Willy Tarreau wrote:
> Hi,
>
> On Tue, Jan 31, 2006 at 11:29:05PM +0100, Jacek Lipkowski wrote:
> > Booting the 2.4.32 kernel compiled for a i486 on an i486 box fails,
> > because "Kernel compiled for Pentium+, requires TSC feature!" (printed
> > from check_config() include/asm-i386/bugs.h). To reproduce, select 486 in
> > the kernel configuration and grep CONFIG_X86_TSC .config
> >
> > Seems strange that no one noticed this, am i the only one still using 486
> > boxes? :)
>
> perhaps :-)
> It's been more than one year since I last booted mine. However, I believe
> I came through this bug by accident while compiling a kernel of a VIA Eden
> CPU, then I realized it should be compiled as i586 and forgot about the
> bug.
>
> > Jacek
> >
> > Simple patch against vanilla 2.4.32:
>
> Thanks. I've queued it for the next hotfix.
> Marcelo, I've put it in -upstream if you want.

Patch is correct indeed - thanks Willy.