kern/94939: [acpi] [patch] reboot(8) fails on IBM / Intel blades

Devon H. O'Dell devon.odell at gmail.com
Tue Mar 28 20:00:58 UTC 2006


The following reply was made to PR kern/94939; it has been noted by GNATS.

From: "Devon H. O'Dell" <devon.odell at gmail.com>
To: "Nate Lawson" <nate at root.org>
Cc: "John Baldwin" <jhb at freebsd.org>, bug-followup at freebsd.org
Subject: Re: kern/94939: [acpi] [patch] reboot(8) fails on IBM / Intel blades
Date: Tue, 28 Mar 2006 11:52:00 -0800

 MX1 hates me for some reason.
 
 On Tue, Mar 28, 2006 at 11:32:14AM -0800, Nate Lawson wrote:
 > John Baldwin wrote:
 > > On Tuesday 28 March 2006 14:08, Nate Lawson wrote:
 > >>  >>>
 > >> 4.7.3.6 Reset Register
 > >> The optional ACPI reset mechanism specifies a standard mechanism that
 > >> provides a complete system reset.  When implemented, this mechanism mu=
 st
 > >> reset the entire system. This includes processors, core logic, all
 > >> buses, and all peripherals. From an OSPM perspective, asserting the
 > >> reset mechanism is the logical equivalent to power cycling the machine=
 .
 > >> Upon gaining control after a reset, OSPM will perform actions in
 > >> like manner to a cold boot.
 > >> ...
 > >> The system must reset immediately following the write to this register=
 .
 > >> OSPM assumes that the processor will not execute beyond the write
 > >> instruction. OSPM should execute spin loops on the CPUs in the system
 > >> following a write to this register.
 > >>  >>>
 > >>
 > >> So I'm ok with the patch being committed if no other tasks need to
 > >> happen after this shutdown handler is called.  Also, all APs should be
 > >> stopped before this happens and it should only occur once on the BSP.
 > >
 > > Does the reset mechanism require that ACPI be "functioning"?  That is,
 > > does it have to happen before the call to AcpiTerminate() or can it
 > > happen afterwards?  If it can happen afterwards, it should probably be
 > > moved to be part of cpu_reset_real().
 >
 > It *probably* works without acpi enabled because on x86 at least, it's
 > just a write to the SMM io port, which triggers an SMI and the handler
 > resets the machine.  SMM is present whether in legacy mode or acpi mode.
 >   However, I don't want to put acpi-specific resets in cpu_reset_real()
 > because then acpi is mandatory for linking the kernel.  Let's just try
 > it in the place the patch puts it for now and see if there are any proble=
 ms.
 
 Ok. What I was thinking was to save the AcpiGBL_FADT->{$FOO} into some
 local kernel structure and then to put it into cpu_reset_real(). I
 suppose this would mean that I would have
 to then manually parse the GAS, which, as you outline below, is an
 outstanding issue.
 
 > The patch has some other major problems that should be addressed before
 > committing.  It should not manually be parsing the GAS and mapping
 > memory etc.  Instead, it should just use AcpiHwLowLevelWrite():
 >
 > ACPI_STATUS
 > AcpiHwLowLevelWrite (
 >      UINT32                  Width,
 >      UINT32                  Value,
 >      ACPI_GENERIC_ADDRESS    *Reg);
 >
 > Width should be 8, value should be the reset value in the FADT, and Reg
 > should be the FADT GAS struct.
 
 AHA! I figured there was some function for this, but I kept looking
 for something that took an ACPI_GENERIC_ADDRESS and never found it.
 I'll rework the patch to use this procedure instead.
 
 I sent a couple other mails but they seem to have been eaten by some
 network restructuring that seems to have gone unnoticed for several
 months :\.
 
 --Devon
 
 > --
 > Nate


More information about the freebsd-bugs mailing list