I've now been running git. I started with
git clone 
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.25.y.git

I did a git bisect and found that the commit that introduced the bug is

commit 94aa6550e8668fab1997e2d57a48b22cf68090b2
Author: Thomas Gleixner 
Date:   Tue May 13 12:31:00 2008 +0200

    x86: distangle user disabled TSC from unstable

    upstream commit: 9ccc906c97e34fd91dc6aaf5b69b52d824386910

    tsc_enabled is set to 0 from the command line switch "notsc" and from
    the mark_tsc_unstable code. Seperate those functionalities and replace
    tsc_enable with tsc_disable. This makes also the native_sched_clock()
    decision when to use TSC understandable.

    Preparatory patch to solve the sched_clock() issue on 32 bit.

    Signed-off-by: Thomas Gleixner 
    Signed-off-by: Chris Wright 

This commit changes file arch/x86/kernel/tsc_32.c

I tried booting with notsc but I still got "BUG: Int 6: CR2 00000000"

After looking at the commitdiff, I guessed that native_sched_clock() gets 
called before tsc_init().
http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.25.y.git;a=commitdiff;h=94aa6550e8668fab1997e2d57a48b22cf68090b2

Prior to the commit native_sched_clock() looked at unitialised tsc_enable which 
holds 0
so didn't attempt to access a TSC. After the commit native_sched_clock() looks 
at 
unitialised tsc_disable which holds 0 so attempts to access a TSC leading to 
the BUG:

Starting with a kernel tree from immediately after the faulty commit. I made 
the following
change which stops the BUG occuring.

*** arch/x86/kernel/tsc_32.c.000        2008-07-30 13:07:57.000000000 +0100
--- arch/x86/kernel/tsc_32.c    2008-07-30 13:09:57.000000000 +0100
*************** unsigned long long native_sched_clock(vo
*** 121,127 ****
         *   very important for it to be as fast as the platform
         *   can achive it. )
         */
!       if (unlikely(tsc_disabled))
                /* No locking but a rare wrong value is not a big deal: */
                return (jiffies_64 - INITIAL_JIFFIES) * (1000000000 / HZ);

--- 121,127 ----
         *   very important for it to be as fast as the platform
         *   can achive it. )
         */
!       if (unlikely(tsc_disabled || !cpu_has_tsc))
                /* No locking but a rare wrong value is not a big deal: */
                return (jiffies_64 - INITIAL_JIFFIES) * (1000000000 / HZ);

_________________________________________________________________
Stay in touch when you're away with Windows Live Messenger.
http://www.windowslive.com/messenger/overview.html?ocid=TXT_TAGLM_WL_messenger2_072008


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to