Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Feb 2011 12:33:44 -0500
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        cb@severious.net
Cc:        freebsd-stable@freebsd.org
Subject:   Re: FreeBSD 8.1 regression in x86bios.c
Message-ID:  <201102281233.58810.jkim@FreeBSD.org>
In-Reply-To: <4D6888A8.20505@severious.net>
References:  <4D6888A8.20505@severious.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Friday 25 February 2011 11:59 pm, Craig Boston wrote:
> Hi all,
>
> My laptop (Toshiba Portege R100) stopped working with an early boot
> hang at some point between 8.0 and 8.1. After it broke last year I
> had ended up just reverting to an earlier kernel, but finally found
> the time to do a binary search and narrow it down.
>
> The offending commit is:
> http://svn.freebsd.org/viewvc/base?view=revision&revision=205647
> <http://svn.freebsd.org/viewvc/base?view=revision&revision=205647>;
>
> Fix stupid typos.  Some VESA BIOSes directly call BIOS interrupt
> handlers within the VBE interrupt handler.  Unfortunately it was
> causing real mode page faults because we were fetching instructions
> from bogus addresses. Pass me the pointyhat, please.
>
> PR:		kern/144654
> MFC after:	3 days
>
> With this commit in place, the system hangs almost immediately on
> boot, right after probing kdbmux. With debug.x86bios.{call,int}
> enabled from the loader, the final lines before the hang are:
>
> avail memory = 1299705856 (1239 MB)
> kbd1 at kbdmux0
> Calling int 0x10 (ax=0x4f00 bx=0x0000 cx=0x0000 dx=0x0000 es=0x9e00
> di=0x0000)
> Exiting int 0x10 (ax=0x004f bx=0x0000 cx=0x0000 dx=0x0000 es=0x9e00
> di=0x0000)
> Calling int 0x10 (ax=0x4f01 bx=0x0000 cx=0x0144 dx=0x0000 es=0x0200
> di=0x0000)
>
> Then a hard hang. With the 2 lines in x86bios.c reverted, the
> system boots fine (even on a fresh 8.2 build with just that commit
> backed out). The debug output from a successful boot looks like
> this:
>
> kbd1 at kbdmux0
> Calling int 0x10 (ax=0x4f00 bx=0x0000 cx=0x0000 dx=0x0000 es=0x9e00
> di=0x0000)
> Exiting int 0x10 (ax=0x004f bx=0x0000 cx=0x0000 dx=0x0000 es=0x9e00
> di=0x0000)
> Calling int 0x10 (ax=0x4f01 bx=0x0000 cx=0x0144 dx=0x0000 es=0x0200
> di=0x0000)
> Exiting int 0x10 (ax=0xb13e bx=0x2065 cx=0x9e32 dx=0x1023 es=0x0200
> di=0x0028)
> Calling int 0x10 (ax=0x4f01 bx=0x0000 cx=0x0143 dx=0x0000 es=0x9c00
> di=0x0000)
> Exiting int 0x10 (ax=0xb13e bx=0x1065 cx=0x9e32 dx=0x1023 es=0x9c00
> di=0x0028)
> Calling int 0x10 (ax=0x4f01 bx=0x0000 cx=0x0141 dx=0x0000 es=0x0200
> di=0x0000)
> Exiting int 0x10 (ax=0xb13e bx=0x0865 cx=0x9e32 dx=0x1023 es=0x0200
> di=0x0028)
> (many more lines)
>
> In any event, I'm not sure if this is a true bug, or just a broken
> BIOS, but either way I thought you might want to know about it.

See the exit status of the "working" cases.  Bogus status (%ax == 
0xb13e) was returned, which means the VBE calls failed and aborted.  
So, yes, I guess it is one of those broken VESA BIOSes. :-(

Jung-uk Kim



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201102281233.58810.jkim>