lkml.org 
[lkml]   [2008]   [Aug]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: Setup code crashes my old 486 box
    On Tue, Aug 12, 2008 at 03:57:31PM -0700, H. Peter Anvin wrote:
    > Right in concept, but I dislike the implementation (duplication of the
    > CPU detect code we already have). Could you try this patch and see if
    > it works for you?

    Cool, with a small modification to fix a build error with it the
    resulting kernel boots my machine. Thanks.
    Would be cool to have this patch one merged soon :-)
    Attached is your patch with my little build fix. It redefines a values
    already defines in cpufeatures.h but I can't include that file in the
    boot code so I simply redeclared it. Maybe there is a cleaner solution
    for this.

    Joerg

    diff --git a/arch/x86/boot/boot.h b/arch/x86/boot/boot.h
    index a34b998..9d4b4b4 100644
    --- a/arch/x86/boot/boot.h
    +++ b/arch/x86/boot/boot.h
    @@ -25,6 +25,8 @@
    #include <asm/boot.h>
    #include <asm/setup.h>

    +#define NCAPINTS 8
    +
    /* Useful macros */
    #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))

    @@ -242,6 +244,12 @@ int cmdline_find_option(const char *option, char *buffer, int bufsize);
    int cmdline_find_option_bool(const char *option);

    /* cpu.c, cpucheck.c */
    +struct cpu_features {
    + int level; /* Family, or 64 for x86-64 */
    + int model;
    + u32 flags[NCAPINTS];
    +};
    +extern struct cpu_features cpu;
    int check_cpu(int *cpu_level_ptr, int *req_level_ptr, u32 **err_flags_ptr);
    int validate_cpu(void);

    diff --git a/arch/x86/boot/cpucheck.c b/arch/x86/boot/cpucheck.c
    index 7804389..c1ce030 100644
    --- a/arch/x86/boot/cpucheck.c
    +++ b/arch/x86/boot/cpucheck.c
    @@ -30,13 +30,7 @@
    #include <asm/required-features.h>
    #include <asm/msr-index.h>

    -struct cpu_features {
    - int level; /* Family, or 64 for x86-64 */
    - int model;
    - u32 flags[NCAPINTS];
    -};
    -
    -static struct cpu_features cpu;
    +struct cpu_features cpu;
    static u32 cpu_vendor[3];
    static u32 err_flags[NCAPINTS];

    diff --git a/arch/x86/boot/main.c b/arch/x86/boot/main.c
    index 2296164..01aa64b 100644
    --- a/arch/x86/boot/main.c
    +++ b/arch/x86/boot/main.c
    @@ -73,6 +73,10 @@ static void keyboard_set_repeat(void)
    */
    static void query_ist(void)
    {
    + /* Some 486 BIOSes apparently crash on this call */
    + if (cpu.level < 6)
    + return;
    +
    asm("int $0x15"
    : "=a" (boot_params.ist_info.signature),
    "=b" (boot_params.ist_info.command),
    \
     
     \ /
      Last update: 2008-08-13 10:09    [W:0.024 / U:0.384 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site