From: "Arve Hjønnevåg" <arve@android.com>
To: linux-pm@lists.linux-foundation.org
Cc: ncunningham@crca.org.au, u.luckas@road.de, swetland@google.com
Subject: [PATCH 6/9] PM: suspend_block: Add debugfs file
Date: Tue, 5 May 2009 21:18:46 -0700 [thread overview]
Message-ID: <1241583529-5092-7-git-send-email-arve@android.com> (raw)
In-Reply-To: <1241583529-5092-6-git-send-email-arve@android.com>
Report active and inactive suspend blockers in
/sys/kernel/debug/suspend_blockers.
Signed-off-by: Arve Hjønnevåg <arve@android.com>
---
kernel/power/suspend_blocker.c | 44 ++++++++++++++++++++++++++++++++++++++-
1 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/kernel/power/suspend_blocker.c b/kernel/power/suspend_blocker.c
index cab9e9a..ce87c65 100644
--- a/kernel/power/suspend_blocker.c
+++ b/kernel/power/suspend_blocker.c
@@ -17,6 +17,7 @@
#include <linux/rtc.h>
#include <linux/suspend.h>
#include <linux/suspend_blocker.h>
+#include <linux/debugfs.h>
#include "power.h"
enum {
@@ -41,6 +42,7 @@ struct workqueue_struct *suspend_work_queue;
struct suspend_blocker main_suspend_blocker;
static suspend_state_t requested_suspend_state = PM_SUSPEND_MEM;
static bool enable_suspend_blockers;
+static struct dentry *suspend_blocker_stats_dentry;
#define pr_info_time(fmt, args...) \
do { \
@@ -54,6 +56,21 @@ static bool enable_suspend_blockers;
tm.tm_hour, tm.tm_min, tm.tm_sec, ts.tv_nsec); \
} while (0);
+static int suspend_blocker_stats_show(struct seq_file *m, void *unused)
+{
+ unsigned long irqflags;
+ struct suspend_blocker *blocker;
+
+ seq_puts(m, "name\tactive\n");
+ spin_lock_irqsave(&list_lock, irqflags);
+ list_for_each_entry(blocker, &inactive_blockers, link)
+ seq_printf(m, "\"%s\"\t0\n", blocker->name);
+ list_for_each_entry(blocker, &active_blockers, link)
+ seq_printf(m, "\"%s\"\t1\n", blocker->name);
+ spin_unlock_irqrestore(&list_lock, irqflags);
+ return 0;
+}
+
static void print_active_blockers_locked(void)
{
struct suspend_blocker *blocker;
@@ -101,8 +118,8 @@ static DECLARE_WORK(suspend_work, suspend_worker);
/**
* suspend_blocker_init() - Initialize a suspend blocker
* @blocker: The suspend blocker to initialize.
- * @name: The name of the suspend blocker to show in debug messages.
- *
+ * @name: The name of the suspend blocker to show in debug messages and
+ * /sys/kernel/debug/suspend_blockers.
* The suspend blocker struct and name must not be freed before calling
* suspend_blocker_destroy.
*/
@@ -230,6 +247,19 @@ void request_suspend_state(suspend_state_t state)
spin_unlock_irqrestore(&state_lock, irqflags);
}
+static int suspend_blocker_stats_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, suspend_blocker_stats_show, NULL);
+}
+
+static const struct file_operations suspend_blocker_stats_fops = {
+ .owner = THIS_MODULE,
+ .open = suspend_blocker_stats_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
static int __init suspend_block_init(void)
{
suspend_work_queue = create_singlethread_workqueue("suspend");
@@ -241,4 +271,14 @@ static int __init suspend_block_init(void)
return 0;
}
+static int __init suspend_block_postcore_init(void)
+{
+ if (!suspend_work_queue)
+ return 0;
+ suspend_blocker_stats_dentry = debugfs_create_file("suspend_blockers",
+ S_IRUGO, NULL, NULL, &suspend_blocker_stats_fops);
+ return 0;
+}
+
core_initcall(suspend_block_init);
+postcore_initcall(suspend_block_postcore_init);
--
1.6.1
_______________________________________________
linux-pm mailing list
linux-pm@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/linux-pm
next prev parent reply other threads:[~2009-05-06 4:18 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-06 4:18 [RFC][PATCH 0/9] Suspend block api (version 3) Arve Hjønnevåg
2009-05-06 4:18 ` [PATCH 1/9] PM: Add suspend block api Arve Hjønnevåg
2009-05-06 4:18 ` [PATCH 2/9] PM: suspend_block: Add driver to access suspend blockers from user-space Arve Hjønnevåg
2009-05-05 20:12 ` Pavel Machek
2009-05-07 1:42 ` Arve Hjønnevåg
2009-05-07 10:32 ` Pavel Machek
2009-05-08 0:43 ` Arve Hjønnevåg
2009-05-08 14:22 ` Rafael J. Wysocki
2009-05-09 0:38 ` Arve Hjønnevåg
2009-05-05 20:16 ` Pavel Machek
2009-05-07 1:31 ` Arve Hjønnevåg
2009-05-07 10:43 ` Pavel Machek
2009-05-06 4:18 ` [PATCH 3/9] PM: suspend_block: Abort task freezing if a suspend_blocker is active Arve Hjønnevåg
2009-05-05 19:57 ` Pavel Machek
2009-05-07 1:51 ` Arve Hjønnevåg
2009-05-07 10:41 ` Pavel Machek
2009-05-07 23:49 ` Arve Hjønnevåg
2009-05-08 1:06 ` Nigel Cunningham
2009-05-08 1:22 ` Arve Hjønnevåg
2009-05-08 1:35 ` Nigel Cunningham
2009-05-08 14:40 ` Rafael J. Wysocki
2009-05-08 22:27 ` Nigel Cunningham
2009-05-08 23:01 ` Rafael J. Wysocki
2009-05-09 0:12 ` Nigel Cunningham
2009-05-12 10:05 ` Pavel Machek
2009-05-12 16:55 ` Rafael J. Wysocki
2009-05-12 19:33 ` Pavel Machek
2009-05-12 10:04 ` Pavel Machek
2009-05-08 0:22 ` Rafael J. Wysocki
2009-05-06 4:18 ` [PATCH 4/9] Input: Block suspend while event queue is not empty Arve Hjønnevåg
2009-05-05 20:02 ` Pavel Machek
2009-05-07 1:57 ` Arve Hjønnevåg
2009-05-06 4:18 ` [PATCH 5/9] PM: suspend_block: Switch to list of active and inactive suspend blockers Arve Hjønnevåg
2009-05-06 4:18 ` Arve Hjønnevåg [this message]
2009-05-06 4:18 ` [PATCH 7/9] PM: suspend_block: Add suspend_blocker stats Arve Hjønnevåg
2009-05-06 4:18 ` [PATCH 8/9] PM: suspend_block: Add timeout support Arve Hjønnevåg
2009-05-06 4:18 ` [PATCH 9/9] PM: suspend_block: Add timeout support to user-space suspend_blockers Arve Hjønnevåg
2009-05-06 17:17 ` [RFC][PATCH 0/9] Suspend block api (version 3) Kevin Hilman
2009-05-07 22:42 ` Arve Hjønnevåg
2009-05-08 16:01 ` mark gross
2009-05-08 23:36 ` Kevin Hilman
2009-05-15 19:58 ` Pavel Machek
-- strict thread matches above, loose matches on Subject: below --
2009-04-30 3:09 [RFC][PATCH 0/9] Suspend block api (version 2) Arve Hjønnevåg
2009-04-30 3:10 ` [PATCH 1/9] PM: Add suspend block api Arve Hjønnevåg
2009-04-30 3:10 ` [PATCH 2/9] PM: suspend_block: Add driver to access suspend blockers from user-space Arve Hjønnevåg
2009-04-30 3:10 ` [PATCH 3/9] PM: suspend_block: Abort task freezing if a suspend_blocker is active Arve Hjønnevåg
2009-04-30 3:10 ` [PATCH 4/9] Input: Block suspend while event queue is not empty Arve Hjønnevåg
2009-04-30 3:10 ` [PATCH 5/9] PM: suspend_block: Switch to list of active and inactive suspend blockers Arve Hjønnevåg
2009-04-30 3:10 ` [PATCH 6/9] PM: suspend_block: Add debugfs file Arve Hjønnevåg
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=1241583529-5092-7-git-send-email-arve@android.com \
--to=arve@android.com \
--cc=linux-pm@lists.linux-foundation.org \
--cc=ncunningham@crca.org.au \
--cc=swetland@google.com \
--cc=u.luckas@road.de \
/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.