From: William Cohen <wcohen@redhat.com>
To: Robert Richter <robert.richter@amd.com>
Cc: Will Deacon <will.deacon@arm.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Matt Fleming <matt@console-pimps.org>
Subject: Re: [PATCH] oprofile, perf: Use per-cpu framework
Date: Mon, 02 Jul 2012 16:19:06 -0400 [thread overview]
Message-ID: <4FF2023A.7040008@redhat.com> (raw)
In-Reply-To: <20120622144231.GJ24632@erda.amd.com>
On 06/22/2012 10:42 AM, Robert Richter wrote:
> Will,
>
> On 15.06.12 17:19:54, Will Deacon wrote:
>> On Fri, Jun 15, 2012 at 05:16:35PM +0100, Robert Richter wrote:
>>> On 15.06.12 16:43:59, Will Deacon wrote:
>>>> Given both the lack of feedback and the trivial nature of this patch would
>>>> you be able to pick this up please? I'd rather not push it via the ARM tree
>>>> as the change is under drivers/.
>>>
>>> Will, I will apply it. Sorry for not responding earlier.
>
> I just realized I wrote a patch some time ago that introduces per_cpu
> variables, see below. Please give it a try to, I will then queue it
> for v3.6.
>
> Your patch should go upstream anyway to make it into stable trees.
>
> Thanks,
>
> -Robert
Hi Robert,
I was able to build a linux-3.5.0-rc5+ kernel with this patch and the following troublesome config entry enabled:
CONFIG_DEBUG_PER_CPU_MAPS=y
The resulting kernel ran and oprofile functioned fine on a compulab trimslice machine.
-Will
>
>
> From f8bbfd7d28303967ca4e8597de9bdc9bf8b197e7 Mon Sep 17 00:00:00 2001
> From: Robert Richter <robert.richter@amd.com>
> Date: Thu, 23 Feb 2012 17:07:06 +0100
> Subject: [PATCH] oprofile, perf: Use per-cpu framework
>
> This changes oprofile_perf.c to use the per-cpu framework.
>
> Using the per-cpu framework should avoid error like the following:
>
> arch/arm/oprofile/../../../drivers/oprofile/oprofile_perf.c:28:28: error: variably modified 'perf_events' at file scope
>
> Reported-by: William Cohen <wcohen@redhat.com>
> Cc: Will Deacon <will.deacon@arm.com>
> Signed-off-by: Robert Richter <robert.richter@amd.com>
> ---
> drivers/oprofile/oprofile_perf.c | 23 +++++++++++------------
> 1 files changed, 11 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/oprofile/oprofile_perf.c b/drivers/oprofile/oprofile_perf.c
> index efc4b7f..f3cfa0b 100644
> --- a/drivers/oprofile/oprofile_perf.c
> +++ b/drivers/oprofile/oprofile_perf.c
> @@ -1,5 +1,6 @@
> /*
> * Copyright 2010 ARM Ltd.
> + * Copyright 2012 Advanced Micro Devices, Inc., Robert Richter
> *
> * Perf-events backend for OProfile.
> */
> @@ -25,7 +26,7 @@ static int oprofile_perf_enabled;
> static DEFINE_MUTEX(oprofile_perf_mutex);
>
> static struct op_counter_config *counter_config;
> -static struct perf_event **perf_events[NR_CPUS];
> +static DEFINE_PER_CPU(struct perf_event **, perf_events);
> static int num_counters;
>
> /*
> @@ -38,7 +39,7 @@ static void op_overflow_handler(struct perf_event *event,
> u32 cpu = smp_processor_id();
>
> for (id = 0; id < num_counters; ++id)
> - if (perf_events[cpu][id] == event)
> + if (per_cpu(perf_events, cpu)[id] == event)
> break;
>
> if (id != num_counters)
> @@ -74,7 +75,7 @@ static int op_create_counter(int cpu, int event)
> {
> struct perf_event *pevent;
>
> - if (!counter_config[event].enabled || perf_events[cpu][event])
> + if (!counter_config[event].enabled || per_cpu(perf_events, cpu)[event])
> return 0;
>
> pevent = perf_event_create_kernel_counter(&counter_config[event].attr,
> @@ -91,18 +92,18 @@ static int op_create_counter(int cpu, int event)
> return -EBUSY;
> }
>
> - perf_events[cpu][event] = pevent;
> + per_cpu(perf_events, cpu)[event] = pevent;
>
> return 0;
> }
>
> static void op_destroy_counter(int cpu, int event)
> {
> - struct perf_event *pevent = perf_events[cpu][event];
> + struct perf_event *pevent = per_cpu(perf_events, cpu)[event];
>
> if (pevent) {
> perf_event_release_kernel(pevent);
> - perf_events[cpu][event] = NULL;
> + per_cpu(perf_events, cpu)[event] = NULL;
> }
> }
>
> @@ -257,12 +258,12 @@ void oprofile_perf_exit(void)
>
> for_each_possible_cpu(cpu) {
> for (id = 0; id < num_counters; ++id) {
> - event = perf_events[cpu][id];
> + event = per_cpu(perf_events, cpu)[id];
> if (event)
> perf_event_release_kernel(event);
> }
>
> - kfree(perf_events[cpu]);
> + kfree(per_cpu(perf_events, cpu));
> }
>
> kfree(counter_config);
> @@ -277,8 +278,6 @@ int __init oprofile_perf_init(struct oprofile_operations *ops)
> if (ret)
> return ret;
>
> - memset(&perf_events, 0, sizeof(perf_events));
> -
> num_counters = perf_num_counters();
> if (num_counters <= 0) {
> pr_info("oprofile: no performance counters\n");
> @@ -298,9 +297,9 @@ int __init oprofile_perf_init(struct oprofile_operations *ops)
> }
>
> for_each_possible_cpu(cpu) {
> - perf_events[cpu] = kcalloc(num_counters,
> + per_cpu(perf_events, cpu) = kcalloc(num_counters,
> sizeof(struct perf_event *), GFP_KERNEL);
> - if (!perf_events[cpu]) {
> + if (!per_cpu(perf_events, cpu)) {
> pr_info("oprofile: failed to allocate %d perf events "
> "for cpu %d\n", num_counters, cpu);
> ret = -ENOMEM;
prev parent reply other threads:[~2012-07-02 20:19 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-08 15:16 [PATCH] oprofile: perf: use NR_CPUS instead or nr_cpumask_bits for static array Will Deacon
2012-06-15 15:43 ` Will Deacon
2012-06-15 16:16 ` Robert Richter
2012-06-15 16:19 ` Will Deacon
2012-06-22 14:42 ` [PATCH] oprofile, perf: Use per-cpu framework Robert Richter
2012-06-26 17:21 ` Will Deacon
2012-07-02 19:53 ` William Cohen
2012-07-02 20:19 ` William Cohen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4FF2023A.7040008@redhat.com \
--to=wcohen@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=matt@console-pimps.org \
--cc=robert.richter@amd.com \
--cc=will.deacon@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.