Commit-ID: 5da382eb6ea37e2c49ef521c636d73f6ecc3fa81 Gitweb: http://git.kernel.org/tip/5da382eb6ea37e2c49ef521c636d73f6ecc3fa81 Author: Peter Zijlstra <peterz@xxxxxxxxxxxxx> AuthorDate: Mon, 28 Aug 2017 12:46:50 +0200 Committer: Ingo Molnar <mingo@xxxxxxxxxx> CommitDate: Tue, 29 Aug 2017 15:09:25 +0200 perf/x86: Fix caps/ for !Intel Move the 'max_precise' capability into generic x86 code where it belongs. This fixes a sysfs splat on !Intel systems where we fail to set x86_pmu_caps_group.atts. Reported-and-tested-by: Borislav Petkov <bp@xxxxxxx> Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> Reviewed-by: Andi Kleen <ak@xxxxxxxxxxxxxxx> Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: hpa@xxxxxxxxx Fixes: 22688d1c20f5 ("x86/perf: Export some PMU attributes in caps/ directory") Link: http://lkml.kernel.org/r/20170828104650.2u3rsim4jafyjzv2@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx> --- arch/x86/events/core.c | 33 ++++++++++++++++++++++++++++----- arch/x86/events/intel/core.c | 14 ++------------ 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c index d5f9809..73a6311 100644 --- a/arch/x86/events/core.c +++ b/arch/x86/events/core.c @@ -1757,10 +1757,7 @@ ssize_t x86_event_sysfs_show(char *page, u64 config, u64 event) } static struct attribute_group x86_pmu_attr_group; - -static struct attribute_group x86_pmu_caps_group = { - .name = "caps", -}; +static struct attribute_group x86_pmu_caps_group; static int __init init_hw_perf_events(void) { @@ -1808,7 +1805,14 @@ static int __init init_hw_perf_events(void) 0, x86_pmu.num_counters, 0, 0); x86_pmu_format_group.attrs = x86_pmu.format_attrs; - x86_pmu_caps_group.attrs = x86_pmu.caps_attrs; + + if (x86_pmu.caps_attrs) { + struct attribute **tmp; + + tmp = merge_attr(x86_pmu_caps_group.attrs, x86_pmu.caps_attrs); + if (!WARN_ON(!tmp)) + x86_pmu_caps_group.attrs = tmp; + } if (x86_pmu.event_attrs) x86_pmu_events_group.attrs = x86_pmu.event_attrs; @@ -2224,6 +2228,25 @@ static struct attribute_group x86_pmu_attr_group = { .attrs = x86_pmu_attrs, }; +static ssize_t max_precise_show(struct device *cdev, + struct device_attribute *attr, + char *buf) +{ + return snprintf(buf, PAGE_SIZE, "%d\n", x86_pmu_max_precise()); +} + +static DEVICE_ATTR_RO(max_precise); + +static struct attribute *x86_pmu_caps_attrs[] = { + &dev_attr_max_precise.attr, + NULL +}; + +static struct attribute_group x86_pmu_caps_group = { + .name = "caps", + .attrs = x86_pmu_caps_attrs, +}; + static const struct attribute_group *x86_pmu_attr_groups[] = { &x86_pmu_attr_group, &x86_pmu_format_group, diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c index 8fa2abd..829e89c 100644 --- a/arch/x86/events/intel/core.c +++ b/arch/x86/events/intel/core.c @@ -3820,19 +3820,9 @@ static ssize_t pmu_name_show(struct device *cdev, static DEVICE_ATTR_RO(pmu_name); -static ssize_t max_precise_show(struct device *cdev, - struct device_attribute *attr, - char *buf) -{ - return snprintf(buf, PAGE_SIZE, "%d\n", x86_pmu_max_precise()); -} - -static DEVICE_ATTR_RO(max_precise); - static struct attribute *intel_pmu_caps_attrs[] = { - &dev_attr_pmu_name.attr, - &dev_attr_max_precise.attr, - NULL + &dev_attr_pmu_name.attr, + NULL }; static struct attribute *intel_pmu_attrs[] = { -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |