Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Apr 2013 09:28:34 -0700
From:      Jeremy Chadwick <jdc@koitsu.org>
To:        freebsd-hackers@freebsd.org
Subject:   Rebooting from loader causes a "fault" in VMware Workstation
Message-ID:  <20130419162834.GA90217@icarus.home.lan>

next in thread | raw e-mail | index | archive | help
(Please keep me CC'd as I'm not subscribed to -hackers)

When running FreeBSD under VMware Workstation (I'm using 9.0.1, but this
issue has existed for many years now, I remember it occurring on
Workstation 6.x), the following is reproducible:

1. Power on + boot FreeBSD VM
2. At loader menu, press "3" to reboot
3. Loader prints "Rebooting..."
4. VMware proceeds to show the following message in a dialog box:

"A fault has occurred causing a virtual CPU to enter the shutdown state.
If this fault had occurred outside of a virtual machine, it would have
caused the physical machine to restart. The shutdown state can be
reached incorrectly configuring the virtual machine, a bug in the guest
operating system, or a problem in VMware Workstation."

It can also happen when dropping to the loader prompt and doing
"reboot".

It *does not* happen when booting fully into FreeBSD and issuing
"shutdown -r now".  Likewise, hw.acpi.disable_on_reboot and
hw.acpi.handle_reboot have no bearing (e.g. changing either of those to
1 (default = 0) then doing "shutdown -r now" to try and induce the
problem).

So it seems the issue is specific to the bootstrap/loader env.

FreeBSD 9.1-STABLE is being used, but I've seen this happen with FreeBSD
8.x as well as 7.x.  It does not happen with other OSes like Linux and
Solaris.  I have not tried other VM systems (VirtualBox, etc.) but I
imagine they might just silently deal with the situation rather than
provide a useful message (although I know VirtualBox has an amazingly
detailed debugger).

I've looked at sys/boot/i386/loader/main.c (func command_reboot()) and
the actual magic seems to happen inside of __exit.

__exit comes from sys/boot/i386/btx/lib/btxsys.s, which zeros eax then
issues INT 0x30 (syscall interrupt).  That lead me to this:

http://www.freebsd.org/doc/en/books/arch-handbook/book.html

Eek.  x86 architecture is a lot different than I remember it being in
my 386 days, so this is all a bit over my head.

-- 
| Jeremy Chadwick                                   jdc@koitsu.org |
| UNIX Systems Administrator                http://jdc.koitsu.org/ |
| Mountain View, CA, US                                            |
| Making life hard for others since 1977.             PGP 4BD6C0CB |




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