Rebooting from loader causes a "fault" in VMware Workstation

Joshua Isom jrisom at gmail.com
Fri Apr 19 22:49:40 UTC 2013


Basically, the loader finds a simple safe way to reboot that's worked 
since the 286, and VMWare doesn't like it.  It's called a triple fault. 
  FreeBSD and Linux even use it to reboot as a fail safe.  Read 
sys/i386/i386/vm_machdep.c and cpu_reset_real to see how FreeBSD handles 
it.  VMWare at least says that "it would have caused the physical 
machine to restart."  Blame VMWare.

On 4/19/2013 11:28 AM, Jeremy Chadwick wrote:
> (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.
>



More information about the freebsd-hackers mailing list