From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 5/9] PM: suspend_block: Add debugfs file Date: Thu, 22 Apr 2010 18:08:54 -0700 Message-ID: <1271984938-13920-6-git-send-email-arve@android.com> References: <1271984938-13920-1-git-send-email-arve@android.com> <1271984938-13920-2-git-send-email-arve@android.com> <1271984938-13920-3-git-send-email-arve@android.com> <1271984938-13920-4-git-send-email-arve@android.com> <1271984938-13920-5-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: <1271984938-13920-5-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 List-Id: linux-pm@vger.kernel.org UmVwb3J0IGFjdGl2ZSBhbmQgaW5hY3RpdmUgc3VzcGVuZCBibG9ja2VycyBpbgovc3lzL2tlcm5l bC9kZWJ1Zy9zdXNwZW5kX2Jsb2NrZXJzLgoKU2lnbmVkLW9mZi1ieTogQXJ2ZSBIasO4bm5ldsOl ZyA8YXJ2ZUBhbmRyb2lkLmNvbT4KLS0tCiBrZXJuZWwvcG93ZXIvc3VzcGVuZF9ibG9ja2VyLmMg fCAgIDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlcyBj aGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2tl cm5lbC9wb3dlci9zdXNwZW5kX2Jsb2NrZXIuYyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kX2Jsb2Nr ZXIuYwppbmRleCA4NjhlOGYxLi4wNDdlOTEwIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3Vz cGVuZF9ibG9ja2VyLmMKKysrIGIva2VybmVsL3Bvd2VyL3N1c3BlbmRfYmxvY2tlci5jCkBAIC0x Nyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvc3Vz cGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmRfYmxvY2tlci5oPgorI2luY2x1ZGUgPGxp bnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlICJwb3dlci5oIgogCiBlbnVtIHsKQEAgLTQxLDYgKzQy LDcgQEAgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnN1c3BlbmRfd29ya19xdWV1ZTsKIHN0cnVj dCBzdXNwZW5kX2Jsb2NrZXIgbWFpbl9zdXNwZW5kX2Jsb2NrZXI7CiBzdGF0aWMgc3VzcGVuZF9z dGF0ZV90IHJlcXVlc3RlZF9zdXNwZW5kX3N0YXRlID0gUE1fU1VTUEVORF9NRU07CiBzdGF0aWMg Ym9vbCBlbmFibGVfc3VzcGVuZF9ibG9ja2VyczsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzdXNw ZW5kX2Jsb2NrZXJfc3RhdHNfZGVudHJ5OwogCiAjZGVmaW5lIHByX2luZm9fdGltZShmbXQsIGFy Z3MuLi4pIFwKIAlkbyB7IFwKQEAgLTU0LDYgKzU2LDIxIEBAIHN0YXRpYyBib29sIGVuYWJsZV9z dXNwZW5kX2Jsb2NrZXJzOwogCQkJdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMsIHRz LnR2X25zZWMpOyBcCiAJfSB3aGlsZSAoMCk7CiAKK3N0YXRpYyBpbnQgc3VzcGVuZF9ibG9ja2Vy X3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJdW5zaWdu ZWQgbG9uZyBpcnFmbGFnczsKKwlzdHJ1Y3Qgc3VzcGVuZF9ibG9ja2VyICpibG9ja2VyOworCisJ c2VxX3B1dHMobSwgIm5hbWVcdGFjdGl2ZVxuIik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpc3Rf bG9jaywgaXJxZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxvY2tlciwgJmluYWN0aXZl X2Jsb2NrZXJzLCBsaW5rKQorCQlzZXFfcHJpbnRmKG0sICJcIiVzXCJcdDBcbiIsIGJsb2NrZXIt Pm5hbWUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxvY2tlciwgJmFjdGl2ZV9ibG9ja2Vycywg bGluaykKKwkJc2VxX3ByaW50ZihtLCAiXCIlc1wiXHQxXG4iLCBibG9ja2VyLT5uYW1lKTsKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0X2xvY2ssIGlycWZsYWdzKTsKKwlyZXR1cm4gMDsK K30KKwogc3RhdGljIHZvaWQgcHJpbnRfYWN0aXZlX2Jsb2NrZXJzX2xvY2tlZCh2b2lkKQogewog CXN0cnVjdCBzdXNwZW5kX2Jsb2NrZXIgKmJsb2NrZXI7CkBAIC0xMDEsOCArMTE4LDggQEAgc3Rh dGljIERFQ0xBUkVfV09SSyhzdXNwZW5kX3dvcmssIHN1c3BlbmRfd29ya2VyKTsKIC8qKgogICog c3VzcGVuZF9ibG9ja2VyX2luaXQoKSAtIEluaXRpYWxpemUgYSBzdXNwZW5kIGJsb2NrZXIKICAq IEBibG9ja2VyOglUaGUgc3VzcGVuZCBibG9ja2VyIHRvIGluaXRpYWxpemUuCi0gKiBAbmFtZToJ VGhlIG5hbWUgb2YgdGhlIHN1c3BlbmQgYmxvY2tlciB0byBzaG93IGluIGRlYnVnIG1lc3NhZ2Vz LgotICoKKyAqIEBuYW1lOglUaGUgbmFtZSBvZiB0aGUgc3VzcGVuZCBibG9ja2VyIHRvIHNob3cg aW4gZGVidWcgbWVzc2FnZXMgYW5kCisgKgkJL3N5cy9rZXJuZWwvZGVidWcvc3VzcGVuZF9ibG9j a2Vycy4KICAqIFRoZSBzdXNwZW5kIGJsb2NrZXIgc3RydWN0IGFuZCBuYW1lIG11c3Qgbm90IGJl IGZyZWVkIGJlZm9yZSBjYWxsaW5nCiAgKiBzdXNwZW5kX2Jsb2NrZXJfZGVzdHJveS4KICAqLwpA QCAtMjQwLDYgKzI1NywxOSBAQCBpbnQgcmVxdWVzdF9zdXNwZW5kX3N0YXRlKHN1c3BlbmRfc3Rh dGVfdCBzdGF0ZSkKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzdXNwZW5kX2Jsb2NrZXJf c3RhdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwly ZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc3VzcGVuZF9ibG9ja2VyX3N0YXRzX3Nob3csIE5VTEwp OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdXNwZW5kX2Jsb2Nr ZXJfc3RhdHNfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHN1c3Bl bmRfYmxvY2tlcl9zdGF0c19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNl cV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogc3RhdGljIGludCBf X2luaXQgc3VzcGVuZF9ibG9ja19pbml0KHZvaWQpCiB7CiAJc3VzcGVuZF93b3JrX3F1ZXVlID0g Y3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInN1c3BlbmQiKTsKQEAgLTI1MSw0ICsyODEs MTQgQEAgc3RhdGljIGludCBfX2luaXQgc3VzcGVuZF9ibG9ja19pbml0KHZvaWQpCiAJcmV0dXJu IDA7CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IHN1c3BlbmRfYmxvY2tfcG9zdGNvcmVfaW5pdCh2 b2lkKQoreworCWlmICghc3VzcGVuZF93b3JrX3F1ZXVlKQorCQlyZXR1cm4gMDsKKwlzdXNwZW5k X2Jsb2NrZXJfc3RhdHNfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3VzcGVuZF9ibG9j a2VycyIsCisJCQlTX0lSVUdPLCBOVUxMLCBOVUxMLCAmc3VzcGVuZF9ibG9ja2VyX3N0YXRzX2Zv cHMpOworCXJldHVybiAwOworfQorCiBjb3JlX2luaXRjYWxsKHN1c3BlbmRfYmxvY2tfaW5pdCk7 Citwb3N0Y29yZV9pbml0Y2FsbChzdXNwZW5kX2Jsb2NrX3Bvc3Rjb3JlX2luaXQpOwotLSAKMS42 LjUuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtcG0gbWFpbGluZyBsaXN0CmxpbnV4LXBtQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0 dHBzOi8vbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1w bQ== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754741Ab0DWBKQ (ORCPT ); Thu, 22 Apr 2010 21:10:16 -0400 Received: from mail-yw0-f194.google.com ([209.85.211.194]:50164 "EHLO mail-yw0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754709Ab0DWBKK (ORCPT ); Thu, 22 Apr 2010 21:10:10 -0400 From: =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= To: linux-pm@lists.linux-foundation.org, linux-kernel@vger.kernel.org Cc: =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= , Pavel Machek , "Rafael J. Wysocki" , Len Brown Subject: [PATCH 5/9] PM: suspend_block: Add debugfs file Date: Thu, 22 Apr 2010 18:08:54 -0700 Message-Id: <1271984938-13920-6-git-send-email-arve@android.com> X-Mailer: git-send-email 1.6.5.1 In-Reply-To: <1271984938-13920-5-git-send-email-arve@android.com> References: <1271984938-13920-1-git-send-email-arve@android.com> <1271984938-13920-2-git-send-email-arve@android.com> <1271984938-13920-3-git-send-email-arve@android.com> <1271984938-13920-4-git-send-email-arve@android.com> <1271984938-13920-5-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 | 44 ++++++++++++++++++++++++++++++++++++++- 1 files changed, 42 insertions(+), 2 deletions(-) diff --git a/kernel/power/suspend_blocker.c b/kernel/power/suspend_blocker.c index 868e8f1..047e910 100644 --- a/kernel/power/suspend_blocker.c +++ b/kernel/power/suspend_blocker.c @@ -17,6 +17,7 @@ #include #include #include +#include #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. */ @@ -240,6 +257,19 @@ 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, +}; + static int __init suspend_block_init(void) { suspend_work_queue = create_singlethread_workqueue("suspend"); @@ -251,4 +281,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.5.1