public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Mikael Pettersson <mikpe@it.uu.se>
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@redhat.com,
	tglx@linutronix.de
Subject: Re: [BUG] 2.6.25-rc2-git8 fails to boot on 486 due to TSC breakage
Date: Sun, 24 Feb 2008 18:52:51 +0100	[thread overview]
Message-ID: <20080224175251.GA17441@elte.hu> (raw)
In-Reply-To: <18369.43239.964660.62249@harpo.it.uu.se>


* Mikael Pettersson <mikpe@it.uu.se> wrote:

> 
> That turned out to be very illuminating:
> 
> --- dmesg-2.6.24-git7	2008-02-24 18:01:25.295851000 +0100
> +++ dmesg-2.6.24-git8	2008-02-24 18:01:25.530358000 +0100
> ...
>  CPU: After generic identify, caps: 00000003 00000000 00000000 00000000 00000000 00000000 00000000 00000000
>  
>  CPU: After all inits, caps: 00000003 00000000 00000000 00000000 00000000 00000000 00000000 00000000
> +CPU: After applying cleared_cpu_caps, caps: 00000013 00000000 00000000 00000000 00000000 00000000 00000000 00000000
> 
> Notice how the TSC cap bit goes from Off to On.
> 
> (The first two lines are printout loops from -git7 forward-ported
> to -git8, the third line is the same printout loop added just after
> the xor-with-cleared_cpu_caps[] loop.)
> 
> Here's how the breakage occurs:
> 1. arch/x86/kernel/tsc_32.c:tsc_init() sees !cpu_has_tsc,
>    so bails and calls setup_clear_cpu_cap(X86_FEATURE_TSC).
> 2. include/asm-x86/cpufeature.h:setup_clear_cpu_cap(bit) clears
>    the bit in boot_cpu_data and sets it in cleared_cpu_caps
> 3. arch/x86/kernel/cpu/common.c:identify_cpu() XORs all caps
>    in with cleared_cpu_caps
>    HOWEVER, at this point c->x86_capability correctly has TSC
>    Off, cleared_cpu_caps has TSC On, so the XOR incorrectly
>    sets TSC to On in c->x86_capability, with disastrous results.
> 
> The real bug is that clearing bits with XOR only works if the bits are 
> known to be 1 prior to the XOR, and that's not true here.
> 
> A simple fix is to convert the XOR to AND-NOT instead. The following 
> patch does that, and allows my 486 to boot 2.6.25-rc kernels again.

thanks for the fix, i've queued it up. The breakage was introduced via:

  commit 7d851c8d3db0f79b92c8b14361779ede8acd2488
  Author: Andi Kleen <ak@suse.de>
  Date:   Wed Jan 30 13:33:20 2008 +0100

    x86: add framework to disable CPUID bits on the command line

    There are already various options to disable specific cpuid bits
    on the command line. They all use their own variable. Add a generic
    mask to make this easier in the future.

    Signed-off-by: Andi Kleen <ak@suse.de>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

	Ingo

  reply	other threads:[~2008-02-24 17:53 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-24 11:07 [BUG] 2.6.25-rc2-git8 fails to boot on 486 due to TSC breakage Mikael Pettersson
2008-02-24 13:57 ` Ingo Molnar
2008-02-24 15:16   ` Mikael Pettersson
2008-02-24 15:32     ` Ingo Molnar
2008-02-24 17:27     ` Mikael Pettersson
2008-02-24 17:52       ` Ingo Molnar [this message]
2008-02-25  0:57       ` H. Peter Anvin
2008-02-25  8:26         ` Ingo Molnar
2008-02-25  9:17           ` Mikael Pettersson
2008-02-25  9:19             ` Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080224175251.GA17441@elte.hu \
    --to=mingo@elte.hu \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mikpe@it.uu.se \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox