All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Borislav Petkov <bp@amd64.org>
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>,
	Borislav Petkov <borislav.petkov@amd.com>
Subject: Re: [PATCH 3/4] x86, mce: Add persistent MCE event
Date: Tue, 3 May 2011 08:44:01 +0200	[thread overview]
Message-ID: <20110503064401.GE7751@elte.hu> (raw)
In-Reply-To: <1304357691-14354-4-git-send-email-bp@amd64.org>


* 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.

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.

Thanks,

	Ingo

  reply	other threads:[~2011-05-03  6:44 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 [this message]
2011-05-03  7:18     ` Borislav Petkov
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=20110503064401.GE7751@elte.hu \
    --to=mingo@elte.hu \
    --cc=acme@infradead.org \
    --cc=borislav.petkov@amd.com \
    --cc=bp@amd64.org \
    --cc=fweisbec@gmail.com \
    --cc=linux-edac@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mchehab@redhat.com \
    --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 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.