From: Borislav Petkov <bp@amd64.org>
To: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <peterz@infradead.org>,
Arnaldo Carvalho de Melo <acme@infradead.org>,
Steven Rostedt <rostedt@goodmis.org>,
Frederic Weisbecker <fweisbec@gmail.com>,
Tony Luck <tony.luck@intel.com>,
Mauro Carvalho Chehab <mchehab@redhat.com>,
EDAC devel <linux-edac@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
"Petkov, Borislav" <Borislav.Petkov@amd.com>
Subject: Re: [PATCH 3/4] x86, mce: Add persistent MCE event
Date: Tue, 3 May 2011 09:18:33 +0200 [thread overview]
Message-ID: <20110503071833.GB18979@aftab> (raw)
In-Reply-To: <20110503064401.GE7751@elte.hu>
On Tue, May 03, 2011 at 02:44:01AM -0400, Ingo Molnar wrote:
>
> * Borislav Petkov <bp@amd64.org> wrote:
>
> > +static struct perf_event_attr pattr = {
> > + .type = PERF_TYPE_TRACEPOINT,
> > + .size = sizeof(pattr),
> > + .sample_type = PERF_SAMPLE_RAW,
> > + .persistent = 1,
> > +};
> > +
> > +static struct dentry *mce_add_event_debugfs(struct perf_event *event, int cpu)
> > +{
> > + char buf[14];
> > +
> > + sprintf(buf, "mce_record%d", cpu);
> > +
> > + return debugfs_create_file(buf, S_IRUGO | S_IWUSR,
> > + mce_get_debugfs_dir(),
> > + event, &perf_pers_fops);
> > +}
> > +
> > +#define MCE_BUF_PAGES 4
> > +
> > +static int mce_enable_perf_event_on_cpu(int cpu)
> > +{
> > + struct mce_tp_desc *d = &per_cpu(mce_event, cpu);
> > + int err = -EINVAL;
> > +
> > + d->event = perf_enable_persistent_event(&pattr, cpu, MCE_BUF_PAGES);
> > + if (IS_ERR(d->event)) {
> > + printk(KERN_ERR "MCE: Error enabling event on cpu %d\n", cpu);
> > + goto ret;
> > + }
> > +
> > + d->debugfs_entry = mce_add_event_debugfs(d->event, cpu);
> > + if (!d->debugfs_entry) {
> > + printk(KERN_ERR "MCE: Error adding event debugfs entry on cpu %d\n", cpu);
> > + goto disable;
> > + }
> > +
> > + return 0;
> > +
> > +disable:
> > + perf_disable_persistent_event(d->event, cpu);
> > +
> > +ret:
> > + return err;
> > +}
> > +
> > +static void mce_disable_perf_event_on_cpu(int cpu)
> > +{
> > + struct mce_tp_desc *d = &per_cpu(mce_event, cpu);
> > + debugfs_remove(d->debugfs_entry);
> > + perf_disable_persistent_event(d->event, cpu);
> > +}
> > +
> > +static __init int mcheck_init_persistent_event(void)
> > +{
> > + int cpu, err = 0;
> > +
> > + get_online_cpus();
> > +
> > + pattr.config = event_mce_record.event.type;
> > + pattr.sample_period = 1;
> > + pattr.wakeup_events = 1;
> > +
> > + for_each_online_cpu(cpu)
> > + if (mce_enable_perf_event_on_cpu(cpu))
> > + goto err_unwind;
> > +
> > + goto unlock;
> > +
> > +err_unwind:
> > + err = -EINVAL;
> > + for (--cpu; cpu >= 0; cpu--)
> > + mce_disable_perf_event_on_cpu(cpu);
> > +
> > +unlock:
> > + put_online_cpus();
> > +
> > + return err;
> > +}
> > +
> > +/*
> > + * This has to run after event_trace_init()
> > + */
> > +device_initcall(mcheck_init_persistent_event);
>
> Looks quite generic - shouldnt this bit be generalized a bit more into
> kernel/events/? When other places (and other platforms) want to add a
> persistent event they would thus have your new facility available as well.
Right, so the position of those seemed kinda arbitrary to me too due to
their partial genericity (that's not a real word :)).
But, the difference between persistent events and "normal" perf
events is that we export the former through debugfs, thus bypassing
sys_perf_event_open syscall and make them a rather different beast.
I'm guessing that when we move those to /sysfs, this mechanism will
have to change too so it might make sense to move that functionality to
persistent.c. Let me see what I can do.
>
> Except this bit:
>
> > /* Get notified when a cpu comes on/off. Be hotplug friendly. */
> > static int __cpuinit
> > mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
> > @@ -2068,6 +2154,7 @@ mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
> > mce_create_device(cpu);
> > if (threshold_cpu_callback)
> > threshold_cpu_callback(action, cpu);
> > + mce_enable_perf_event_on_cpu(cpu);
> > break;
> > case CPU_DEAD:
> > case CPU_DEAD_FROZEN:
> > @@ -2077,6 +2164,7 @@ mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
> > break;
> > case CPU_DOWN_PREPARE:
> > case CPU_DOWN_PREPARE_FROZEN:
> > + mce_disable_perf_event_on_cpu(cpu);
> > del_timer_sync(t);
> > smp_call_function_single(cpu, mce_disable_cpu, &action, 1);
> > break;
> > @@ -2088,6 +2176,7 @@ mce_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
> > add_timer_on(t, cpu);
> > }
> > smp_call_function_single(cpu, mce_reenable_cpu, &action, 1);
> > + mce_enable_perf_event_on_cpu(cpu);
> > break;
> > case CPU_POST_DEAD:
> > /* intentionally ignoring frozen here */
>
> which looks a bit x86 specific.
Yep.
Thanks.
--
Regards/Gruss,
Boris.
Advanced Micro Devices GmbH
Einsteinring 24, 85609 Dornach
General Managers: Alberto Bozzo, Andrew Bowd
Registration: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632
next prev parent reply other threads:[~2011-05-03 7:19 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-02 17:34 [PATCH 0/4] RAS daemon: kernel part Borislav Petkov
2011-05-02 17:34 ` [PATCH 1/4] perf: Start the restructuring Borislav Petkov
2011-05-02 17:34 ` [PATCH 2/4] perf: Add persistent event facilities Borislav Petkov
2011-05-03 6:40 ` Ingo Molnar
2011-05-03 6:48 ` Ingo Molnar
2011-05-03 7:12 ` Borislav Petkov
2011-05-03 8:22 ` Ingo Molnar
2011-05-03 12:51 ` [GIT PULL] Rename perf_event.c Borislav Petkov
2011-05-03 12:59 ` [PATCH 2/4] perf: Add persistent event facilities Frederic Weisbecker
2011-05-03 13:30 ` Borislav Petkov
2011-05-03 14:26 ` Borislav Petkov
2011-05-02 17:34 ` [PATCH 3/4] x86, mce: Add persistent MCE event Borislav Petkov
2011-05-03 6:44 ` Ingo Molnar
2011-05-03 7:18 ` Borislav Petkov [this message]
2011-05-03 8:27 ` Ingo Molnar
2011-05-03 15:14 ` Joe Perches
2011-05-03 15:22 ` Borislav Petkov
2011-05-03 15:32 ` Joe Perches
2011-05-03 15:34 ` Steven Rostedt
2011-05-03 15:42 ` Borislav Petkov
2011-05-02 17:34 ` [PATCH 4/4] x86, mce: Have MCE persistent event off by default for now Borislav Petkov
2011-05-03 6:45 ` Ingo Molnar
2011-05-03 7:23 ` Borislav Petkov
2011-05-03 8:17 ` Ingo Molnar
2011-05-03 17:17 ` Luck, Tony
2011-05-03 19:52 ` Borislav Petkov
2011-05-03 19:56 ` Ingo Molnar
2011-05-04 6:58 ` Ingo Molnar
2011-05-04 21:40 ` Luck, Tony
2011-05-05 1:34 ` Arnaldo Carvalho de Melo
2011-05-05 6:39 ` Ingo Molnar
2011-05-05 7:17 ` Borislav Petkov
2011-05-05 7:33 ` Ingo Molnar
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=20110503071833.GB18979@aftab \
--to=bp@amd64.org \
--cc=Borislav.Petkov@amd.com \
--cc=acme@infradead.org \
--cc=fweisbec@gmail.com \
--cc=linux-edac@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mchehab@redhat.com \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tony.luck@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox