Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Ingo Molnar. * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: watchdog: Quiet down the boot messages perf/x86: Fix broken LBR fixup code tracing: Have tracing_off() actually turn tracing off
This commit is contained in:
commit
ed21a66c18
3 changed files with 20 additions and 3 deletions
|
@ -22,7 +22,7 @@ copy_from_user_nmi(void *to, const void __user *from, unsigned long n)
|
||||||
void *map;
|
void *map;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (__range_not_ok(from, n, TASK_SIZE) == 0)
|
if (__range_not_ok(from, n, TASK_SIZE))
|
||||||
return len;
|
return len;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
|
@ -371,7 +371,7 @@ EXPORT_SYMBOL_GPL(tracing_on);
|
||||||
void tracing_off(void)
|
void tracing_off(void)
|
||||||
{
|
{
|
||||||
if (global_trace.buffer)
|
if (global_trace.buffer)
|
||||||
ring_buffer_record_on(global_trace.buffer);
|
ring_buffer_record_off(global_trace.buffer);
|
||||||
/*
|
/*
|
||||||
* This flag is only looked at when buffers haven't been
|
* This flag is only looked at when buffers haven't been
|
||||||
* allocated yet. We don't really care about the race
|
* allocated yet. We don't really care about the race
|
||||||
|
|
|
@ -372,6 +372,13 @@ static int watchdog(void *unused)
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_HARDLOCKUP_DETECTOR
|
#ifdef CONFIG_HARDLOCKUP_DETECTOR
|
||||||
|
/*
|
||||||
|
* People like the simple clean cpu node info on boot.
|
||||||
|
* Reduce the watchdog noise by only printing messages
|
||||||
|
* that are different from what cpu0 displayed.
|
||||||
|
*/
|
||||||
|
static unsigned long cpu0_err;
|
||||||
|
|
||||||
static int watchdog_nmi_enable(int cpu)
|
static int watchdog_nmi_enable(int cpu)
|
||||||
{
|
{
|
||||||
struct perf_event_attr *wd_attr;
|
struct perf_event_attr *wd_attr;
|
||||||
|
@ -390,11 +397,21 @@ static int watchdog_nmi_enable(int cpu)
|
||||||
|
|
||||||
/* Try to register using hardware perf events */
|
/* Try to register using hardware perf events */
|
||||||
event = perf_event_create_kernel_counter(wd_attr, cpu, NULL, watchdog_overflow_callback, NULL);
|
event = perf_event_create_kernel_counter(wd_attr, cpu, NULL, watchdog_overflow_callback, NULL);
|
||||||
|
|
||||||
|
/* save cpu0 error for future comparision */
|
||||||
|
if (cpu == 0 && IS_ERR(event))
|
||||||
|
cpu0_err = PTR_ERR(event);
|
||||||
|
|
||||||
if (!IS_ERR(event)) {
|
if (!IS_ERR(event)) {
|
||||||
pr_info("enabled, takes one hw-pmu counter.\n");
|
/* only print for cpu0 or different than cpu0 */
|
||||||
|
if (cpu == 0 || cpu0_err)
|
||||||
|
pr_info("enabled on all CPUs, permanently consumes one hw-PMU counter.\n");
|
||||||
goto out_save;
|
goto out_save;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* skip displaying the same error again */
|
||||||
|
if (cpu > 0 && (PTR_ERR(event) == cpu0_err))
|
||||||
|
return PTR_ERR(event);
|
||||||
|
|
||||||
/* vary the KERN level based on the returned errno */
|
/* vary the KERN level based on the returned errno */
|
||||||
if (PTR_ERR(event) == -EOPNOTSUPP)
|
if (PTR_ERR(event) == -EOPNOTSUPP)
|
||||||
|
|
Loading…
Reference in a new issue