From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964781AbXBZHVq (ORCPT ); Mon, 26 Feb 2007 02:21:46 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S964817AbXBZHVR (ORCPT ); Mon, 26 Feb 2007 02:21:17 -0500 Received: from ogre.sisk.pl ([217.79.144.158]:57884 "EHLO ogre.sisk.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933783AbXBZHVN (ORCPT ); Mon, 26 Feb 2007 02:21:13 -0500 From: "Rafael J. Wysocki" To: Andrew Morton Subject: [PATCH -mm 2/6] Freezer: Fix memory ordering in refrigerator Date: Mon, 26 Feb 2007 08:05:13 +0100 User-Agent: KMail/1.9.5 Cc: Pavel Machek , LKML , Oleg Nesterov , Aneesh Kumar , "Paul E. McKenney" , Srivatsa Vaddagiri References: <200702260800.49603.rjw@sisk.pl> In-Reply-To: <200702260800.49603.rjw@sisk.pl> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200702260805.14870.rjw@sisk.pl> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org From: Oleg Nesterov refrigerator() can miss a wakeup, "wait event" loop needs a proper memory ordering. Signed-off-by: Oleg Nesterov Signed-off-by: Rafael J. Wysocki Acked-by: Pavel Machek --- kernel/power/process.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) Index: linux-2.6.20-mm2/kernel/power/process.c =================================================================== --- linux-2.6.20-mm2.orig/kernel/power/process.c +++ linux-2.6.20-mm2/kernel/power/process.c @@ -47,8 +47,10 @@ void refrigerator(void) recalc_sigpending(); /* We sent fake signal, clean it up */ spin_unlock_irq(¤t->sighand->siglock); - while (frozen(current)) { - current->state = TASK_UNINTERRUPTIBLE; + for (;;) { + set_current_state(TASK_UNINTERRUPTIBLE); + if (!frozen(current)) + break; schedule(); } pr_debug("%s left refrigerator\n", current->comm);