Bug #1332

DFBSD 2.2 - Booting usbcdrom/usbsticks on thinkpad hangs on "BTX Halted"

Added by tuxillo over 5 years ago. Updated over 5 years ago.

Status:NewStart date:
Priority:NormalDue date:
Assignee:-% Done:

0%

Category:-
Target version:-

Description

Hi

This is a bug reported by claus on the IRC and initally investigated by Jordan
(smtms).

It seems that booting USB cdrom/stick on a Thinkpad (model still to determine)
hangs and stops with BTX Halted.

claus reported that FBSD 7.1 booted without problems with that USB Cdrom drive,
but with FBSD 7.0 it crashes also.

This is a know issue on FreeBSD that was fixed in revision 177039. Also relevant
revisions are 181433, 181436 and 189017.

Cheers,
Antonio

History

#2 Updated by tuxillo over 5 years ago

Claus reported on IRC that booting on a thinkpad t40 works

#3 Updated by jgordeev over 5 years ago

I've adapted some fixes from FreeBSD for the booting issues that result
in "BTX halted".
My changes are available at
git://leaf.dragonflybsd.org/~smtms/dragonfly.git, branch "btxhalted".
*Everybody* should test that these changes don't break booting for them.
Additionally, people that have seen "BTX Halted" on some of their
computers should test to confirm that the issue is fixed.
What the changes do basically: make the BTX switch the processor to real
mode before making BIOS calls and then go back to protected mode. The
previous practice relied on BIOS code that is not exercised by common
operating systems, and thus not tested during BIOS development.
Some side effects of the changes: the BTX kernel size is now reduced to
690 bytes. It was 780 bytes previously.
boot2 is now 224 bytes smaller, leaving 296 bytes available; boot2_64
(for 64-bit disklabels) is 228 bytes smaller, leaving 4904 bytes available.
If somebody decides to commit these changes, please squash the commits.

#4 Updated by ftigeot over 5 years ago

On Thu, May 21, 2009 at 09:18:25PM +0300, Jordan Gordeev wrote:
> I've adapted some fixes from FreeBSD for the booting issues that result
> in "BTX halted".
> My changes are available at
> git://leaf.dragonflybsd.org/~smtms/dragonfly.git, branch "btxhalted".
> *Everybody* should test that these changes don't break booting for them.
> Additionally, people that have seen "BTX Halted" on some of their
> computers should test to confirm that the issue is fixed.

I think one of my machines may be affected by this issue.

I would like to try your changes, but I'm lost in git land.
I tried to generate a patch from your branch; it weights 100K and I believe
many of the differences are irrelevant (many files in rc.d/) :-(

Is there any way to just get the changes you made relative to HEAD and not
just every changes in HEAD since then ?

#5 Updated by jgordeev over 5 years ago

Hi, Francois!
The easiest way to get my changes is to create your own branch ("git
branch mylocalbranch master; git checkout mylocalbranch"), then merge
the "btxhalted" branch into it ("git merge smtms-on-leaf/btxhalted").
To view what changes are in branch "btxhalted", but not in master, first
checkout master ("git checkout master"), then run "git log
..smtms-on-leaf/btxhalted"). Notice the two dots.

Testing the changes consists of two parts: testing new boot blocks
('boot1' and 'boot2') and testing new 'loader'.
To test new boot blocks you need to install them to disk using
"disklabel -B -b /path/to/boot1 -s /path/to/boot2 <somedisk>".
To test new 'loader', you just copy it to /boot/loader on the respective
medium.
To test new PXE loader, you replace 'pxeboot' (or 'pxeboot_tftp') in
your TFTP-exported directory with new versions.
I'm not sure what the instructions would be for building a new release
ISO containing the changed 'cdboot'.

I admit that it wasn't a good idea to post to users@ without including
instructions on how to obtain and how to test changes.

Regards,
Jordan Gordeev

#6 Updated by ftigeot over 5 years ago

On Sat, May 23, 2009 at 10:18:02PM +0300, Jordan Gordeev wrote:
> Francois Tigeot wrote:
> >On Thu, May 21, 2009 at 09:18:25PM +0300, Jordan Gordeev wrote:
> >
> >>I've adapted some fixes from FreeBSD for the booting issues that result
> >>in "BTX halted".
> >>My changes are available at
> >>git://leaf.dragonflybsd.org/~smtms/dragonfly.git, branch "btxhalted".
> >
> >Is there any way to just get the changes you made relative to HEAD and not
> >just every changes in HEAD since then ?
> >
> The easiest way to get my changes is to create your own branch ("git

Thanks. I managed to pick-up the changes in sys/boot the hard way.

> Testing the changes consists of two parts: testing new boot blocks
> ('boot1' and 'boot2') and testing new 'loader'.
> To test new boot blocks you need to install them to disk using
> "disklabel -B -b /path/to/boot1 -s /path/to/boot2 <somedisk>".
> To test new 'loader', you just copy it to /boot/loader on the respective
> medium.

I did an installworld before seeing your mail, so I did not test boot1 boot2
and loader separately.

The good news is they really fix the issue I was having:

I tried to upgrade a machine to a hammer / with a spare 500GB drive, and for
some reason the PC kept rebooting just after displaying the first boot
messages "F1 DF/FBSD" and "F5 Drive 1"
I couldn't see if there was a "BTX halted" message, the screen blanked too
quickly for that.
The same machine had no trouble with a 400GB drive and an UFS root.

With your new boot blocks, the system boots as it should.
Thank you, I'm a happy bunny now :-)

> I admit that it wasn't a good idea to post to users@ without including
> instructions on how to obtain and how to test changes.

Well, it didn't occur to me I would have had to create my own branch. Beeing
only used to cvs and svn, git is really a strange animal.

#7 Updated by ftigeot over 5 years ago

On Sun, May 24, 2009 at 09:54:45AM +0200, Francois Tigeot wrote:
>
> With your new boot blocks, the system boots as it should.
> Thank you, I'm a happy bunny now :-)

I have spoken too soon.

I still have the instant reboot problem (and this time I could see a "BTX
halted" message, complete with register dump).

Steps to reproduce:

1. Install a Dragonfly system on an entire new disk, using a livecd snapshot
/dev/ad4s1a is now a big Hammer partition, complete with many pfs.

2. Boot from another disk, delete all Hammer PFSes in ad4s1a:/pfs/ with
hammer pfs-destroy.

3. Reboot on the first disk.
/boot/loader now fails with the dreaded "BTX halted" register dump and
instantly reboots the machine.

The first step bootloaders are still usable. It is possible to interrupt the
boot sequence during the rotating \ | display and boot directly a kernel on
0:ad(0,a)/kernel

Replacing step 2) above by a newfs on the root partition, followed by a restore
from backup of /boot gives the same result.

Also available in: Atom PDF