Subject: Re: Rebooting trouble?
To: Charles M. Hannum <mycroft@ai.mit.edu>
From: Andreas Gustafsson <gson@araneus.pp.fi>
List: port-i386
Date: 07/05/1995 10:38:31
"Charles M. Hannum" <mycroft@ai.mit.edu> asked:
> As of what date, and does it actually print `rebooting...'?
I'm also having trouble with rebooting, on one particular machine
only. The machine is a 486DX2/66 with a no-name Taiwanese motherboard
using an UMC chipset. It may be relevant that this motherboard has a
place for an i8042 chip, but there is no such chip (or even socket)
installed, just 40 plated-through holes. And before you ask: yes, the
keyboard works despite this (mostly; it does hang occasionally).
The kernel is compiled from -current sources of around June 4, 1995
and it _does_ print "rebooting...".
I tried adding debugging printfs to cpu_reset() (see below). All the
messages up to and including "cpu_reset: unmap" are printed on the
console and then the machine just hangs. The final message
"cpu_reset: looping" is never printed.
--
Andreas Gustafsson, gson@araneus.pp.fi
================================ Cut here ================================
void
cpu_reset()
{
struct region_descriptor region;
printf("cpu_reset: KBC\n");
/* Toggle the hardware reset line on the keyboard controller. */
outb(KBCMDP, KBC_PULSE0);
delay(200);
printf("cpu_reset: KBC\n");
outb(KBCMDP, KBC_PULSE0);
delay(200);
printf("cpu_reset: IDT\n");
/*
* Try to cause a triple fault and watchdog reset by setting the
* IDT to point to nothing.
*/
region.rd_limit = 0;
region.rd_base = 0;
lidt(®ion);
printf("cpu_reset: unmap\n");
/*
* Try to cause a triple fault and watchdog reset by unmapping the
* entire address space.
*/
bzero((caddr_t)PTD, NBPG);
pmap_update();
printf("cpu_reset: looping\n");
for (;;);
}