mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-04 18:19:28 +09:00
perf/x86/intel: Hide TSX events when RTM is not supported
commit58ba4d5a25upstream. 0day testing reported a perf test regression on Haswell systems without RTM. Commita5df70c35hides the in_tx/in_tx_cp attributes when RTM is not available, but the TSX events are still available in sysfs. Due to the missing attributes the event parser fails on those files. Don't show the TSX events in sysfs when RTM is not available on Haswell/Broadwell/Skylake. Fixes:a5df70c354(perf/x86: Only show format attributes when supported) Reported-by: kernel test robot <xiaolong.ye@intel.com> Tested-by: Jin Yao <yao.jin@linux.intel.com> Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Peter Zijlstra <peterz@infradead.org> Link: https://lkml.kernel.org/r/20171109000718.14137-1-andi@firstfloor.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f9a64e23a9
commit
c35be33486
@@ -3730,6 +3730,19 @@ EVENT_ATTR_STR(cycles-t, cycles_t, "event=0x3c,in_tx=1");
|
||||
EVENT_ATTR_STR(cycles-ct, cycles_ct, "event=0x3c,in_tx=1,in_tx_cp=1");
|
||||
|
||||
static struct attribute *hsw_events_attrs[] = {
|
||||
EVENT_PTR(mem_ld_hsw),
|
||||
EVENT_PTR(mem_st_hsw),
|
||||
EVENT_PTR(td_slots_issued),
|
||||
EVENT_PTR(td_slots_retired),
|
||||
EVENT_PTR(td_fetch_bubbles),
|
||||
EVENT_PTR(td_total_slots),
|
||||
EVENT_PTR(td_total_slots_scale),
|
||||
EVENT_PTR(td_recovery_bubbles),
|
||||
EVENT_PTR(td_recovery_bubbles_scale),
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct attribute *hsw_tsx_events_attrs[] = {
|
||||
EVENT_PTR(tx_start),
|
||||
EVENT_PTR(tx_commit),
|
||||
EVENT_PTR(tx_abort),
|
||||
@@ -3742,18 +3755,16 @@ static struct attribute *hsw_events_attrs[] = {
|
||||
EVENT_PTR(el_conflict),
|
||||
EVENT_PTR(cycles_t),
|
||||
EVENT_PTR(cycles_ct),
|
||||
EVENT_PTR(mem_ld_hsw),
|
||||
EVENT_PTR(mem_st_hsw),
|
||||
EVENT_PTR(td_slots_issued),
|
||||
EVENT_PTR(td_slots_retired),
|
||||
EVENT_PTR(td_fetch_bubbles),
|
||||
EVENT_PTR(td_total_slots),
|
||||
EVENT_PTR(td_total_slots_scale),
|
||||
EVENT_PTR(td_recovery_bubbles),
|
||||
EVENT_PTR(td_recovery_bubbles_scale),
|
||||
NULL
|
||||
};
|
||||
|
||||
static __init struct attribute **get_hsw_events_attrs(void)
|
||||
{
|
||||
return boot_cpu_has(X86_FEATURE_RTM) ?
|
||||
merge_attr(hsw_events_attrs, hsw_tsx_events_attrs) :
|
||||
hsw_events_attrs;
|
||||
}
|
||||
|
||||
static ssize_t freeze_on_smi_show(struct device *cdev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
@@ -4182,7 +4193,7 @@ __init int intel_pmu_init(void)
|
||||
|
||||
x86_pmu.hw_config = hsw_hw_config;
|
||||
x86_pmu.get_event_constraints = hsw_get_event_constraints;
|
||||
x86_pmu.cpu_events = hsw_events_attrs;
|
||||
x86_pmu.cpu_events = get_hsw_events_attrs();
|
||||
x86_pmu.lbr_double_abort = true;
|
||||
extra_attr = boot_cpu_has(X86_FEATURE_RTM) ?
|
||||
hsw_format_attr : nhm_format_attr;
|
||||
@@ -4221,7 +4232,7 @@ __init int intel_pmu_init(void)
|
||||
|
||||
x86_pmu.hw_config = hsw_hw_config;
|
||||
x86_pmu.get_event_constraints = hsw_get_event_constraints;
|
||||
x86_pmu.cpu_events = hsw_events_attrs;
|
||||
x86_pmu.cpu_events = get_hsw_events_attrs();
|
||||
x86_pmu.limit_period = bdw_limit_period;
|
||||
extra_attr = boot_cpu_has(X86_FEATURE_RTM) ?
|
||||
hsw_format_attr : nhm_format_attr;
|
||||
@@ -4279,7 +4290,7 @@ __init int intel_pmu_init(void)
|
||||
extra_attr = boot_cpu_has(X86_FEATURE_RTM) ?
|
||||
hsw_format_attr : nhm_format_attr;
|
||||
extra_attr = merge_attr(extra_attr, skl_format_attr);
|
||||
x86_pmu.cpu_events = hsw_events_attrs;
|
||||
x86_pmu.cpu_events = get_hsw_events_attrs();
|
||||
intel_pmu_pebs_data_source_skl(
|
||||
boot_cpu_data.x86_model == INTEL_FAM6_SKYLAKE_X);
|
||||
pr_cont("Skylake events, ");
|
||||
|
||||
Reference in New Issue
Block a user