• Adrian Hunter's avatar
    perf intel-pt: Fix sample instruction bytes · c954eb72
    Adrian Hunter authored
    The decoder reports the current instruction if it was decoded. In some
    cases the current instruction is not decoded, in which case the instruction
    bytes length must be set to zero. Ensure that is always done.
    
    Note perf script can anyway get the instruction bytes for any samples where
    they are not present.
    
    Also note, that there is a redundant "ptq->insn_len = 0" statement which is
    not removed until a subsequent patch in order to make this patch apply
    cleanly to stable branches.
    
    Example:
    
    A machne that supports TSX is required. It will have flag "rtm". Kernel
    parameter tsx=on may be required.
    
     # for w in `cat /proc/cpuinfo | grep -m1 flags `;do echo $w | grep rtm ; done
     rtm
    
    Test program:
    
     #include <stdio.h>
     #include <immintrin.h>
    
     int main()
     {
            int x = 0;
    
            if (_xbegin() == _XBEGIN_STARTED) {
                    x = 1;
                    _xabort(1);
            } else {
                    printf("x = %d\n", x);
            }
            return 0;
     }
    
    Compile with -mrtm i.e.
    
     gcc -Wall -Wextra -mrtm xabort.c -o xabort
    
    Record:
    
     perf record -e intel_pt/cyc/u --filter 'filter main @ ./xabort' ./xabort
    
    Before:
    
     # perf script --itrace=xe -F+flags,+insn,-period --xed --ns
              xabort  1478 [007] 92161.431348581:   transactions:   x                              400b81 main+0x14 (/root/xabort)          mov $0xffffffff, %eax
              xabort  1478 [007] 92161.431348624:   transactions:   tx abrt                        400b93 main+0x26 (/root/xabort)          mov $0xffffffff, %eax
    
    After:
    
     # perf script --itrace=xe -F+flags,+insn,-period --xed --ns
              xabort  1478 [007] 92161.431348581:   transactions:   x                              400b81 main+0x14 (/root/xabort)          xbegin 0x6
              xabort  1478 [007] 92161.431348624:   transactions:   tx abrt                        400b93 main+0x26 (/root/xabort)          xabort $0x1
    
    Fixes: faaa8768 ("perf intel-pt/bts: Report instruction bytes and length in sample")
    Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: stable@vger.kernel.org
    Link: http://lore.kernel.org/lkml/20210519074515.9262-3-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    c954eb72
intel-pt.c 91.7 KB