[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <BANLkTikR7j0iZ7SLsfkz=2bpTm2uaO_=5g@mail.gmail.com>
Date: Thu, 23 Jun 2011 13:44:36 +0200
From: Stephane Eranian <eranian@...gle.com>
To: Don Zickus <dzickus@...hat.com>
Cc: Cyrill Gorcunov <gorcunov@...il.com>,
Peter Zijlstra <a.p.zijlstra@...llo.nl>,
Ingo Molnar <mingo@...e.hu>, Lin Ming <ming.m.lin@...el.com>,
Arnaldo Carvalho de Melo <acme@...hat.com>,
Frederic Weisbecker <fweisbec@...il.com>,
Vince Weaver <vweaver1@...s.utk.edu>,
lkml <linux-kernel@...r.kernel.org>
Subject: Re: [RFC -tip] perf, x86: Add PERF_COUNT_HW_NMI_WATCHDOG event v2
On Thu, Jun 23, 2011 at 1:40 PM, Don Zickus <dzickus@...hat.com> wrote:
> On Thu, Jun 23, 2011 at 03:07:06PM +0400, Cyrill Gorcunov wrote:
>> On Thu, Jun 23, 2011 at 01:54:39PM +0400, Cyrill Gorcunov wrote:
>> ...
>> > >
>> > > No new hidden event, just a x86_pmu + a per-arch callbacks.
>> >
>> > Looks quite good for me, Don? (i'll cook some draft patch for review meanwhile).
>> >
>> > Cyrill
>>
>> Since we are going to make __weak linking anyway maybe something like below
>> fit even beter? (untested)
>
> I don't think the compiler knows what platform you are running on and may
> just blindly link your new p4 function for all x86s, which is probably not
> what you want.
>
Don, is right. You need the level of indirection I had in my outline patch.
You also don't need the:
+ if (wd_attr->type != PERF_TYPE_HARDWARE ||
+ wd_attr->attr.config != PERF_COUNT_HW_CPU_CYCLES)
+ return;
In the p4 callback given you know your coming in for the watchdog.
> Cheers,
> Don
>
>>
>> Cyrill
>> ---
>> arch/x86/kernel/cpu/perf_event_p4.c | 26 ++++++++++++++++++++++++++
>> kernel/watchdog.c | 3 +++
>> 2 files changed, 29 insertions(+)
>>
>> Index: linux-2.6.git/arch/x86/kernel/cpu/perf_event_p4.c
>> ===================================================================
>> --- linux-2.6.git.orig/arch/x86/kernel/cpu/perf_event_p4.c
>> +++ linux-2.6.git/arch/x86/kernel/cpu/perf_event_p4.c
>> @@ -705,6 +705,32 @@ static int p4_validate_raw_event(struct
>> return 0;
>> }
>>
>> +void hw_nmi_watchdog_set_attr(struct perf_event_attr *wd_attr)
>> +{
>> + /*
>> + * Watchdog ticks are special on Netburst, we use
>> + * that named "non-sleeping" ticks as recommended
>> + * by Intel SDM Vol3b.
>> + */
>> + if (wd_attr->type != PERF_TYPE_HARDWARE ||
>> + wd_attr->attr.config != PERF_COUNT_HW_CPU_CYCLES)
>> + return;
>> +
>> + wd_attr->type = PERF_TYPE_RAW;
>> + wd_attr->config =
>> + p4_config_pack_escr(P4_ESCR_EVENT(P4_EVENT_EXECUTION_EVENT) |
>> + P4_ESCR_EMASK_BIT(P4_EVENT_EXECUTION_EVENT, NBOGUS0) |
>> + P4_ESCR_EMASK_BIT(P4_EVENT_EXECUTION_EVENT, NBOGUS1) |
>> + P4_ESCR_EMASK_BIT(P4_EVENT_EXECUTION_EVENT, NBOGUS2) |
>> + P4_ESCR_EMASK_BIT(P4_EVENT_EXECUTION_EVENT, NBOGUS3) |
>> + P4_ESCR_EMASK_BIT(P4_EVENT_EXECUTION_EVENT, BOGUS0) |
>> + P4_ESCR_EMASK_BIT(P4_EVENT_EXECUTION_EVENT, BOGUS1) |
>> + P4_ESCR_EMASK_BIT(P4_EVENT_EXECUTION_EVENT, BOGUS2) |
>> + P4_ESCR_EMASK_BIT(P4_EVENT_EXECUTION_EVENT, BOGUS3)) |
>> + p4_config_pack_cccr(P4_CCCR_THRESHOLD(15) | P4_CCCR_COMPLEMENT |
>> + P4_CCCR_COMPARE);
>> +}
>> +
>> static int p4_hw_config(struct perf_event *event)
>> {
>> int cpu = get_cpu();
>> Index: linux-2.6.git/kernel/watchdog.c
>> ===================================================================
>> --- linux-2.6.git.orig/kernel/watchdog.c
>> +++ linux-2.6.git/kernel/watchdog.c
>> @@ -355,6 +355,8 @@ static int watchdog(void *unused)
>>
>>
>> #ifdef CONFIG_HARDLOCKUP_DETECTOR
>> +void __weak hw_nmi_watchdog_set_attr(struct perf_event_attr *wd_attr) { }
>> +
>> static int watchdog_nmi_enable(int cpu)
>> {
>> struct perf_event_attr *wd_attr;
>> @@ -371,6 +373,7 @@ static int watchdog_nmi_enable(int cpu)
>> /* Try to register using hardware perf events */
>> wd_attr = &wd_hw_attr;
>> wd_attr->sample_period = hw_nmi_get_sample_period(watchdog_thresh);
>> + hw_nmi_watchdog_set_attr(wd_attr);
>> event = perf_event_create_kernel_counter(wd_attr, cpu, NULL, watchdog_overflow_callback);
>> if (!IS_ERR(event)) {
>> printk(KERN_INFO "NMI watchdog enabled, takes one hw-pmu counter.\n");
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists