From: Eric Dumazet <dada1@cosmosbay.com>
To: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Andi Kleen <andi@firstfloor.org>,
Robert Richter <robert.richter@amd.com>,
Ingo Molnar <mingo@elte.hu>, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] oprofile: re-arm APIC_DM_NMI in ppro_check_ctrs()
Date: Mon, 10 Nov 2008 17:19:20 +0100 [thread overview]
Message-ID: <49185F08.9030705@cosmosbay.com> (raw)
In-Reply-To: <20081110161133.GB16522@localhost>
Cyrill Gorcunov a écrit :
> [Eric Dumazet - Mon, Nov 10, 2008 at 03:23:00PM +0100]
>> Andi Kleen a écrit :
>>> Eric Dumazet <dada1@cosmosbay.com> writes:
>>>
>>>> diff --git a/arch/x86/oprofile/op_model_ppro.c b/arch/x86/oprofile/op_model_ppro.c
>>>> index 3f1b81a..716d26f 100644
>>>> --- a/arch/x86/oprofile/op_model_ppro.c
>>>> +++ b/arch/x86/oprofile/op_model_ppro.c
>>>> @@ -69,7 +69,7 @@ static void ppro_setup_ctrs(struct op_msrs const * const msrs)
>>>> int i;
>>>> if (!reset_value) {
>>>> - reset_value = kmalloc(sizeof(unsigned) * num_counters,
>>>> + reset_value = kmalloc(sizeof(reset_value[0]) * num_counters,
>>> Thanks for tracking this down.
>>>
>>> But that still doesn't explain why 2.6.27 fails too?
>> Desesperatly Seeking Oprofile, next round.
>>
>> I know *nothing* about APIC but spent few hours to try several tricks
>> and finally found something.
>>
>> It solved my problem : oprofile can run several hours without
>> any freeze of NMI on any core.
>>
>> # grep NMI /proc/interrupts
>> NMI: 10902884 9635871 10333815 8372989 7971483 8298373 8877495 10206963 Non-maskable interrupts
>> ...
>> # grep NMI /proc/interrupts
>> NMI: 15518834 14340713 15038694 13078235 12676585 13003394 13582115 14912146 Non-maskable interrupts
>>
>>
>> Can anybody understand and explain what is happening ?
>>
>> Is it a software or hardware problem ?
>>
>> [PATCH] oprofile: re-arm APIC_DM_NMI in ppro_check_ctrs()
>>
>> While using oprofile on my HP BL460c G1, (two quad core intel E5450 CPU),
>> I noticed that one CPU after the other could not get anymore NMI.
>>
>> After a while, all cores where blocked (ie not generating events for oprofile)
>> I tried all major linux versions and all where affected by this freeze.
>>
>> I found that we have to re-arm APIC_DM_NMI *before* writing to MSR counter
>> when we get event notification.
>>
>> Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
>> arch/x86/oprofile/op_model_ppro.c | 8 +++++---
>> 1 files changed, 5 insertions(+), 3 deletions(-)
>
> | diff --git a/arch/x86/oprofile/op_model_ppro.c b/arch/x86/oprofile/op_model_ppro.c
> | index 3f1b81a..7b142da 100644
> | --- a/arch/x86/oprofile/op_model_ppro.c
> | +++ b/arch/x86/oprofile/op_model_ppro.c
> | @@ -132,13 +132,15 @@ static int ppro_check_ctrs(struct pt_regs * const regs,
> | rdmsrl(msrs->counters[i].addr, val);
> | if (CTR_OVERFLOWED(val)) {
> | oprofile_add_sample(regs, i);
> | + /*
> | + * We need to unmask the apic vector *before*
> | + * writing reset_value to msr counter
> | + */
> | + apic_write(APIC_LVTPC, APIC_DM_NMI);
> | wrmsrl(msrs->counters[i].addr, -reset_value[i]);
> | }
> | }
> |
> | - /* Only P6 based Pentium M need to re-unmask the apic vector but it
> | - * doesn't hurt other P6 variant */
> | - apic_write(APIC_LVTPC, apic_read(APIC_LVTPC) & ~APIC_LVT_MASKED);
> |
> | /* We can't work out if we really handled an interrupt. We
> | * might have caught a *second* counter just after overflowing
>
> Hi Eric,
>
> for the record
>
> apic_write(APIC_LVTPC, APIC_DM_NMI);
>
> is not just 'unmask' but also *zeroify* (not sure if I wrote this
> word right :) all fields when the origianl code was just 'unmasking'
> TPC register
>
> apic_write(APIC_LVTPC, apic_read(APIC_LVTPC) & ~APIC_LVT_MASKED);
>
> that is why apic_read() was in former.
>
Well, given that APIC_LVTPC is initialized by oprofile init to value APIC_DM_NMI,
I avoid an apic_read() and just write APIC_DM_NMI again...
Presumably, apic_read(APIC_LVTPC) should return APIC_DM_NMI or APIC_DM_NMI|APIC_LVT_MASKED
Thanks
next prev parent reply other threads:[~2008-11-10 16:19 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-07 17:13 [git pull] OProfile fixes for v2.6.28 Robert Richter
2008-11-07 18:22 ` Ingo Molnar
2008-11-10 8:05 ` Eric Dumazet
2008-11-10 8:43 ` Andi Kleen
2008-11-10 9:01 ` Eric Dumazet
2008-11-10 14:23 ` [PATCH] oprofile: re-arm APIC_DM_NMI in ppro_check_ctrs() Eric Dumazet
2008-11-10 15:49 ` Andi Kleen
2008-11-10 15:50 ` Eric Dumazet
2008-11-10 17:46 ` Andi Kleen
2008-11-11 8:32 ` Eric Dumazet
2008-11-17 17:33 ` Robert Richter
2008-11-17 18:25 ` Andi Kleen
2008-11-18 8:57 ` Robert Richter
2008-11-10 16:11 ` Cyrill Gorcunov
2008-11-10 16:19 ` Eric Dumazet [this message]
2008-11-10 16:31 ` Cyrill Gorcunov
2008-11-17 17:57 ` [git pull] OProfile fixes for v2.6.28 Robert Richter
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=49185F08.9030705@cosmosbay.com \
--to=dada1@cosmosbay.com \
--cc=andi@firstfloor.org \
--cc=gorcunov@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=robert.richter@amd.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.