From patchwork Mon Sep 21 07:45:38 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ingo Molnar X-Patchwork-Id: 33983 X-Patchwork-Delegate: paulus@samba.org Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from bilbo.ozlabs.org (localhost [127.0.0.1]) by ozlabs.org (Postfix) with ESMTP id D2B79B7DEA for ; Mon, 21 Sep 2009 17:46:05 +1000 (EST) Received: by ozlabs.org (Postfix) id D91DBB7B7C; Mon, 21 Sep 2009 17:45:58 +1000 (EST) Delivered-To: linuxppc-dev@ozlabs.org Received: from mx2.mail.elte.hu (mx2.mail.elte.hu [157.181.151.9]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 3A3C9B7B7D for ; Mon, 21 Sep 2009 17:45:57 +1000 (EST) Received: from elvis.elte.hu ([157.181.1.14]) by mx2.mail.elte.hu with esmtp (Exim) id 1Mpdaf-00084v-7B from ; Mon, 21 Sep 2009 09:45:48 +0200 Received: by elvis.elte.hu (Postfix, from userid 1004) id D23023E22E3; Mon, 21 Sep 2009 09:45:36 +0200 (CEST) Date: Mon, 21 Sep 2009 09:45:38 +0200 From: Ingo Molnar To: Heiko Carstens Subject: Re: [PATCH] perf_counter/powerpc: Fix compilation after perf_counter_overflow change Message-ID: <20090921074538.GA24535@elte.hu> References: <19127.8400.376239.586120@drongo.ozlabs.ibm.com> <928CFBE8E7CB0040959E56B4EA41A77EC69BA5E0@irsmsx504.ger.corp.intel.com> <20090921073043.GB24467@elte.hu> <20090921073848.GA4649@osiris.boeblingen.de.ibm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20090921073848.GA4649@osiris.boeblingen.de.ibm.com> User-Agent: Mutt/1.5.18 (2008-05-17) Received-SPF: neutral (mx2.mail.elte.hu: 157.181.1.14 is neither permitted nor denied by domain of elte.hu) client-ip=157.181.1.14; envelope-from=mingo@elte.hu; helo=elvis.elte.hu; X-ELTE-SpamScore: -1.5 X-ELTE-SpamLevel: X-ELTE-SpamCheck: no X-ELTE-SpamVersion: ELTE 2.0 X-ELTE-SpamCheck-Details: score=-1.5 required=5.9 tests=BAYES_00 autolearn=no SpamAssassin version=3.2.5 -1.5 BAYES_00 BODY: Bayesian spam probability is 0 to 1% [score: 0.0000] Cc: Peter Zijlstra , "linux-kernel@vger.kernel.org" , "Metzger, Markus T" , "linuxppc-dev@ozlabs.org" , Paul Mackerras , "David S. Miller" X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org * Heiko Carstens wrote: > On Mon, Sep 21, 2009 at 09:30:43AM +0200, Ingo Molnar wrote: > > > > * Metzger, Markus T wrote: > > > > > >-----Original Message----- > > > >From: Paul Mackerras [mailto:paulus@samba.org] > > > >Sent: Monday, September 21, 2009 8:45 AM > > > > > > > > > >Markus, please take care in future to mention it in the changelog if > > > >your patches touch definitions used by other architectures. If you > > > >could go so far as to use grep a bit more and fix up other > > > >architectures' callsites for the things you're changing, that would be > > > >very much appreciated. Thanks. > > > > > > I'm sorry I missed that. > > > > > > There's one more place in arch/sparc/. > > > The below patch should fix it, but I have no means to test it. > > > > You also missed a third thing: > > > > +static inline int > > +perf_output_begin(struct perf_output_handle *handle, struct perf_counter *c, > > + unsigned int size, int nmi, int sample) { } > > > > an 'int' function returning void ... > > > > Plus all the !PERF_COUNTERS branch of empty inlines is pointless - these > > facilities are used by perfcounters code only. I fixed that too. > > Hi Ingo, > > did you fix all of these warnings for !PERF_COUNTERS? > > include/linux/perf_counter.h: In function 'perf_output_begin': > include/linux/perf_counter.h:854: warning: no return statement in function returning non-void > include/linux/perf_counter.h: At top level: > include/linux/perf_counter.h:863: warning: 'struct perf_sample_data' declared inside parameter list > include/linux/perf_counter.h:863: warning: its scope is only this definition or declaration, which is probably not what you want > include/linux/perf_counter.h:868: warning: 'struct perf_sample_data' declared inside parameter list Yes. The full commit is below. Ingo ----------------> From cd74c86bdf705f824d494a2bbda393d1d562b40a Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Mon, 21 Sep 2009 16:44:32 +1000 Subject: [PATCH] perf_counter, powerpc, sparc: Fix compilation after perf_counter_overflow() change Commit 5622f295 ("x86, perf_counter, bts: Optimize BTS overflow handling") removed the regs field from struct perf_sample_data and added a regs parameter to perf_counter_overflow(). This breaks the build on powerpc (and Sparc) as reported by Sachin Sant: arch/powerpc/kernel/perf_counter.c: In function 'record_and_restart': arch/powerpc/kernel/perf_counter.c:1165: error: unknown field 'regs' specified in initializer This adjusts arch/powerpc/kernel/perf_counter.c to correspond with the new struct perf_sample_data and perf_counter_overflow(). [ v2: also fix Sparc, Markus Metzger ] Reported-by: Sachin Sant Signed-off-by: Paul Mackerras Cc: Markus Metzger Cc: David S. Miller Cc: benh@kernel.crashing.org Cc: linuxppc-dev@ozlabs.org Cc: Peter Zijlstra LKML-Reference: <19127.8400.376239.586120@drongo.ozlabs.ibm.com> Signed-off-by: Ingo Molnar --- arch/powerpc/kernel/perf_counter.c | 3 +-- arch/sparc/kernel/perf_counter.c | 3 +-- include/linux/perf_counter.h | 17 ----------------- 3 files changed, 2 insertions(+), 21 deletions(-) diff --git a/arch/powerpc/kernel/perf_counter.c b/arch/powerpc/kernel/perf_counter.c index 7ceefaf..5ccf9bc 100644 --- a/arch/powerpc/kernel/perf_counter.c +++ b/arch/powerpc/kernel/perf_counter.c @@ -1162,7 +1162,6 @@ static void record_and_restart(struct perf_counter *counter, unsigned long val, */ if (record) { struct perf_sample_data data = { - .regs = regs, .addr = 0, .period = counter->hw.last_period, }; @@ -1170,7 +1169,7 @@ static void record_and_restart(struct perf_counter *counter, unsigned long val, if (counter->attr.sample_type & PERF_SAMPLE_ADDR) perf_get_data_addr(regs, &data.addr); - if (perf_counter_overflow(counter, nmi, &data)) { + if (perf_counter_overflow(counter, nmi, &data, regs)) { /* * Interrupts are coming too fast - throttle them * by setting the counter to 0, so it will be diff --git a/arch/sparc/kernel/perf_counter.c b/arch/sparc/kernel/perf_counter.c index 09de403..b1265ce 100644 --- a/arch/sparc/kernel/perf_counter.c +++ b/arch/sparc/kernel/perf_counter.c @@ -493,7 +493,6 @@ static int __kprobes perf_counter_nmi_handler(struct notifier_block *self, regs = args->regs; - data.regs = regs; data.addr = 0; cpuc = &__get_cpu_var(cpu_hw_counters); @@ -513,7 +512,7 @@ static int __kprobes perf_counter_nmi_handler(struct notifier_block *self, if (!sparc_perf_counter_set_period(counter, hwc, idx)) continue; - if (perf_counter_overflow(counter, 1, &data)) + if (perf_counter_overflow(counter, 1, &data, regs)) sparc_pmu_disable_counter(hwc, idx); } diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h index bd34100..740caad 100644 --- a/include/linux/perf_counter.h +++ b/include/linux/perf_counter.h @@ -849,23 +849,6 @@ static inline void perf_counter_comm(struct task_struct *tsk) { } static inline void perf_counter_fork(struct task_struct *tsk) { } static inline void perf_counter_init(void) { } -static inline int -perf_output_begin(struct perf_output_handle *handle, struct perf_counter *c, - unsigned int size, int nmi, int sample) { } -static inline void perf_output_end(struct perf_output_handle *handle) { } -static inline void -perf_output_copy(struct perf_output_handle *handle, - const void *buf, unsigned int len) { } -static inline void -perf_output_sample(struct perf_output_handle *handle, - struct perf_event_header *header, - struct perf_sample_data *data, - struct perf_counter *counter) { } -static inline void -perf_prepare_sample(struct perf_event_header *header, - struct perf_sample_data *data, - struct perf_counter *counter, - struct pt_regs *regs) { } #endif #define perf_output_put(handle, x) \