From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Sun, 26 Jun 2005 04:30:54 +0200 From: Pavel Machek Subject: Re: [RFC] Fix SMP brokenness for PF_FREEZE and make freezing usable for other purposes Message-ID: <20050626023053.GA2871@atrey.karlin.mff.cuni.cz> References: <20050625025122.GC22393@atrey.karlin.mff.cuni.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Sender: owner-linux-mm@kvack.org Return-Path: To: Christoph Lameter Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, raybry@engr.sgi.com, torvalds@osdl.org List-ID: Hi! > > It includes whitespace changes and most of patch is nice cleanup that > > should probably go in separately. (Hint hint :-). > > > Previous code had important property: try_to_freeze was optimized away > > in !CONFIG_PM case. Please keep that. > > > > Best way is to introduce macros and cleanup the code to use the > > macros, without actually changing any object code. That can go in very > > fast. Then we can switch to atomic_t ... yeah I think that's > > neccessary, but I'd like cleanups first. > > Here is such a patch: > > --- > Cleanup patch for freezing against 2.6.12-git5. > > 1. Establish a simple API for process freezing defined in linux/include/sched.h: > > frozen(process) Check for frozen process > freezing(process) Check if a process is being frozen > freeze(process) Tell a process to freeze (go to refrigerator) > thaw_process(process) Restart process > frozen_process(process) Process is frozen now > > 2. Remove all references to PF_FREEZE and PF_FROZEN from all > kernel sources except sched.h > > 3. Fix numerous locations where try_to_freeze is manually done by a driver > > 4. Remove the argument that is no longer necessary from two function > calls. Can you just keep the argument? Rename it to int unused or whatever, but if you do it, it stays backwards-compatible (and smaller patch, too). > 5. Some whitespace cleanup > > 6. Clear potential race in refrigerator (provides an open window of PF_FREEZE > cleared before setting PF_FROZEN, recalc_sigpending does not check > PF_FROZEN). > > This patch does not address the problem of freeze_processes() violating the rule > that a task may only modify its own flags by setting PF_FREEZE. This is not clean > in an SMP environment. freeze(process) is therefore not SMP safe! > > Signed-off-by: Christoph Lameter Looks mostly good but: > Index: linux-2.6.12/arch/i386/kernel/signal.c > =================================================================== > --- linux-2.6.12.orig/arch/i386/kernel/signal.c 2005-06-25 05:01:26.000000000 +0000 > +++ linux-2.6.12/arch/i386/kernel/signal.c 2005-06-25 05:01:28.000000000 +0000 > @@ -608,10 +608,8 @@ int fastcall do_signal(struct pt_regs *r > if (!user_mode(regs)) > return 1; > > - if (current->flags & PF_FREEZE) { > - refrigerator(0); > + if (try_to_freeze) > goto no_signal; > - } > This is not good. Missing (). Pavel -- Boycott Kodak -- for their patent abuse against Java. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: aart@kvack.org