aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/cpu/perf_event.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/cpu/perf_event.c')
-rw-r--r--arch/x86/kernel/cpu/perf_event.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
index b88645191fe5..895604f2e916 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -1521,6 +1521,8 @@ static int __init init_hw_perf_events(void)
1521 1521
1522 pr_cont("%s PMU driver.\n", x86_pmu.name); 1522 pr_cont("%s PMU driver.\n", x86_pmu.name);
1523 1523
1524 x86_pmu.attr_rdpmc = 1; /* enable userspace RDPMC usage by default */
1525
1524 for (quirk = x86_pmu.quirks; quirk; quirk = quirk->next) 1526 for (quirk = x86_pmu.quirks; quirk; quirk = quirk->next)
1525 quirk->func(); 1527 quirk->func();
1526 1528
@@ -1534,7 +1536,6 @@ static int __init init_hw_perf_events(void)
1534 __EVENT_CONSTRAINT(0, (1ULL << x86_pmu.num_counters) - 1, 1536 __EVENT_CONSTRAINT(0, (1ULL << x86_pmu.num_counters) - 1,
1535 0, x86_pmu.num_counters, 0, 0); 1537 0, x86_pmu.num_counters, 0, 0);
1536 1538
1537 x86_pmu.attr_rdpmc = 1; /* enable userspace RDPMC usage by default */
1538 x86_pmu_format_group.attrs = x86_pmu.format_attrs; 1539 x86_pmu_format_group.attrs = x86_pmu.format_attrs;
1539 1540
1540 if (x86_pmu.event_attrs) 1541 if (x86_pmu.event_attrs)
@@ -1820,9 +1821,12 @@ static ssize_t set_attr_rdpmc(struct device *cdev,
1820 if (ret) 1821 if (ret)
1821 return ret; 1822 return ret;
1822 1823
1824 if (x86_pmu.attr_rdpmc_broken)
1825 return -ENOTSUPP;
1826
1823 if (!!val != !!x86_pmu.attr_rdpmc) { 1827 if (!!val != !!x86_pmu.attr_rdpmc) {
1824 x86_pmu.attr_rdpmc = !!val; 1828 x86_pmu.attr_rdpmc = !!val;
1825 smp_call_function(change_rdpmc, (void *)val, 1); 1829 on_each_cpu(change_rdpmc, (void *)val, 1);
1826 } 1830 }
1827 1831
1828 return count; 1832 return count;