@@ -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

Reply via email to