public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
	Zwane Mwaikambo <zwane@arm.linux.org.uk>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Randy Dunlap <rdunlap@xenotime.net>,
	Dave Jones <davej@redhat.com>,
	Chuck Wolber <chuckw@quantumlinux.com>,
	Chris Wedgwood <reviews@ml.cw.f00f.org>,
	Michael Krufky <mkrufky@linuxtv.org>,
	Chuck Ebbert <cebbert@redhat.com>,
	Domenico Andreoli <cavokz@gmail.com>,
	torvalds@linux-foundation.org, akpm@linux-foundation.org,
	alan@lxorguk.ukuu.org.uk, Thomas Gleixner <tglx@linutronix.de>,
	Len Brown <lenb@kernel.org>,
	Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>,
	"Rafael J. Wysocki" <rjw@sisk.pl>
Subject: [patch 01/26] ACPI: disable lower idle C-states across suspend/resume
Date: Wed, 31 Oct 2007 08:10:44 -0700	[thread overview]
Message-ID: <20071031151044.GB2437@kroah.com> (raw)
In-Reply-To: <20071031151015.GA2437@kroah.com>

[-- Attachment #1: acpi-disable-lower-idle-c-states-across-suspend-resume.patch --]
[-- Type: text/plain, Size: 3545 bytes --]

2.6.22-stable review patch.  If anyone has any objections, please let us
know.

------------------
From: Thomas Gleixner <tglx@linutronix.de>

changeset b04e7bdb984e3b7f62fb7f44146a529f88cc7639 from mainline.

device_suspend() calls ACPI suspend functions, which seems to have undesired
side effects on lower idle C-states. It took me some time to realize that
especially the VAIO BIOSes (both Andrews jinxed UP and my elfstruck SMP one)
show this effect. I'm quite sure that other bug reports against suspend/resume
about turning the system into a brick have the same root cause.

After fishing in the dark for quite some time, I realized that removing the ACPI
processor module before suspend (this removes the lower C-state functionality)
made the problem disappear. Interestingly enough the propability of having a
bricked box is influenced by various factors (interrupts, size of the ram image,
...). Even adding a bunch of printks in the wrong places made the problem go
away. The previous periodic tick implementation simply pampered over the
problem, which explains why the dyntick / clockevents changes made this more
prominent.

We avoid complex functionality during the boot process and we have to do the
same during suspend/resume. It is a similar scenario and equaly fragile.

Add suspend / resume functions to the ACPI processor code and disable the lower
idle C-states across suspend/resume. Fall back to the default idle
implementation (halt) instead.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Len Brown <lenb@kernel.org>
Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Cc: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/acpi/processor_core.c |    2 ++
 drivers/acpi/processor_idle.c |   19 ++++++++++++++++++-
 include/acpi/processor.h      |    2 ++
 3 files changed, 22 insertions(+), 1 deletion(-)

--- a/drivers/acpi/processor_core.c
+++ b/drivers/acpi/processor_core.c
@@ -93,6 +93,8 @@ static struct acpi_driver acpi_processor
 		.add = acpi_processor_add,
 		.remove = acpi_processor_remove,
 		.start = acpi_processor_start,
+		.suspend = acpi_processor_suspend,
+		.resume = acpi_processor_resume,
 		},
 };
 
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -324,6 +324,23 @@ static void acpi_state_timer_broadcast(s
 
 #endif
 
+/*
+ * Suspend / resume control
+ */
+static int acpi_idle_suspend;
+
+int acpi_processor_suspend(struct acpi_device * device, pm_message_t state)
+{
+	acpi_idle_suspend = 1;
+	return 0;
+}
+
+int acpi_processor_resume(struct acpi_device * device)
+{
+	acpi_idle_suspend = 0;
+	return 0;
+}
+
 static void acpi_processor_idle(void)
 {
 	struct acpi_processor *pr = NULL;
@@ -354,7 +371,7 @@ static void acpi_processor_idle(void)
 	}
 
 	cx = pr->power.state;
-	if (!cx) {
+	if (!cx || acpi_idle_suspend) {
 		if (pm_idle_save)
 			pm_idle_save();
 		else
--- a/include/acpi/processor.h
+++ b/include/acpi/processor.h
@@ -279,6 +279,8 @@ int acpi_processor_power_init(struct acp
 int acpi_processor_cst_has_changed(struct acpi_processor *pr);
 int acpi_processor_power_exit(struct acpi_processor *pr,
 			      struct acpi_device *device);
+int acpi_processor_suspend(struct acpi_device * device, pm_message_t state);
+int acpi_processor_resume(struct acpi_device * device);
 
 /* in processor_thermal.c */
 int acpi_processor_get_limit_info(struct acpi_processor *pr);

-- 

  reply	other threads:[~2007-10-31 15:20 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20071031150535.967437651@mini.kroah.org>
2007-10-31 15:10 ` [patch 00/26] 2.6.22-stable review Greg KH
2007-10-31 15:10   ` Greg KH [this message]
2007-10-31 15:10   ` [patch 02/26] Fix ESP host instance numbering Greg KH
2007-10-31 15:11   ` [patch 03/26] Fix cls_u32 error return handling Greg KH
2007-10-31 15:11   ` [patch 04/26] Fix ieee80211 handling of bogus hdrlength field Greg KH
2007-10-31 15:11   ` [patch 05/26] Fix some cases of missed IPV6 DAD Greg KH
2007-10-31 15:11   ` [patch 06/26] Fix ipv6 redirect processing, leads to TAHI failures Greg KH
2007-10-31 15:11   ` [patch 07/26] Fix ROSE module unload oops Greg KH
2007-10-31 15:11   ` [patch 08/26] Fix zero length socket write() semantics Greg KH
2007-10-31 15:11   ` [patch 09/26] Fix sys_ipc() SEMCTL on sparc64 Greg KH
2007-10-31 15:11   ` [patch 10/26] Fix TCPs ->fastpath_cnt_hit handling Greg KH
2007-10-31 15:11   ` [patch 11/26] : Fix TCP MD5 on big-endian Greg KH
2007-10-31 15:11   ` [patch 12/26] : Fix TCP initial sequence number selection Greg KH
2007-10-31 15:11   ` [patch 13/26] mac80211: filter locally-originated multicast frames Greg KH
2007-10-31 15:11   ` [patch 14/26] libertas: fix endianness breakage Greg KH
2007-10-31 15:11   ` [patch 15/26] libertas: more " Greg KH
2007-10-31 15:11   ` [patch 16/26] Add get_unaligned to ieee80211_get_radiotap_len Greg KH
2007-10-31 15:11   ` [patch 17/26] firewire: fix unloading of fw-ohci while devices are attached Greg KH
2007-10-31 15:12   ` [patch 18/26] netdrvr: natsemi: Fix device removal bug Greg KH
2007-10-31 15:12   ` [patch 19/26] dm9601: Fix receive MTU Greg KH
2007-10-31 15:12   ` [patch 20/26] V4L: ivtv: fix udma yuv bug Greg KH
2007-10-31 15:12   ` [patch 21/26] hwmon/lm87: Fix a division by zero Greg KH
2007-10-31 15:12   ` [patch 22/26] hwmon/lm87: Disable VID when it should be Greg KH
2007-10-31 15:12   ` [patch 23/26] hwmon/w83627hf: Fix setting fan min right after driver load Greg KH
2007-10-31 15:12   ` [patch 24/26] hwmon/w83627hf: Dont assume bank 0 Greg KH
2007-10-31 15:12   ` [patch 25/26] i915: fix vbl swap allocation size Greg KH
2007-10-31 15:12   ` [patch 26/26] POWERPC: Fix handling of stfiwx math emulation Greg KH
2007-10-31 15:21   ` [patch 00/26] 2.6.22-stable review Greg KH
2007-10-31 16:25   ` [patch 27/26] lockdep: fix mismatched lockdep_depth/curr_chain_hash Greg KH

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=20071031151044.GB2437@kroah.com \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=cavokz@gmail.com \
    --cc=cebbert@redhat.com \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=jmforbes@linuxtx.org \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mkrufky@linuxtv.org \
    --cc=rdunlap@xenotime.net \
    --cc=reviews@ml.cw.f00f.org \
    --cc=rjw@sisk.pl \
    --cc=stable@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --cc=tytso@mit.edu \
    --cc=venkatesh.pallipadi@intel.com \
    --cc=zwane@arm.linux.org.uk \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox