From: Pavel Machek <pavel@ucw.cz>
To: kernel list <linux-kernel@vger.kernel.org>,
tglx@linutronix.de, bp@suse.de, hpa@zytor.com, mingo@redhat.com,
x86@kernel.org, rjw@rjwysocki.net, lenb@kernel.org,
linux-acpi@vger.kernel.org
Subject: Re: ACPI enable on Thinkpad X60 hangs when temperatures are high
Date: Mon, 27 May 2019 12:37:27 +0200 [thread overview]
Message-ID: <20190527103727.GA3769@amd> (raw)
In-Reply-To: <20190527103155.GB12391@xo-6d-61-c0.localdomain>
[-- Attachment #1: Type: text/plain, Size: 8328 bytes --]
Hi!
> > > So if you compile a kernel, then reboot, boot will hang after "Freeing SMP
> > > alternatives memory" (and then wastes power, making thermal situation even worse).
> >
> > Normally, next message is "smpboot: CPU0: Genuine Intel...".
> >
> > I added some printks, and check_bugs() returns. Then it goes to ACPI and never
> > comes back...
> >
> > kernel-parameters.txt points to Documentation/acpi/debug.txt, but that one does not exist.
> >
> > Any ideas what debugging parameters to use for ACPI? I either get nothing or
> > so much that machine does not boot...
>
> I ended up adding printks...
>
> It hangs in acpi_hw_set_mode().
>
> ACPI enable: set mode: acpi
> ACPI: hw_set_mode
> ACPI: hw_set_mode mode switch
> ACPI: write_port?
> ACPI: os write port
>
> we write to the port but that never returns.
>
> I assume SMM is doing its magic at that point. Any ideas how to debug it further?
>
> Is it possible that it is some kind of screaming interrupt?
Exact position of debug prints was this:
diff --git a/drivers/acpi/acpica/evxfevnt.c b/drivers/acpi/acpica/evxfevnt.c
index e528fe5..e9bb627 100644
--- a/drivers/acpi/acpica/evxfevnt.c
+++ b/drivers/acpi/acpica/evxfevnt.c
@@ -37,16 +37,20 @@ acpi_status acpi_enable(void)
/* ACPI tables must be present */
+ printk("ACPI enable: 1\n");
+
if (acpi_gbl_fadt_index == ACPI_INVALID_TABLE_INDEX) {
return_ACPI_STATUS(AE_NO_ACPI_TABLES);
}
+ printk("ACPI enable: 2\n");
/* If the Hardware Reduced flag is set, machine is always in acpi mode */
if (acpi_gbl_reduced_hardware) {
return_ACPI_STATUS(AE_OK);
}
+ printk("ACPI enable: 3\n");
/* Check current mode */
if (acpi_hw_get_mode() == ACPI_SYS_MODE_ACPI) {
@@ -57,13 +61,17 @@ acpi_status acpi_enable(void)
/* Transition to ACPI mode */
+ printk("ACPI enable: set mode: acpi\n");
status = acpi_hw_set_mode(ACPI_SYS_MODE_ACPI);
+ printk("ACPI enable: set mode: acpi done\n");
if (ACPI_FAILURE(status)) {
ACPI_ERROR((AE_INFO,
"Could not transition to ACPI mode"));
return_ACPI_STATUS(status);
}
+ printk("ACPI enable: sanity check\n");
+
/* Sanity check that transition succeeded */
for (retry = 0; retry < 30000; ++retry) {
@@ -76,6 +84,8 @@ acpi_status acpi_enable(void)
acpi_os_stall(100); /* 100 usec */
}
+ printk("ACPI enable: sanity check done\n");
+
ACPI_ERROR((AE_INFO, "Hardware did not enter ACPI mode"));
return_ACPI_STATUS(AE_NO_HARDWARE_RESPONSE);
}
diff --git a/drivers/acpi/acpica/hwacpi.c b/drivers/acpi/acpica/hwacpi.c
index 926f7e0..e8063f9 100644
--- a/drivers/acpi/acpica/hwacpi.c
+++ b/drivers/acpi/acpica/hwacpi.c
@@ -38,6 +38,7 @@ acpi_status acpi_hw_set_mode(u32 mode)
return_ACPI_STATUS(AE_OK);
}
+ printk("ACPI: hw_set_mode\n");
/*
* ACPI 2.0 clarified that if SMI_CMD in FADT is zero,
* system does not support mode transition.
@@ -62,13 +63,17 @@ acpi_status acpi_hw_set_mode(u32 mode)
return_ACPI_STATUS(AE_OK);
}
+ printk("ACPI: hw_set_mode mode switch\n");
switch (mode) {
case ACPI_SYS_MODE_ACPI:
/* BIOS should have disabled ALL fixed and GP events */
+ printk("ACPI: write_port?\n");
status = acpi_hw_write_port(acpi_gbl_FADT.smi_command,
(u32) acpi_gbl_FADT.acpi_enable, 8);
+ printk("ACPI: write_port done.\n");
+
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
"Attempting to enable ACPI mode\n"));
break;
diff --git a/drivers/acpi/acpica/hwvalid.c b/drivers/acpi/acpica/hwvalid.c
index cd57615..b3ed022 100644
--- a/drivers/acpi/acpica/hwvalid.c
+++ b/drivers/acpi/acpica/hwvalid.c
@@ -262,7 +262,9 @@ acpi_status acpi_hw_write_port(acpi_io_address address, u32 value, u32 width)
status = acpi_hw_validate_io_request(address, width);
if (ACPI_SUCCESS(status)) {
+ printk("ACPI: os write port\n");
status = acpi_os_write_port(address, value, width);
+ printk("ACPI: os write port done\n");
return (status);
}
diff --git a/drivers/acpi/acpica/utxfinit.c b/drivers/acpi/acpica/utxfinit.c
index 9f3b1e3..4418fa9 100644
--- a/drivers/acpi/acpica/utxfinit.c
+++ b/drivers/acpi/acpica/utxfinit.c
@@ -45,6 +45,7 @@ acpi_status ACPI_INIT_FUNCTION acpi_initialize_subsystem(void)
ACPI_DEBUG_EXEC(acpi_ut_init_stack_ptr_trace());
/* Initialize the OS-Dependent layer */
+ printk("ACPI: os initialize\n");
status = acpi_os_initialize();
if (ACPI_FAILURE(status)) {
@@ -53,6 +54,7 @@ acpi_status ACPI_INIT_FUNCTION acpi_initialize_subsystem(void)
}
/* Initialize all globals used by the subsystem */
+ printk("ACPI: globals\n");
status = acpi_ut_init_globals();
if (ACPI_FAILURE(status)) {
@@ -62,6 +64,7 @@ acpi_status ACPI_INIT_FUNCTION acpi_initialize_subsystem(void)
}
/* Create the default mutex objects */
+ printk("ACPI: mutex\n");
status = acpi_ut_mutex_initialize();
if (ACPI_FAILURE(status)) {
@@ -70,6 +73,8 @@ acpi_status ACPI_INIT_FUNCTION acpi_initialize_subsystem(void)
return_ACPI_STATUS(status);
}
+ printk("ACPI: ns root\n");
+
/*
* Initialize the namespace manager and
* the root of the namespace tree
@@ -82,6 +87,7 @@ acpi_status ACPI_INIT_FUNCTION acpi_initialize_subsystem(void)
}
/* Initialize the global OSI interfaces list with the static names */
+ printk("ACPI: interfaces\n");
status = acpi_ut_initialize_interfaces();
if (ACPI_FAILURE(status)) {
@@ -90,6 +96,8 @@ acpi_status ACPI_INIT_FUNCTION acpi_initialize_subsystem(void)
return_ACPI_STATUS(status);
}
+ printk("ACPI: all done, all ok\n");
+
return_ACPI_STATUS(AE_OK);
}
@@ -113,6 +121,7 @@ acpi_status ACPI_INIT_FUNCTION acpi_enable_subsystem(u32 flags)
ACPI_FUNCTION_TRACE(acpi_enable_subsystem);
+ printk("ACPI: enable subsys\n");
/*
* The early initialization phase is complete. The namespace is loaded,
* and we can now support address spaces other than Memory, I/O, and
@@ -124,19 +133,24 @@ acpi_status ACPI_INIT_FUNCTION acpi_enable_subsystem(u32 flags)
/* Enable ACPI mode */
+ printk("ACPI: go to ACPI\n");
if (!(flags & ACPI_NO_ACPI_ENABLE)) {
ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
"[Init] Going into ACPI mode\n"));
+ printk("ACPI: get mode\n");
acpi_gbl_original_mode = acpi_hw_get_mode();
+ printk("ACPI: enable\n");
status = acpi_enable();
+ printk("ACPI: enable done\n");
if (ACPI_FAILURE(status)) {
ACPI_WARNING((AE_INFO, "AcpiEnable failed"));
return_ACPI_STATUS(status);
}
}
+ printk("ACPI: map FACS\n");
/*
* Obtain a permanent mapping for the FACS. This is required for the
* Global Lock and the Firmware Waking Vector
@@ -149,6 +163,7 @@ acpi_status ACPI_INIT_FUNCTION acpi_enable_subsystem(u32 flags)
}
}
+ printk("ACPI: event handling\n");
/*
* Initialize ACPI Event handling (Fixed and General Purpose)
*
@@ -173,6 +188,7 @@ acpi_status ACPI_INIT_FUNCTION acpi_enable_subsystem(u32 flags)
}
}
+ printk("ACPI: SCI handler\n");
/*
* Install the SCI handler and Global Lock handler. This completes the
* hardware initialization.
@@ -188,6 +204,7 @@ acpi_status ACPI_INIT_FUNCTION acpi_enable_subsystem(u32 flags)
}
#endif /* !ACPI_REDUCED_HARDWARE */
+ printk("ACPI: enable done\n");
return_ACPI_STATUS(status);
}
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index eec263c..f712151 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -1105,9 +1105,12 @@ void __init acpi_subsystem_init(void)
{
acpi_status status;
+ printk("ACPI: subsystem init\n");
+
if (acpi_disabled)
return;
+ printk("ACPI: enable subsystem\n");
status = acpi_enable_subsystem(~ACPI_NO_ACPI_ENABLE);
if (ACPI_FAILURE(status)) {
printk(KERN_ERR PREFIX "Unable to enable ACPI\n");
@@ -1121,6 +1124,7 @@ void __init acpi_subsystem_init(void)
*/
regulator_has_full_constraints();
}
+ printk("ACPI: init done\n");
}
static acpi_status acpi_bus_table_handler(u32 event, void *table, void *context)
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]
prev parent reply other threads:[~2019-05-27 10:37 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-27 8:51 Thinkpad X60 fails to boot while "hot" Pavel Machek
2019-05-27 9:39 ` Pavel Machek
2019-05-27 10:31 ` ACPI enable on Thinkpad X60 hangs when temperatures are high Pavel Machek
2019-05-27 10:37 ` Pavel Machek [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190527103727.GA3769@amd \
--to=pavel@ucw.cz \
--cc=bp@suse.de \
--cc=hpa@zytor.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=rjw@rjwysocki.net \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.