@@ -963,40 +963,42 @@ static u64 pebs_update_adaptive_cfg(stru u64 pebs_data_cfg = 0; bool gprs, tsx_weight; - if ((sample_type & ~(PERF_SAMPLE_IP|PERF_SAMPLE_TIME)) || - attr->precise_ip < 2) { + if (!(sample_type & ~(PERF_SAMPLE_IP|PERF_SAMPLE_TIME)) && + attr->precise_ip > 1) + return pebs_data_cfs;
Sorry, there are two typos. I didn't find in the previous email. Should be pebs_data_cfg.
- if (sample_type & PERF_PEBS_MEMINFO_TYPE) - pebs_data_cfg |= PEBS_DATACFG_MEMINFO; + if (sample_type & PERF_PEBS_MEMINFO_TYPE) + pebs_data_cfg |= PEBS_DATACFG_MEMINFO; + /* + * We need GPRs when: + * + user requested them + * + precise_ip < 2 for the non event IP + * + For RTM TSX weight we need GPRs for the abort code. + */ + gprs = (sample_type & PERF_SAMPLE_REGS_INTR) && + (attr->sample_regs_intr & PEBS_GPRS_REGS); + + tsx_weight = (sample_type & PERF_SAMPLE_WEIGHT) && + ((attr->config & INTEL_ARCH_EVENT_MASK) == + x86_pmu.rtm_abort_event); + + if (gprs || (attr->precise_ip < 2) || tsx_weight) + pebs_data_cfg |= PEBS_DATACFG_GPRS; + + if ((sample_type & PERF_SAMPLE_REGS_INTR) && + (attr->sample_regs_intr & PERF_XMM_REGS))
Should be PEBS_XMM_REGS. Thanks, Kan

