From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751459AbYGXPfB (ORCPT ); Thu, 24 Jul 2008 11:35:01 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753546AbYGXPet (ORCPT ); Thu, 24 Jul 2008 11:34:49 -0400 Received: from hrndva-omtalb.mail.rr.com ([71.74.56.122]:34565 "EHLO hrndva-omtalb.mail.rr.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751739AbYGXPes (ORCPT ); Thu, 24 Jul 2008 11:34:48 -0400 Date: Thu, 24 Jul 2008 11:34:46 -0400 (EDT) From: Steven Rostedt X-X-Sender: rostedt@gandalf.stny.rr.com To: Mathieu Desnoyers cc: akpm@linux-foundation.org, Ingo Molnar , linux-kernel@vger.kernel.org, Peter Zijlstra , Masami Hiramatsu , "Frank Ch. Eigler" , Hideo AOKI , Takashi Nishiie , Alexander Viro , Eduard - Gabriel Munteanu Subject: Re: [patch 02/17] Kernel Tracepoints In-Reply-To: <20080715222746.361289615@polymtl.ca> Message-ID: References: <20080715222604.331269462@polymtl.ca> <20080715222746.361289615@polymtl.ca> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 15 Jul 2008, Mathieu Desnoyers wrote: > +static void * > +tracepoint_entry_remove_probe(struct tracepoint_entry *entry, void *probe) > +{ > + int nr_probes = 0, nr_del = 0, i; > + void **old, **new; > + > + old = entry->funcs; > + > + debug_print_probes(entry); > + /* (N -> M), (N > 1, M >= 0) probes */ > + for (nr_probes = 0; old[nr_probes]; nr_probes++) { > + if ((!probe || old[nr_probes] == probe)) > + nr_del++; > + } > + > + if (nr_probes - nr_del == 0) { > + /* N -> 0, (N > 1) */ > + entry->funcs = NULL; > + entry->refcount = 0; > + debug_print_probes(entry); > + return old; > + } else { > + int j = 0; > + /* N -> M, (N > 1, M > 0) */ > + /* + 1 for NULL */ > + new = kzalloc((nr_probes - nr_del + 1) > + * sizeof(void *), GFP_KERNEL); > + if (new == NULL) > + return ERR_PTR(-ENOMEM); Hmm, on failure of allocating a new array, we could simply use the old array, and remove the one probe from it instead of just failing. -- Steve > + for (i = 0; old[i]; i++) > + if ((probe && old[i] != probe)) > + new[j++] = old[i]; > + entry->refcount = nr_probes - nr_del; > + entry->funcs = new; > + } > + debug_print_probes(entry); > + return old; > +} > +