Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933281AbXB1RiX (ORCPT ); Wed, 28 Feb 2007 12:38:23 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S933280AbXB1RiX (ORCPT ); Wed, 28 Feb 2007 12:38:23 -0500 Received: from ogre.sisk.pl ([217.79.144.158]:43560 "EHLO ogre.sisk.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933279AbXB1RiV (ORCPT ); Wed, 28 Feb 2007 12:38:21 -0500 From: "Rafael J. Wysocki" To: vatsa@in.ibm.com Subject: Re: Problem with freezable workqueues Date: Wed, 28 Feb 2007 18:40:39 +0100 User-Agent: KMail/1.9.5 Cc: Pavel Machek , Gautham R Shenoy , Johannes Berg , LKML , Oleg Nesterov References: <200702272251.28844.rjw@sisk.pl> <200702281211.04515.rjw@sisk.pl> <20070228131721.GD15509@in.ibm.com> In-Reply-To: <20070228131721.GD15509@in.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200702281840.40113.rjw@sisk.pl> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1801 Lines: 50 On Wednesday, 28 February 2007 14:17, Srivatsa Vaddagiri wrote: > On Wed, Feb 28, 2007 at 12:11:03PM +0100, Rafael J. Wysocki wrote: > > > In addition to thawing worker thread before kthread_stopping it, there > > > are minor changes required in worker threads, to check for > > > is_cpu_offline(bind_cpu) when they come out of refrigerator and jump to > > > wait_to_die if so (ex: softirq.c). > > > > > > I guess you would need these changes before freezer-based hotplug is > > > merged, in which case Gautham can send those patches out first. > > > > Yes, please, if that's possible. > > After looking at the current workqueue code, the above minor change I > suggested is not required. > > So you should be able to fix your "kthread_stop on a frozen worker > thread hangs" problem by just a simple patch like this (against > 2.6.20-mm2): > > > --- workqueue.c.org 2007-02-28 18:32:48.000000000 +0530 > +++ workqueue.c 2007-02-28 18:44:23.000000000 +0530 > @@ -718,6 +718,8 @@ static void cleanup_workqueue_thread(str > insert_wq_barrier(cwq, &barr, 1); > cwq->should_stop = 1; > alive = 1; > + if (frozen(cwq->thread)) > + thaw(cwq->thread); > } > spin_unlock_irq(&cwq->lock); > > > Can you test with this? Sure, I will. > Note that as Oleg commented, freezable workqueues are broken w/o his > patch here: > > http://marc.theaimsgroup.com/?l=linux-kernel&m=116855740612755 > > So you need to have Andrew/Linux pick up the above patch first to have > correctly functioning freezable workqueues. This one already is in -mm. - 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/