From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 3/8] PM: suspend_block: Abort task freezing if a suspend_blocker is active. Date: Tue, 27 Apr 2010 21:31:54 -0700 Message-ID: <1272429119-12103-4-git-send-email-arve@android.com> References: <1272429119-12103-1-git-send-email-arve@android.com> <1272429119-12103-2-git-send-email-arve@android.com> <1272429119-12103-3-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: <1272429119-12103-3-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 , David Rientjes , Tejun Heo , Andrew Morton List-Id: linux-pm@vger.kernel.org SWYgYSBzdXNwZW5kX2Jsb2NrZXIgaXMgYWN0aXZlLCBzdXNwZW5kIHdpbGwgZmFpbCBhbnl3YXku IFNpbmNlCnRyeV90b19mcmVlemVfdGFza3MgY2FuIHRha2UgdXAgdG8gMjAgc2Vjb25kcyB0byBj b21wbGV0ZSBvciBmYWlsLCBhYm9ydGluZwphcyBzb29uIGFzIHNvbWVvbmUgYmxvY2tzIHN1c3Bl bmQgKGUuZy4gZnJvbSBhbiBpbnRlcnJ1cHQgaGFuZGxlcikgaW1wcm92ZXMKdGhlIHdvcnN0IGNh c2Ugd2FrZXVwIGxhdGVuY3kuCgpPbiBhbiBvbGRlciBrZXJuZWwgd2hlcmUgdGFzayBmcmVlemlu ZyBjb3VsZCBmYWlsIGZvciBwcm9jZXNzZXMgYXR0YWNoZWQKdG8gYSBkZWJ1Z2dlciwgdGhpcyBm aXhlZCBhIHByb2JsZW0gd2hlcmUgdGhlIGRldmljZSBzb21ldGltZXMgaHVuZyBmb3IKMjAgc2Vj b25kcyBiZWZvcmUgdGhlIHNjcmVlbiB0dXJuZWQgb24uCgpTaWduZWQtb2ZmLWJ5OiBBcnZlIEhq w7hubmV2w6VnIDxhcnZlQGFuZHJvaWQuY29tPgotLS0KIGtlcm5lbC9wb3dlci9wcm9jZXNzLmMg fCAgIDEyICsrKysrKysrKystLQogMSBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAy IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMgYi9rZXJu ZWwvcG93ZXIvcHJvY2Vzcy5jCmluZGV4IDcxYWUyOTAuLmQ4ZWJkNTAgMTAwNjQ0Ci0tLSBhL2tl cm5lbC9wb3dlci9wcm9jZXNzLmMKKysrIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwpAQCAtMTUs NiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgv ZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3Vz cGVuZF9ibG9ja2VyLmg+CiAKIC8qIAogICogVGltZW91dCBmb3Igc3RvcHBpbmcgcHJvY2Vzc2Vz CkBAIC0zOCw2ICszOSw3IEBAIHN0YXRpYyBpbnQgdHJ5X3RvX2ZyZWV6ZV90YXNrcyhib29sIHNp Z19vbmx5KQogCXN0cnVjdCB0aW1ldmFsIHN0YXJ0LCBlbmQ7CiAJdTY0IGVsYXBzZWRfY3NlY3M2 NDsKIAl1bnNpZ25lZCBpbnQgZWxhcHNlZF9jc2VjczsKKwlib29sIHdha2V1cCA9IGZhbHNlOwog CiAJZG9fZ2V0dGltZW9mZGF5KCZzdGFydCk7CiAKQEAgLTYzLDYgKzY1LDEwIEBAIHN0YXRpYyBp bnQgdHJ5X3RvX2ZyZWV6ZV90YXNrcyhib29sIHNpZ19vbmx5KQogCQkJCXRvZG8rKzsKIAkJfSB3 aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwor CQlpZiAodG9kbyAmJiBzdXNwZW5kX2lzX2Jsb2NrZWQoKSkgeworCQkJd2FrZXVwID0gdHJ1ZTsK KwkJCWJyZWFrOworCQl9CiAJCWlmICghdG9kbyB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIGVuZF90 aW1lKSkKIAkJCWJyZWFrOwogCkBAIC04NSwxMyArOTEsMTUgQEAgc3RhdGljIGludCB0cnlfdG9f ZnJlZXplX3Rhc2tzKGJvb2wgc2lnX29ubHkpCiAJCSAqIGJ1dCBpdCBjbGVhbnMgdXAgbGVmdG92 ZXIgUEZfRlJFRVpFIHJlcXVlc3RzLgogCQkgKi8KIAkJcHJpbnRrKCJcbiIpOwotCQlwcmludGso S0VSTl9FUlIgIkZyZWV6aW5nIG9mIHRhc2tzIGZhaWxlZCBhZnRlciAlZC4lMDJkIHNlY29uZHMg IgorCQlwcmludGsoS0VSTl9FUlIgIkZyZWV6aW5nIG9mIHRhc2tzICVzIGFmdGVyICVkLiUwMmQg c2Vjb25kcyAiCiAJCQkJIiglZCB0YXNrcyByZWZ1c2luZyB0byBmcmVlemUpOlxuIiwKKwkJCQl3 YWtldXAgPyAiYWJvcnRlZCIgOiAiZmFpbGVkIiwKIAkJCQllbGFwc2VkX2NzZWNzIC8gMTAwLCBl bGFwc2VkX2NzZWNzICUgMTAwLCB0b2RvKTsKIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsK IAkJZG9fZWFjaF90aHJlYWQoZywgcCkgewogCQkJdGFza19sb2NrKHApOwotCQkJaWYgKGZyZWV6 aW5nKHApICYmICFmcmVlemVyX3Nob3VsZF9za2lwKHApKQorCQkJaWYgKGZyZWV6aW5nKHApICYm ICFmcmVlemVyX3Nob3VsZF9za2lwKHApCisJCQkJCSYmIGVsYXBzZWRfY3NlY3MgPiAxMDApCiAJ CQkJc2NoZWRfc2hvd190YXNrKHApOwogCQkJY2FuY2VsX2ZyZWV6aW5nKHApOwogCQkJdGFza191 bmxvY2socCk7Ci0tIAoxLjYuNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpsaW51eC1wbSBtYWlsaW5nIGxpc3QKbGludXgtcG1AbGlzdHMubGludXgt Zm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LXBt From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751602Ab0D1Ecq (ORCPT ); Wed, 28 Apr 2010 00:32:46 -0400 Received: from mail-pv0-f174.google.com ([74.125.83.174]:60281 "EHLO mail-pv0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751122Ab0D1Ec2 (ORCPT ); Wed, 28 Apr 2010 00:32:28 -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 , Andrew Morton , David Rientjes , Matt Helsley Subject: [PATCH 3/8] PM: suspend_block: Abort task freezing if a suspend_blocker is active. Date: Tue, 27 Apr 2010 21:31:54 -0700 Message-Id: <1272429119-12103-4-git-send-email-arve@android.com> X-Mailer: git-send-email 1.6.5.1 In-Reply-To: <1272429119-12103-3-git-send-email-arve@android.com> References: <1272429119-12103-1-git-send-email-arve@android.com> <1272429119-12103-2-git-send-email-arve@android.com> <1272429119-12103-3-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 If a suspend_blocker is active, suspend will fail anyway. Since try_to_freeze_tasks can take up to 20 seconds to complete or fail, aborting as soon as someone blocks suspend (e.g. from an interrupt handler) improves the worst case wakeup latency. On an older kernel where task freezing could fail for processes attached to a debugger, this fixed a problem where the device sometimes hung for 20 seconds before the screen turned on. Signed-off-by: Arve Hjønnevåg --- kernel/power/process.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/kernel/power/process.c b/kernel/power/process.c index 71ae290..d8ebd50 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c @@ -15,6 +15,7 @@ #include #include #include +#include /* * Timeout for stopping processes @@ -38,6 +39,7 @@ static int try_to_freeze_tasks(bool sig_only) struct timeval start, end; u64 elapsed_csecs64; unsigned int elapsed_csecs; + bool wakeup = false; do_gettimeofday(&start); @@ -63,6 +65,10 @@ static int try_to_freeze_tasks(bool sig_only) todo++; } while_each_thread(g, p); read_unlock(&tasklist_lock); + if (todo && suspend_is_blocked()) { + wakeup = true; + break; + } if (!todo || time_after(jiffies, end_time)) break; @@ -85,13 +91,15 @@ static int try_to_freeze_tasks(bool sig_only) * but it cleans up leftover PF_FREEZE requests. */ printk("\n"); - printk(KERN_ERR "Freezing of tasks failed after %d.%02d seconds " + printk(KERN_ERR "Freezing of tasks %s after %d.%02d seconds " "(%d tasks refusing to freeze):\n", + wakeup ? "aborted" : "failed", elapsed_csecs / 100, elapsed_csecs % 100, todo); read_lock(&tasklist_lock); do_each_thread(g, p) { task_lock(p); - if (freezing(p) && !freezer_should_skip(p)) + if (freezing(p) && !freezer_should_skip(p) + && elapsed_csecs > 100) sched_show_task(p); cancel_freezing(p); task_unlock(p); -- 1.6.5.1