All of lore.kernel.org
 help / color / mirror / Atom feed
From: Randy Dunlap <randy.dunlap@oracle.com>
To: Reza Mostafid <m.r.mostafid@gmail.com>
Cc: linux-kernel@vger.kernel.org, x86 maintainers <x86@kernel.org>
Subject: Re: kernel panic despite enabling math-emulation
Date: Tue, 02 Jun 2009 13:53:41 -0700	[thread overview]
Message-ID: <4A259155.3000909@oracle.com> (raw)
In-Reply-To: <47a46110905302240w36d78bcbne506210dd7e9c1d2@mail.gmail.com>

Reza Mostafid wrote:
> I am trying to build a stripped down v2.6.* kernel to run on a single
> chip 386 processor.
> As I understand it, the math emulation library must be enabled (
> compiled into the kernel )
> to cater for the absence of a proper HW FPU.
> 
> I am doing the builds on a more modern x86 desktop machine running Fedora 8
> ( based on 2.6.23.1 kernel ) using the source from Fedora 8 ( i.e.
> with the F8 patches
>   applied against a 2.6.23.1 kernel )
> 
> As a first step, after building the kernel with
> 'CONFIG_MATH_EMULATION=y' I tried to test
> this feature on my build machine ( which does have an FPU ), by
> supplying the 'no387'
> boot parameter in order to simulate a non-existing FPU.
> 
> Running the math-emu enabled kernel in this way causes a kernel panic
> which happens before
> spawning 'init' and early-user space initialization.
> 
> I have observed this condition with several 2.6.* kernel versions and
> several Intel/AMD boxes.
> 
> Using the 'earlyprintk=vga' bootparameter and some printk statements
> sprinkled in the
> appropriate corners of the code ( i.e. '__init' function 'no387()' in
> bug.c ) I was able to
> observe that in all three cases the 'no387()' code snippet executes
> its stuff without hick ups
> when the 'no388' boot parameter is processed
> 
>  37 static int __init no_387(char *s)
>  38 {
>  39         boot_cpu_data.hard_math = 0;
>  40         write_cr0(0xE | read_cr0());
>  41         return 1;
>  42 }
>  43
>  44 __setup("no387", no_387);
> 
> The kernel freeze happens as a result of a panic in 'fpu_entry.c' (
> here I have reproduced code
> and line no.s from the file as it exists in v2.6.23.1 under
> 'arch/i386/math-emu' )
> 
> 179   else if ( FPU_CS == __KERNEL_CS )
> 180     {
> 181       printk("math_emulate: %04x:%08lx\n",FPU_CS,FPU_EIP);
> 182       panic("Math emulation needed in kernel");
> 183     }
> 184   else
> 
> In all cases the following lines are the last outputs to the console:
> 
>   math_emulate: <some FPU_CS value>:<some FPU_EIP value>
>   Kernel panic-not syncing: Math emulation needed in kernel
> 
> So it appears that even with math emulation enabled the logic of the
> code in 'fpu_entry.c' takes
> the kernel into the above 'else', i.e. the kernel thinks that there is
> no 'math emulation'.
> 
> Searching the web I was able to find references to this problem in
> several threads but no apparent
> solution to it.
> 
> Math-emulation albeit not a widely used feature, should have been
> around long enough for someone to
> have stumbled upon such an obvious problem.
> 
> Q1) Am I overlooking anything?
> 
>  or
> 
> Q2) Is this a problem in the code?
> 
>  and finally
> 
> Q3) Any suggestions for how I could get a 2.6 kernel to actually run
> with the math-emu?
> 
> 
> 
> Regards
> 
> 
> Reza Mostafid
> 
> 
> 
> ==========================================================================================================
> 
> Here is a reproduction of the steps I took:
> 
> 
> i)   I downloaded the source rpms for the Fedora distro I am running (
> Fedora Core 8 which runs
>      a modified version of the 2.6.23.1 kernel ).
> 
> ii)  I compiled the Fedora kernel version thus obtained ( using the
> supplied distro .config ) and
>      it boots fine
> 
> iii) I then change a single parameter of the original configuration,
> i.e. enable math-emulation and
>      I observed the problem ( kernel panics with the 'no387' param
> supplied )
> 
> iv)  I then reproduced the same problem booting a 'kernel.org' vanilla
> 2.6.23.1 kernel with the same
>      configuration and observed the same problem.
> 
> v)   Finally several different versions of the 'kernel.org' vanilla
> source were compiled with the same
>      configuration ( the FC8 distro '.config' with just the 'math-emu'
> enabled ) on three different PCs.
>      Each time the same problem: Each math-emu enabled kernel boots
> fine, until you supply the 'no387'
>      option, in which case all of them hang at the same place.
> 
> 
> Configuration used as base:    That of the Fedora 8 distro
> 
> Parameter changed:             CONFIG_MATH_EMULATION=y
> 
> Kernels tested:
> 
> 2.6.23.1 source rpm for Fedora 8
> 2.6.23.1 'vanilla' from 'kernel.org'
> 2.6.11.12 'vanilla' from 'kernel.org'
> 2.6.12.6  'vanilla' from 'kernel.org'
> 2.6.28.8  'vanilla' from 'kernel.org'
> 
> CPUs/machines problem was observed on:
> 
> Intel Celeron 331 ( Netburst type P4 )
> AMD Semperon
> AMD Athlon


I can easily reproduce this on a Pentium M running 2.6.30-rc7,
although it's a bit difficult to get a backtrace of it.

-- 
~Randy
LPC 2009, Sept. 23-25, Portland, Oregon
http://linuxplumbersconf.org/2009/

  reply	other threads:[~2009-06-02 20:51 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-31  5:40 kernel panic despite enabling math-emulation Reza Mostafid
2009-06-02 20:53 ` Randy Dunlap [this message]
2009-06-03  3:40   ` Randy Dunlap

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=4A259155.3000909@oracle.com \
    --to=randy.dunlap@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=m.r.mostafid@gmail.com \
    --cc=x86@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.