perf intel-pt: Allow for a guest kernel address filter
authorAdrian Hunter <adrian.hunter@intel.com>
Thu, 18 Feb 2021 09:57:58 +0000 (11:57 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 18 Feb 2021 19:15:08 +0000 (16:15 -0300)
Handling TIP.PGD for an address filter for a guest kernel is the same as a
host kernel, but user space decoding, and hence address filters, are not
supported.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Andi Kleen <ak@linux.intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: https://lore.kernel.org/r/20210218095801.19576-9-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/intel-pt.c

index 29d8717..546d512 100644 (file)
@@ -792,8 +792,14 @@ static int __intel_pt_pgd_ip(uint64_t ip, void *data)
        u8 cpumode;
        u64 offset;
 
-       if (ip >= ptq->pt->kernel_start)
+       if (ptq->state->to_nr) {
+               if (intel_pt_guest_kernel_ip(ip))
+                       return intel_pt_match_pgd_ip(ptq->pt, ip, ip, NULL);
+               /* No support for decoding guest user space */
+               return -EINVAL;
+       } else if (ip >= ptq->pt->kernel_start) {
                return intel_pt_match_pgd_ip(ptq->pt, ip, ip, NULL);
+       }
 
        cpumode = PERF_RECORD_MISC_USER;