public inbox for linux-pm@vger.kernel.org
 help / color / mirror / Atom feed
From: Johannes Berg <johannes@sipsolutions.net>
To: linux-pm <linux-pm@lists.osdl.org>
Cc: Pavel Machek <pavel@ucw.cz>
Subject: [PATCH] pm_ops: add irq enable/disable hooks
Date: Thu, 05 Apr 2007 23:54:14 +0200	[thread overview]
Message-ID: <1175810054.3489.34.camel@johannes.berg> (raw)

For powermac, we need to do some things between suspending devices and
device_power_off, for example setting the decrementer. This patch
introduces pm_ops.irq_off and pm_ops.irq_on which will be called instead
of disabling/enabling irqs so platforms can do a bit more work there if
necessary.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>

---
My previous patches moving to the pm_ops interface for powermac were
buggy due to exactly this issue, but the bug never surfaced on my
machine, only on machines with an Apple Desktop Bus (or an emulation
thereof)

Does this look ok to you? Would you want different names? Should I stick
in a BUG_ON(interrupts_enabled()) or such?

 include/linux/pm.h  |   10 ++++++++++
 kernel/power/main.c |   10 ++++++++--
 2 files changed, 18 insertions(+), 2 deletions(-)

--- wireless-dev.orig/include/linux/pm.h	2007-04-05 18:14:07.948549941 +0200
+++ wireless-dev/include/linux/pm.h	2007-04-05 23:15:29.934829459 +0200
@@ -131,9 +131,17 @@ typedef int __bitwise suspend_disk_metho
  * @prepare: Prepare the platform for the given suspend state. Can return a
  *	negative error code if necessary.
  *
+ * @irq_off: If assigned, the generic suspend code does not turn off IRQs
+ *	but relies on this callback instead. It is currently not called for
+ *	%PM_SUSPEND_DISK.
+ *
  * @enter: Enter the given suspend state, must be assigned. Can return a
  *	negative error code if necessary.
  *
+ * @irq_on: If assigned, the generic suspend code does not turn on IRQs
+ *	but relies on this callback instead. It is currently not called for
+ *	%PM_SUSPEND_DISK.
+ *
  * @finish: Called when the system has left the given state and all devices
  *	are resumed. The return value is ignored.
  *
@@ -152,7 +160,9 @@ typedef int __bitwise suspend_disk_metho
 struct pm_ops {
 	int (*valid)(suspend_state_t state);
 	int (*prepare)(suspend_state_t state);
+	void (*irq_off)(suspend_state_t state);
 	int (*enter)(suspend_state_t state);
+	void (*irq_on)(suspend_state_t state);
 	int (*finish)(suspend_state_t state);
 	suspend_disk_method_t pm_disk_mode;
 };
--- wireless-dev.orig/kernel/power/main.c	2007-04-05 18:14:07.988549941 +0200
+++ wireless-dev/kernel/power/main.c	2007-04-05 18:25:21.108549941 +0200
@@ -117,7 +117,10 @@ int suspend_enter(suspend_state_t state)
 	int error = 0;
 	unsigned long flags;
 
