Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964930AbXBYPNF (ORCPT ); Sun, 25 Feb 2007 10:13:05 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S964936AbXBYPNF (ORCPT ); Sun, 25 Feb 2007 10:13:05 -0500 Received: from ogre.sisk.pl ([217.79.144.158]:55725 "EHLO ogre.sisk.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964930AbXBYPNE (ORCPT ); Sun, 25 Feb 2007 10:13:04 -0500 From: "Rafael J. Wysocki" To: "Aneesh Kumar" Subject: Re: [RFC][PATCH 4/7] Freezer: Fix vfork problem Date: Sun, 25 Feb 2007 16:05:40 +0100 User-Agent: KMail/1.9.5 Cc: "Pavel Machek" , LKML , paulmck@linux.vnet.ibm.com, ego@in.ibm.com, akpm@osdl.org, mingo@elte.hu, vatsa@in.ibm.com, dipankar@in.ibm.com, venkatesh.pallipadi@intel.com, Oleg Nesterov References: <200702231116.23607.rjw@sisk.pl> <200702251359.53411.rjw@sisk.pl> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200702251605.42312.rjw@sisk.pl> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3250 Lines: 82 On Sunday, 25 February 2007 15:33, Aneesh Kumar wrote: > On 2/25/07, Rafael J. Wysocki wrote: > > On Sunday, 25 February 2007 11:45, Rafael J. Wysocki wrote: > > > Hi, > > > > > > ========= > > --- linux-2.6.20-mm2.orig/kernel/power/process.c 2007-02-22 23:44:04.000000000 +0100 > > +++ linux-2.6.20-mm2/kernel/power/process.c 2007-02-23 22:33:11.000000000 +0100 > > @@ -127,22 +127,12 @@ static unsigned int try_to_freeze_tasks( > > cancel_freezing(p); > > continue; > > } > > - if (is_user_space(p)) { > > - if (!freeze_user_space) > > - continue; > > - > > - /* Freeze the task unless there is a vfork > > - * completion pending > > - */ > > - if (!p->vfork_done) > > - freeze_process(p); > > - } else { > > - if (freeze_user_space) > > - continue; > > + if (is_user_space(p) == !freeze_user_space) > > + continue; > > > > How about ? > if ( ! (is_user_space(p) == freeze_user_space) ) > continue; I think it would be safer to do if ( is_user_space(p) != !!freeze_user_space) continue; which is equivalent to my previous version, but contains one '!' more. ;-) Seriously, the one in the patch is consistent with the other occurrences of it in the file and I'm going to change it anyway in a separate patch (while freezing kernel threads we need to freeze userspace tasks too in case one of the kernel threads called kernel_execve() in the meantime). > BTW one of the concern that vatsa had was; is it ok to allow some of > the tasks to be left running ( the parent from vfork ) while > freezing. I guess we can solve this in a nice way. > > in fork.c > > if (clone_flags & CLONE_VFORK) { > p->vfork_done = &vfork; > p->flags |= PF_PARENT_WAKEUP_ON_FREEZE; > init_completion(&vfork); > } > > > and in freeze_process(struct task_struct *p) > > if ( p->flags & PF_PARENT_WAKEUP_ON_FREEZE ) { > wake_up_parent(); > } > > now parent should be wating for these completion via > > wait_for_completion_freezable(); // pavel's implementation. Hm, I think this leaves us with an analogous problem: we need a method to tell a vforking task that the child should set PF_PARENT_WAKEUP_ON_FREEZE. In the approach with PF_FREEZER_SKIP we need a method to tell the vforking task that it should skip try_to_freeze() in freezer_count(), and I think there are some possible ways to do this. The patch doesn't implement any of them, because this is a different issue that can be deal with later. Greetings, Rafael - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/