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: Thu, 13 May 2010 21:11:08 -0700 Message-ID: <1273810273-3039-4-git-send-email-arve@android.com> References: <1273810273-3039-1-git-send-email-arve@android.com> <1273810273-3039-2-git-send-email-arve@android.com> <1273810273-3039-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: <1273810273-3039-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 , David Rientjes , Andrew Morton List-Id: linux-pm@vger.kernel.org SWYgYSBzdXNwZW5kX2Jsb2NrZXIgaXMgYWN0aXZlLCBzdXNwZW5kIHdpbGwgZmFpbCBhbnl3YXku IFNpbmNlCnRyeV90b19mcmVlemVfdGFza3MgY2FuIHRha2UgdXAgdG8gMjAgc2Vjb25kcyB0byBj b21wbGV0ZSBvciBmYWlsLCBhYm9ydGluZwphcyBzb29uIGFzIHNvbWVvbmUgYmxvY2tzIHN1c3Bl bmQgKGUuZy4gZnJvbSBhbiBpbnRlcnJ1cHQgaGFuZGxlcikgaW1wcm92ZXMKdGhlIHdvcnN0IGNh c2Ugd2FrZXVwIGxhdGVuY3kuCgpPbiBhbiBvbGRlciBrZXJuZWwgd2hlcmUgdGFzayBmcmVlemlu ZyBjb3VsZCBmYWlsIGZvciBwcm9jZXNzZXMgYXR0YWNoZWQKdG8gYSBkZWJ1Z2dlciwgdGhpcyBm aXhlZCBhIHByb2JsZW0gd2hlcmUgdGhlIGRldmljZSBzb21ldGltZXMgaHVuZyBmb3IKMjAgc2Vj b25kcyBiZWZvcmUgdGhlIHNjcmVlbiB0dXJuZWQgb24uCgpTaWduZWQtb2ZmLWJ5OiBBcnZlIEhq w7hubmV2w6VnIDxhcnZlQGFuZHJvaWQuY29tPgpBY2tlZC1ieTogUGF2ZWwgTWFjaGVrIDxwYXZl bEB1Y3cuY3o+Ci0tLQoga2VybmVsL3Bvd2VyL3Byb2Nlc3MuYyB8ICAgMTEgKysrKysrKysrLS0K IDEgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMgYi9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCmlu ZGV4IDcxYWUyOTAuLjI3ZDI2ZDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMK KysrIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwpAQCAtMzgsNiArMzgsNyBAQCBzdGF0aWMgaW50 IHRyeV90b19mcmVlemVfdGFza3MoYm9vbCBzaWdfb25seSkKIAlzdHJ1Y3QgdGltZXZhbCBzdGFy dCwgZW5kOwogCXU2NCBlbGFwc2VkX2NzZWNzNjQ7CiAJdW5zaWduZWQgaW50IGVsYXBzZWRfY3Nl Y3M7CisJYm9vbCB3YWtldXAgPSBmYWxzZTsKIAogCWRvX2dldHRpbWVvZmRheSgmc3RhcnQpOwog CkBAIC02Myw2ICs2NCwxMCBAQCBzdGF0aWMgaW50IHRyeV90b19mcmVlemVfdGFza3MoYm9vbCBz aWdfb25seSkKIAkJCQl0b2RvKys7CiAJCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CiAJCXJl YWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJaWYgKHRvZG8gJiYgc3VzcGVuZF9pc19ibG9j a2VkKCkpIHsKKwkJCXdha2V1cCA9IHRydWU7CisJCQlicmVhazsKKwkJfQogCQlpZiAoIXRvZG8g fHwgdGltZV9hZnRlcihqaWZmaWVzLCBlbmRfdGltZSkpCiAJCQlicmVhazsKIApAQCAtODUsMTMg KzkwLDE1IEBAIHN0YXRpYyBpbnQgdHJ5X3RvX2ZyZWV6ZV90YXNrcyhib29sIHNpZ19vbmx5KQog CQkgKiBidXQgaXQgY2xlYW5zIHVwIGxlZnRvdmVyIFBGX0ZSRUVaRSByZXF1ZXN0cy4KIAkJICov CiAJCXByaW50aygiXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJGcmVlemluZyBvZiB0YXNrcyBm YWlsZWQgYWZ0ZXIgJWQuJTAyZCBzZWNvbmRzICIKKwkJcHJpbnRrKEtFUk5fRVJSICJGcmVlemlu ZyBvZiB0YXNrcyAlcyBhZnRlciAlZC4lMDJkIHNlY29uZHMgIgogCQkJCSIoJWQgdGFza3MgcmVm dXNpbmcgdG8gZnJlZXplKTpcbiIsCisJCQkJd2FrZXVwID8gImFib3J0ZWQiIDogImZhaWxlZCIs CiAJCQkJZWxhcHNlZF9jc2VjcyAvIDEwMCwgZWxhcHNlZF9jc2VjcyAlIDEwMCwgdG9kbyk7CiAJ CXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKIAkJ CXRhc2tfbG9jayhwKTsKLQkJCWlmIChmcmVlemluZyhwKSAmJiAhZnJlZXplcl9zaG91bGRfc2tp cChwKSkKKwkJCWlmIChmcmVlemluZyhwKSAmJiAhZnJlZXplcl9zaG91bGRfc2tpcChwKQorCQkJ CQkmJiBlbGFwc2VkX2NzZWNzID4gMTAwKQogCQkJCXNjaGVkX3Nob3dfdGFzayhwKTsKIAkJCWNh bmNlbF9mcmVlemluZyhwKTsKIAkJCXRhc2tfdW5sb2NrKHApOwotLSAKMS42LjUuMQoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcG0gbWFpbGlu ZyBsaXN0CmxpbnV4LXBtQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMu bGludXgtZm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1wbQ== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753019Ab0ENENW (ORCPT ); Fri, 14 May 2010 00:13:22 -0400 Received: from mail-pw0-f46.google.com ([209.85.160.46]:35277 "EHLO mail-pw0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751052Ab0ENELd (ORCPT ); Fri, 14 May 2010 00:11:33 -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" , =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= , Len Brown , Pavel Machek , Andrew Morton , David Rientjes , Matt Helsley Subject: [PATCH 3/8] PM: suspend_block: Abort task freezing if a suspend_blocker is active. Date: Thu, 13 May 2010 21:11:08 -0700 Message-Id: <1273810273-3039-4-git-send-email-arve@android.com> X-Mailer: git-send-email 1.6.5.1 In-Reply-To: <1273810273-3039-3-git-send-email-arve@android.com> References: <1273810273-3039-1-git-send-email-arve@android.com> <1273810273-3039-2-git-send-email-arve@android.com> <1273810273-3039-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 Acked-by: Pavel Machek --- kernel/power/process.c | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-) diff --git a/kernel/power/process.c b/kernel/power/process.c index 71ae290..27d26d3 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c @@ -38,6 +38,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 +64,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 +90,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