From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933227AbYDBUnz (ORCPT ); Wed, 2 Apr 2008 16:43:55 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1765469AbYDBUe6 (ORCPT ); Wed, 2 Apr 2008 16:34:58 -0400 Received: from smtp-out.google.com ([216.239.33.17]:50556 "EHLO smtp-out.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1765388AbYDBUez (ORCPT ); Wed, 2 Apr 2008 16:34:55 -0400 DomainKey-Signature: a=rsa-sha1; s=beta; d=google.com; c=nofws; q=dns; h=received:subject:from:to:cc:in-reply-to:references: content-type:organization:date:message-id:mime-version:x-mailer:content-transfer-encoding; b=C4qBCre9CL95Ex7VfZlagtZIF3S0MZjO1MAqmVJoQ+jZiaceBrH/WIPLp/e7amdjH vwE7vR6hvzhvH/JGxZtCw== Subject: Re: posix-cpu-timers revamp From: Frank Mayhar To: Roland McGrath Cc: linux-kernel@vger.kernel.org In-Reply-To: <20080402194836.4933026F98A@magilla.localdomain> References: <20080206165045.89b809cc.akpm@linux-foundation.org> <1202345893.8525.33.camel@peace.smo.corp.google.com> <20080207162203.3e3cf5ab@Varda> <20080207165455.04ec490b@Varda> <1204314904.4850.23.camel@peace.smo.corp.google.com> <20080304070016.903E127010A@magilla.localdomain> <1204660376.9768.1.camel@bobble.smo.corp.google.com> <20080305040826.D0E6127010A@magilla.localdomain> <1204830243.20004.31.camel@bobble.smo.corp.google.com> <20080311075020.A93DB26F991@magilla.localdomain> <1205269507.23124.57.camel@bobble.smo.corp.google.com> <20080311213507.5BCDF26F991@magilla.localdomain> <1205455050.19551.16.camel@bobble.smo.corp.google.com> <20080321071846.1B22B26F9A7@magilla.localdomain> <1206122240.14638.31.camel@bobble.smo.corp.google.com> <20080322215829.D69D026F9A7@magilla.localdomain> <1206380079.21896.20.camel@bobble.smo.corp.google.com> <20080331054404.78CDB26F8E9@magilla.localdomain> <1206995072.14649.41.camel@bobble.smo.corp.google.com> <20080402020707.151E126F8DC@magilla.localdomain> <1207158164.11976.32.camel@bobble.smo.corp.google.com> <20080402194836.4933026F98A@magilla.localdomain> Content-Type: text/plain Organization: Google, Inc. Date: Wed, 02 Apr 2008 13:34:24 -0700 Message-Id: <1207168464.11976.48.camel@bobble.smo.corp.google.com> Mime-Version: 1.0 X-Mailer: Evolution 2.6.1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 2008-04-02 at 12:48 -0700, Roland McGrath wrote: > > One quick note: this inline isn't needed for the 2b solution (allocate > > percpu storage in copy_signal CLONE_THREAD case), since if there's more > > than one thread there'll always be a percpu area and if there's only one > > thread the summation code won't be entered. > > That's true. I still think it's a good idea to have it, even if it winds > up being empty in the variants we really use. The principle is that the > new set of types/functions could be used to implement exactly what we have > now. In fact, it's usually best to do a series of small patches that start > with introducing the abstraction while not changing anything. Ah, okay. Well, except that the whole point of this exercise is to fix that hang. :-) But yeah, I understand. > > And another quick note: It appears that with the "allocate percpu > > storage in copy_signal CLONE_THREAD case" mechanism, I don't need to > > worry about allocating it anywhere else. If I need it (which is only in > > the case of multiple threads and an interval timer) then I'll have it > > because it was allocated with the second thread. > > That's correct. > > > So I just eliminate the allocation in do_setitimer() entirely. > > Again, I'd leave the call to the inline that would do it. > For this implementation plan, its body is: > BUG_ON(!task->signal->cputime.totals && !thread_group_empty(task)); BTW I did look at allocating it in posix_cpu_timer_set() and set_process_cpu_timer() but the first at least is doing stuff with locks held. I'll keep looking at it, though. One little gotcha we just ran into, though: When checking tsk->signal->(anything) in run_posix_cpu_timers(), we have to hold tasklist_lock to avoid a race with release_task(). This is going to make even the null case always cost more than before. -- Frank Mayhar Google, Inc.