dubious AcpiDisable() and dubious firmware pull together for reboot hang
On an i86pc system, while rebooting (as via
shutdown -i6, etc) we call into the PSM right before resetting the hardware. This can bring us to
apic_shutdown(), where we call
AcpiDisable() from the acpica code to attempt to transition the hardware back to legacy mode.
On at least one system in the wild, the call to
AcpiDisable() results in a hung system instead of a rebooted system. That system then requires manual action to restore service. If, instead of
reboot, we use
uadmin 1 1, the system does indeed reset completely; i.e., the
uadmin(A_REBOOT, AD_BOOT) case does appear to work. If we prevent the reboot process from disabling ACPI, via
mdb -kwe 'apic_enable_acpi/W 0', the system also reboots correctly via
reboot et al.
A cursory glance at both Linux and FreeBSD suggests that they do not call
AcpiDisable() at all. While more research is required, I suspect that the use of this mechanism just prior to attempting to reset the system is perhaps of dubious value.