Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932865AbXHVUfW (ORCPT ); Wed, 22 Aug 2007 16:35:22 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1760075AbXHVUfK (ORCPT ); Wed, 22 Aug 2007 16:35:10 -0400 Received: from tomts5.bellnexxia.net ([209.226.175.25]:33927 "EHLO tomts5-srv.bellnexxia.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756434AbXHVUfI (ORCPT ); Wed, 22 Aug 2007 16:35:08 -0400 Date: Wed, 22 Aug 2007 16:29:55 -0400 From: Mathieu Desnoyers To: Christoph Lameter Cc: Andi Kleen , akpm@linux-foundation.org, linux-kernel@vger.kernel.org, mingo@redhat.com Subject: Re: [PATCH] SLUB use cmpxchg_local Message-ID: <20070822202955.GA26612@Krystal> References: <20070821234702.GE29691@Krystal> <20070822000323.GG29691@Krystal> <20070822003834.GB1400@Krystal> <20070822134532.GA3769@Krystal> <20070822200910.GA25687@Krystal> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline In-Reply-To: X-Editor: vi X-Info: http://krystal.dyndns.org:8080 X-Operating-System: Linux/2.6.21.3-grsec (i686) X-Uptime: 16:23:37 up 23 days, 20:42, 3 users, load average: 0.55, 0.50, 0.38 User-Agent: Mutt/1.5.13 (2006-08-11) Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1916 Lines: 56 * Christoph Lameter (clameter@sgi.com) wrote: > On Wed, 22 Aug 2007, Mathieu Desnoyers wrote: > > > * Christoph Lameter (clameter@sgi.com) wrote: > > > void *kmem_cache_alloc(struct kmem_cache *s, gfp_t gfpflags) > > > @@ -1577,7 +1590,10 @@ static void __slab_free(struct kmem_cach > > > { > > > void *prior; > > > void **object = (void *)x; > > > + unsigned long flags; > > > > > > + local_irq_save(flags); > > > + put_cpu_no_resched(); > > > > Those two lines may skip a preempt_check. > > Yes we cannot execute something else here. > > > Could we change them to this instead ? > > > > put_cpu(); > > local_irq_save(flags); > > Then the thread could be preempted and rescheduled on a different cpu > between put_cpu and local_irq_save() which means that we loose the > state information of the kmem_cache_cpu structure. > Maybe am I misunderstanding something, but kmem_cache_cpu does not seem to be passed to __slab_free() at all, nor any data referenced by it. So why do we care about being preempted there ? > > Otherwise, it would be good to call > > > > preempt_check_resched(); > > > > After each local_irq_restore() in this function. > > We could do that but maybe the frequency of these checks would be too > high? When should the resched checks be used? Since we are only doing this on the slow path, it does not hurt. preempt_check_resched() is embedded in preempt_enable() and has a very low impact (simple thread flag check in the standard case). Mathieu -- Mathieu Desnoyers Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68 - 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/