From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755192AbZAZWji (ORCPT ); Mon, 26 Jan 2009 17:39:38 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752518AbZAZWj0 (ORCPT ); Mon, 26 Jan 2009 17:39:26 -0500 Received: from mx2.redhat.com ([66.187.237.31]:50754 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752000AbZAZWjZ (ORCPT ); Mon, 26 Jan 2009 17:39:25 -0500 Date: Mon, 26 Jan 2009 23:37:03 +0100 From: Oleg Nesterov To: Ingo Molnar Cc: Andrew Morton , a.p.zijlstra@chello.nl, rusty@rustcorp.com.au, travis@sgi.com, mingo@redhat.com, davej@redhat.com, cpufreq@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/3] work_on_cpu: Use our own workqueue. Message-ID: <20090126223703.GA5508@redhat.com> References: <20090126171618.GA32091@elte.hu> <20090126103529.cb124a58.akpm@linux-foundation.org> <20090126202022.GA8867@elte.hu> <20090126130046.37b8f34e.akpm@linux-foundation.org> <20090126212727.GA13670@elte.hu> <20090126133551.fab5e27a.akpm@linux-foundation.org> <20090126214516.GA22142@elte.hu> <20090126140116.35f9c173.akpm@linux-foundation.org> <20090126221502.GA4542@redhat.com> <20090126222405.GA15896@elte.hu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090126222405.GA15896@elte.hu> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/26, Ingo Molnar wrote: > > Andrew's suggestion does make sense though: for any not-in-progress > worklet we can dequeue that worklet and execute it in the flushing > context. [ And if that worklet cannot be dequeued because it's being > processed then that's fine and we can wait on that single worklet, without > waiting on any other 'unrelated' worklets. ] Yes sure. This is easy, and I am not sure we need the special handler. If the caller wants this behaviour, it can do: if (cancel_work_sync(work)) work->func(work); But flush_work() was specially introduced for the case when we can't do the above, > That does not help work_on_cpu() though: that facility really uses the > fact that workqueues are implemented via per CPU threads - hence we cannot > remove the worklet from the queue and execute it in the flushing context. Yes. Oleg.