From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 4/8] PM: suspend_block: Add debugfs file Date: Fri, 30 Apr 2010 15:36:57 -0700 Message-ID: <1272667021-21312-5-git-send-email-arve@android.com> References: <1272667021-21312-1-git-send-email-arve@android.com> <1272667021-21312-2-git-send-email-arve@android.com> <1272667021-21312-3-git-send-email-arve@android.com> <1272667021-21312-4-git-send-email-arve@android.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1272667021-21312-4-git-send-email-arve@android.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-pm-bounces@lists.linux-foundation.org Errors-To: linux-pm-bounces@lists.linux-foundation.org To: linux-pm@lists.linux-foundation.org, linux-kernel@vger.kernel.org Cc: Len Brown , Oleg Nesterov , Tejun Heo List-Id: linux-pm@vger.kernel.org UmVwb3J0IGFjdGl2ZSBhbmQgaW5hY3RpdmUgc3VzcGVuZCBibG9ja2VycyBpbgovc3lzL2tlcm5l bC9kZWJ1Zy9zdXNwZW5kX2Jsb2NrZXJzLgoKU2lnbmVkLW9mZi1ieTogQXJ2ZSBIasO4bm5ldsOl ZyA8YXJ2ZUBhbmRyb2lkLmNvbT4KLS0tCiBrZXJuZWwvcG93ZXIvc3VzcGVuZF9ibG9ja2VyLmMg fCAgIDQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlcyBj aGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2tl cm5lbC9wb3dlci9zdXNwZW5kX2Jsb2NrZXIuYyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kX2Jsb2Nr ZXIuYwppbmRleCAyYzU4YjIxLi5jZWQ0OTkzIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3Vz cGVuZF9ibG9ja2VyLmMKKysrIGIva2VybmVsL3Bvd2VyL3N1c3BlbmRfYmxvY2tlci5jCkBAIC0x Nyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvc3Vz cGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmRfYmxvY2tlci5oPgorI2luY2x1ZGUgPGxp bnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlICJwb3dlci5oIgogCiBleHRlcm4gc3RydWN0IHdvcmtx dWV1ZV9zdHJ1Y3QgKnBtX3dxOwpAQCAtNDIsNiArNDMsNyBAQCBzdGF0aWMgaW50IGN1cnJlbnRf ZXZlbnRfbnVtOwogc3RydWN0IHN1c3BlbmRfYmxvY2tlciBtYWluX3N1c3BlbmRfYmxvY2tlcjsK IHN0YXRpYyBzdXNwZW5kX3N0YXRlX3QgcmVxdWVzdGVkX3N1c3BlbmRfc3RhdGUgPSBQTV9TVVNQ RU5EX01FTTsKIHN0YXRpYyBib29sIGVuYWJsZV9zdXNwZW5kX2Jsb2NrZXJzOworc3RhdGljIHN0 cnVjdCBkZW50cnkgKnN1c3BlbmRfYmxvY2tlcl9zdGF0c19kZW50cnk7CiAKICNkZWZpbmUgcHJf aW5mb190aW1lKGZtdCwgYXJncy4uLikgXAogCWRvIHsgXApAQCAtNTUsNiArNTcsMjEgQEAgc3Rh dGljIGJvb2wgZW5hYmxlX3N1c3BlbmRfYmxvY2tlcnM7CiAJCQl0bS50bV9ob3VyLCB0bS50bV9t aW4sIHRtLnRtX3NlYywgdHMudHZfbnNlYyk7IFwKIAl9IHdoaWxlICgwKTsKIAorc3RhdGljIGlu dCBzdXNwZW5kX2Jsb2NrZXJfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVu dXNlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXN0cnVjdCBzdXNwZW5kX2Jsb2Nr ZXIgKmJsb2NrZXI7CisKKwlzZXFfcHV0cyhtLCAibmFtZVx0YWN0aXZlXG4iKTsKKwlzcGluX2xv Y2tfaXJxc2F2ZSgmbGlzdF9sb2NrLCBpcnFmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShi bG9ja2VyLCAmaW5hY3RpdmVfYmxvY2tlcnMsIGxpbmspCisJCXNlcV9wcmludGYobSwgIlwiJXNc Ilx0MFxuIiwgYmxvY2tlci0+bmFtZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShibG9ja2VyLCAm YWN0aXZlX2Jsb2NrZXJzLCBsaW5rKQorCQlzZXFfcHJpbnRmKG0sICJcIiVzXCJcdDFcbiIsIGJs b2NrZXItPm5hbWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3RfbG9jaywgaXJxZmxh Z3MpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBwcmludF9hY3RpdmVfYmxvY2tlcnNf bG9ja2VkKHZvaWQpCiB7CiAJc3RydWN0IHN1c3BlbmRfYmxvY2tlciAqYmxvY2tlcjsKQEAgLTEw Niw4ICsxMjMsOCBAQCBzdGF0aWMgREVDTEFSRV9XT1JLKHN1c3BlbmRfd29yaywgc3VzcGVuZF93 b3JrZXIpOwogLyoqCiAgKiBzdXNwZW5kX2Jsb2NrZXJfaW5pdCgpIC0gSW5pdGlhbGl6ZSBhIHN1 c3BlbmQgYmxvY2tlcgogICogQGJsb2NrZXI6CVRoZSBzdXNwZW5kIGJsb2NrZXIgdG8gaW5pdGlh bGl6ZS4KLSAqIEBuYW1lOglUaGUgbmFtZSBvZiB0aGUgc3VzcGVuZCBibG9ja2VyIHRvIHNob3cg aW4gZGVidWcgbWVzc2FnZXMuCi0gKgorICogQG5hbWU6CVRoZSBuYW1lIG9mIHRoZSBzdXNwZW5k IGJsb2NrZXIgdG8gc2hvdyBpbiBkZWJ1ZyBtZXNzYWdlcyBhbmQKKyAqCQkvc3lzL2tlcm5lbC9k ZWJ1Zy9zdXNwZW5kX2Jsb2NrZXJzLgogICogVGhlIHN1c3BlbmQgYmxvY2tlciBzdHJ1Y3QgYW5k IG5hbWUgbXVzdCBub3QgYmUgZnJlZWQgYmVmb3JlIGNhbGxpbmcKICAqIHN1c3BlbmRfYmxvY2tl cl9kZXN0cm95LgogICovCkBAIC0yNTQsOCArMjcxLDMwIEBAIGludCByZXF1ZXN0X3N1c3BlbmRf c3RhdGUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50 IHN1c3BlbmRfYmxvY2tlcl9zdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBm aWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzdXNwZW5kX2Jsb2NrZXJf c3RhdHNfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHN1c3BlbmRfYmxvY2tlcl9zdGF0c19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxF LAorCS5vcGVuID0gc3VzcGVuZF9ibG9ja2VyX3N0YXRzX29wZW4sCisJLnJlYWQgPSBzZXFfcmVh ZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCit9 OworCiB2b2lkIF9faW5pdCBzdXNwZW5kX2Jsb2NrX2luaXQodm9pZCkKIHsKIAlzdXNwZW5kX2Js b2NrZXJfaW5pdCgmbWFpbl9zdXNwZW5kX2Jsb2NrZXIsICJtYWluIik7CiAJc3VzcGVuZF9ibG9j aygmbWFpbl9zdXNwZW5kX2Jsb2NrZXIpOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBzdXNwZW5k X2Jsb2NrX3Bvc3Rjb3JlX2luaXQodm9pZCkKK3sKKwlzdXNwZW5kX2Jsb2NrZXJfc3RhdHNfZGVu dHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3VzcGVuZF9ibG9ja2VycyIsCisJCQlTX0lSVUdP LCBOVUxMLCBOVUxMLCAmc3VzcGVuZF9ibG9ja2VyX3N0YXRzX2ZvcHMpOworCXJldHVybiAwOwor fQorCitwb3N0Y29yZV9pbml0Y2FsbChzdXNwZW5kX2Jsb2NrX3Bvc3Rjb3JlX2luaXQpOwotLSAK MS42LjUuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtcG0gbWFpbGluZyBsaXN0CmxpbnV4LXBtQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3Jn Cmh0dHBzOi8vbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1wbQ== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759894Ab0D3WjZ (ORCPT ); Fri, 30 Apr 2010 18:39:25 -0400 Received: from mail-gx0-f217.google.com ([209.85.217.217]:64137 "EHLO mail-gx0-f217.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759867Ab0D3Wh0 (ORCPT ); Fri, 30 Apr 2010 18:37:26 -0400 From: =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= To: linux-pm@lists.linux-foundation.org, linux-kernel@vger.kernel.org Cc: "Rafael J. Wysocki" , Alan Stern , Tejun Heo , Oleg Nesterov , =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= , Pavel Machek , Len Brown Subject: [PATCH 4/8] PM: suspend_block: Add debugfs file Date: Fri, 30 Apr 2010 15:36:57 -0700 Message-Id: <1272667021-21312-5-git-send-email-arve@android.com> X-Mailer: git-send-email 1.6.5.1 In-Reply-To: <1272667021-21312-4-git-send-email-arve@android.com> References: <1272667021-21312-1-git-send-email-arve@android.com> <1272667021-21312-2-git-send-email-arve@android.com> <1272667021-21312-3-git-send-email-arve@android.com> <1272667021-21312-4-git-send-email-arve@android.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Report active and inactive suspend blockers in /sys/kernel/debug/suspend_blockers. Signed-off-by: Arve Hjønnevåg --- kernel/power/suspend_blocker.c | 43 ++++++++++++++++++++++++++++++++++++++- 1 files changed, 41 insertions(+), 2 deletions(-) diff --git a/kernel/power/suspend_blocker.c b/kernel/power/suspend_blocker.c index 2c58b21..ced4993 100644 --- a/kernel/power/suspend_blocker.c +++ b/kernel/power/suspend_blocker.c @@ -17,6 +17,7 @@ #include #include #include +#include #include "power.h" extern struct workqueue_struct *pm_wq; @@ -42,6 +43,7 @@ static int current_event_num; 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 { \ @@ -55,6 +57,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; @@ -106,8 +123,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. */ @@ -254,8 +271,30 @@ int request_suspend_state(suspend_state_t state) return 0; } +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, +}; + void __init suspend_block_init(void) { suspend_blocker_init(&main_suspend_blocker, "main"); suspend_block(&main_suspend_blocker); } + +static int __init suspend_block_postcore_init(void) +{ + suspend_blocker_stats_dentry = debugfs_create_file("suspend_blockers", + S_IRUGO, NULL, NULL, &suspend_blocker_stats_fops); + return 0; +} + +postcore_initcall(suspend_block_postcore_init); -- 1.6.5.1