-	local_irq_save(flags);
+	if (pm_ops->irq_off)
+		pm_ops->irq_off(state);
+	else
+		local_irq_save(flags);
 
 	if ((error = device_power_down(PMSG_SUSPEND))) {
 		printk(KERN_ERR "Some devices failed to power down\n");
@@ -126,7 +129,10 @@ int suspend_enter(suspend_state_t state)
 	error = pm_ops->enter(state);
 	device_power_up();
  Done:
-	local_irq_restore(flags);
+	if (pm_ops->irq_on)
+		pm_ops->irq_on(state);
+	else
+		local_irq_restore(flags);
 	return error;
 }
 

             reply	other threads:[~2007-04-05 21:54 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-05 21:54 Johannes Berg [this message]
2007-04-05 23:30 ` [PATCH] pm_ops: add irq enable/disable hooks Rafael J. Wysocki
2007-04-05 23:28   ` Johannes Berg
2007-04-06  0:02     ` Rafael J. Wysocki
2007-04-06  0:09       ` Johannes Berg
2007-04-06  0:17         ` Rafael J. Wysocki
2007-04-06  8:48           ` Johannes Berg
2007-04-06  9:41             ` Rafael J. Wysocki
2007-04-06  9:44               ` Johannes Berg
2007-04-06 10:02                 ` Rafael J. Wysocki
2007-04-06 10:00                   ` Johannes Berg
2007-04-06 19:19                 ` Pavel Machek
2007-04-06 21:59                   ` Johannes Berg
2007-04-10 11:36                     ` Pavel Machek
2007-04-10 11:45                       ` Johannes Berg
2007-04-10 12:00                         ` Pavel Machek
2007-04-10 13:42                           ` Johannes Berg
2007-04-11 11:22                           ` Benjamin Herrenschmidt
2007-04-11 14:07                             ` Alan Stern
2007-04-11 16:39                               ` Johannes Berg
2007-04-11 21:40                               ` Benjamin Herrenschmidt
2007-04-11 11:15                       ` Johannes Berg
2007-04-06 19:16 ` Pavel Machek
2007-04-11 15:54 ` [PATCH v2] pm_ops: add system quiesce/activate hooks Johannes Berg
2007-04-11 20:47   ` Dmitry Krivoschekov
2007-04-12  8:39     ` Johannes Berg
2007-04-12  8:42     ` Benjamin Herrenschmidt
2007-04-12 10:16       ` Pavel Machek
2007-04-12 10:45         ` Rafael J. Wysocki
2007-04-12 10:47         ` Johannes Berg
2007-04-13 21:00           ` Pavel Machek
2007-04-13 21:11             ` Johannes Berg
2007-04-13 21:43               ` Pavel Machek
2007-04-13 21:11             ` Paul Mackerras
2007-04-13 21:15             ` Benjamin Herrenschmidt
2007-04-12 11:23         ` Benjamin Herrenschmidt
2007-04-12 15:03           ` Rafael J. Wysocki
2007-04-12 16:32             ` David Brownell
2007-04-13  6:52               ` Johannes Berg
2007-04-13  7:59               ` [PATCH v3] " Johannes Berg
2007-04-12 17:36           ` [PATCH v2] " Dmitry Krivoschekov
2007-04-12 20:51             ` Benjamin Herrenschmidt
2007-04-13  6:54             ` Johannes Berg
2007-04-13  8:04               ` David Brownell
2007-04-13  8:59             ` Johannes Berg
2007-04-13  9:07               ` Benjamin Herrenschmidt
2007-04-13 11:47                 ` Rafael J. Wysocki
2007-04-13 12:58                   ` Johannes Berg
2007-04-13 13:26                   ` [PATCH v4] " Johannes Berg
2007-04-13 20:43                     ` Rafael J. Wysocki
2007-04-13 20:58                       ` Pavel Machek
2007-04-13 21:06                         ` Johannes Berg
2007-04-13 21:12                           ` Pavel Machek
2007-04-13 21:18                             ` Johannes Berg
2007-04-13 21:33                               ` Pavel Machek
2007-04-13 21:45                                 ` Johannes Berg
2007-04-13 21:52                                   ` Pavel Machek
2007-04-13 21:59                                     ` Johannes Berg
2007-04-13 22:18                                       ` Rafael J. Wysocki
2007-04-13 22:20                                         ` Johannes Berg
2007-04-13 22:49                                           ` Rafael J. Wysocki
2007-04-13 22:55                                             ` Johannes Berg
2007-04-13 22:09                                 ` Rafael J. Wysocki
2007-04-13 22:13                                   ` Johannes Berg
2007-04-13 22:16                                     ` Pavel Machek
2007-04-14 16:55                                       ` Paul Mackerras
2007-04-13 22:25                                   ` Benjamin Herrenschmidt
2007-04-13 22:39                                     ` Pavel Machek
2007-04-13 23:19                                       ` Benjamin Herrenschmidt
2007-04-14  9:14                                         ` Rafael J. Wysocki
2007-04-14  9:19                                           ` Johannes Berg
2007-04-15  0:19                                             ` Benjamin Herrenschmidt
2007-04-16  7:32                                         ` Pavel Machek
2007-04-16  8:37                                           ` Johannes Berg
2007-04-16 12:47                                             ` Pavel Machek
2007-04-17  4:58                                             ` Paul Mackerras
2007-04-18  7:50                                           ` Benjamin Herrenschmidt
2007-04-13 22:47                                     ` Rafael J. Wysocki
2007-04-13 21:18                             ` Benjamin Herrenschmidt
2007-04-13 21:56                               ` Pavel Machek
2007-04-13 22:01                                 ` Johannes Berg
2007-04-13 22:24                                 ` Benjamin Herrenschmidt
2007-04-13 21:15                         ` Benjamin Herrenschmidt
2007-04-13 21:50                           ` Pavel Machek
2007-04-13 22:23                             ` Benjamin Herrenschmidt
2007-04-14 22:10                               ` David Brownell
2007-04-13 21:05             ` [PATCH v2] " Pavel Machek
2007-04-12  8:44     ` Benjamin Herrenschmidt
2007-04-17 17:18 ` [PATCH] s2ram: add arch irq disable/enable hooks Johannes Berg
2007-04-18 11:27   ` Pavel Machek

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=1175810054.3489.34.camel@johannes.berg \
    --to=johannes@sipsolutions.net \
    --cc=linux-pm@lists.osdl.org \
    --cc=pavel@ucw.cz \
    /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