Skip to contentSkip to conversation

[2.4][2.5][Trivial Patch] Bug in i386/kernel/process.c?

PATCH Disconnect 1 participant 2 messages Jul 3, 2003 – Jul 4, 2003

lore
Share & tools
lore

Disconnect

author
#0 lore raw

I was poking into how to force a warm boot (found it easily enough) and started reading process.c, where the details live.

We have:
static int reboot_mode;
int reboot_thru_bios;

static int __init reboot_setup(char *str)
{
...set reboot_mode/reboot_thru_bios according to reboot=... }
__setup("reboot=", reboot_setup);

Farther down:

        /* Write 0x1234 to absolute memory location 0x472.  The BIOS

reads
this on booting to tell it to "Bypass memory test (also warm boot)". This seems like a fairly standard thing that gets
set by
REBOOT.COM programs, and the previous reset routine did this too. */

*((unsigned short *)0x472) = reboot_mode;
(similar code farther down in !reboot_thru_bios)

....but reboot_mode doesn't seem to be initialized if you don't set it via reboot=...? (Same for reboot_thru_bios)

A simple patch to use the defaults (according to the code comments) is below; if this is right please push accordingly:

Its against 2.4 but should apply to 2.5 as well.

arch/i386/kernel/process.c 2003-07-03 12:16:46.000000000 -0400 renamed from arch/i386/kernel/process.c.orig 2003-07-03 12:15:36.000000000 -0400 +2 -2
@@ -152,8 +152,8 @@
 __setup("idle=", idle_setup);
  
 static long no_idt[2];
-static int reboot_mode;
-int reboot_thru_bios;
+static int reboot_mode = 0x1234;
+int reboot_thru_bios = 1;
  
 #ifdef CONFIG_SMP
 int reboot_smp = 0;
Signature · 1 line
Disconnect <[email protected]>
author
#1 lore raw

Er, that patch won't apply to 2.5 - the code is the same, but its moved to reboot.c.

Same change, diff't file/offset.

Quoted 45 lines · Disconnect

I was poking into how to force a warm boot (found it easily enough) and started reading process.c, where the details live.

We have:
static int reboot_mode;
int reboot_thru_bios;

static int __init reboot_setup(char *str)
{
...set reboot_mode/reboot_thru_bios according to reboot=... }
__setup("reboot=", reboot_setup);

Farther down:

        /* Write 0x1234 to absolute memory location 0x472.  The BIOS

reads
this on booting to tell it to "Bypass memory test (also warm boot)". This seems like a fairly standard thing that gets
set by
REBOOT.COM programs, and the previous reset routine did this too. */

*((unsigned short *)0x472) = reboot_mode;
(similar code farther down in !reboot_thru_bios)

....but reboot_mode doesn't seem to be initialized if you don't set it via reboot=...? (Same for reboot_thru_bios)

A simple patch to use the defaults (according to the code comments) is below; if this is right please push accordingly:

Its against 2.4 but should apply to 2.5 as well.

arch/i386/kernel/process.c 2003-07-03 12:16:46.000000000 -0400 renamed from arch/i386/kernel/process.c.orig 2003-07-03 12:15:36.000000000 -0400 +2 -2
@@ -152,8 +152,8 @@
 __setup("idle=", idle_setup);
 
 static long no_idt[2];
-static int reboot_mode;
-int reboot_thru_bios;
+static int reboot_mode = 0x1234;
+int reboot_thru_bios = 1;
 
 #ifdef CONFIG_SMP
 int reboot_smp = 0;
Signature · 1 line
Disconnect <[email protected]>