Date: Wed, 2 Apr 1997 02:40:02 -0800 (PST) From: Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> To: freebsd-bugs Subject: Re: i386/3124: BOOT_PROBE_KEYBOARD hangs system in bootblocks Message-ID: <199704021040.CAA21970@freefall.freebsd.org>
index | next in thread | raw e-mail
The following reply was made to PR i386/3124; it has been noted by GNATS.
From: Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
To: nsayer@quack.kfu.com
Cc: FreeBSD-gnats-submit@freebsd.org, yokota@zodiac.mech.utsunomiya-u.ac.jp
Subject: Re: i386/3124: BOOT_PROBE_KEYBOARD hangs system in bootblocks
Date: Wed, 02 Apr 1997 19:36:38 +0900
>>Description:
>
>If you set BOOT_PROBE_KEYBOARD=true in /etc/make.conf and rebuild and
>install the resulting boot blocks, the system will hang on reboot.
>If you plug in a keyboard while it is hanging, it will instantly
>start booting as if a keyboard was plugged in. The probe is obviously
>hanging when no keyboard is present.
>
>Let me be clear.... It is hanging _after_ the boot blocks are loaded
>from disk. It is not actually hanging in the bios itself. I know this
>because I was testing with a VGA monitor hooked up and watching the
>disk light.
Here is a patch to src/sys/i386/isa/syscons.c to guard against system
hang-up after the keyboard probe routine (probe_keyboard()) in the
boot block may screw up the keyboard. Unlike the previous patch I sent
to you, this patch doesn't make the BOOT_PROBE_KEYBOARD option work,
but rather it makes the system slightly more robust (I hope :-).
Kazu
--- syscons.c-dist Wed Apr 2 11:13:57 1997
+++ syscons.c Wed Apr 2 11:20:27 1997
@@ -312,8 +312,10 @@
return ((dev->id_flags & DETECT_KBD) ? 0 : IO_KBDSIZE);
}
- /* discard anything left after UserConfig */
+ /* guard against the broken probe_keyboard() in the boot block */
empty_both_buffers(sc_kbdc, 10);
+ test_controller(sc_kbdc);
+ test_kbd_port(sc_kbdc);
/* save the current keyboard controller command byte */
m = kbdc_get_device_mask(sc_kbdc) & ~KBD_KBD_CONTROL_BITS;
@@ -1444,6 +1446,10 @@
cp->cn_pri = CN_INTERNAL;
sc_kbdc = kbdc_open(sc_port);
+ /* guard against the broken probe_keyboard() in the boot block */
+ empty_both_buffers(sc_kbdc, 10);
+ test_controller(sc_kbdc);
+ test_kbd_port(sc_kbdc);
}
void
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199704021040.CAA21970>
