1. Mar 30, 2017
  2. Mar 29, 2017
    • Linus Torvalds's avatar
      Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost · fe82203b
      Linus Torvalds authored
      Pull virtio fixes from Michael Tsirkin:
       "Fixes to multiple issues in virtio.
      
        Most notably a regression fix for crashes reported by Fedora users.
        Hibernate is still reportedly broken, working on it"
      
      * tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost:
        virtio_balloon: prevent uninitialized variable use
        virtio-balloon: use actual number of stats for stats queue buffers
        virtio_balloon: init 1st buffer in stats vq
        virtio_pci: fix out of bound access for msix_names
      fe82203b
    • Linus Torvalds's avatar
      Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm · 050fc52d
      Linus Torvalds authored
      Pull KVM fixes from Paolo Bonzini:
       "All x86-specific, apart from some arch-independent syzkaller fixes"
      
      * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
        KVM: x86: cleanup the page tracking SRCU instance
        KVM: nVMX: fix nested EPT detection
        KVM: pci-assign: do not map smm memory slot pages in vt-d page tables
        KVM: kvm_io_bus_unregister_dev() should never fail
        KVM: VMX: Fix enable VPID conditions
        KVM: nVMX: Fix nested VPID vmx exec control
        KVM: x86: correct async page present tracepoint
        kvm: vmx: Flush TLB when the APIC-access address changes
        KVM: x86: use pic/ioapic destructor when destroy vm
        KVM: x86: check existance before destroy
        KVM: x86: clear bus pointer when destroyed
        KVM: Documentation: document MCE ioctls
        KVM: nVMX: don't reset kvm mmu twice
        PTP: fix ptr_ret.cocci warnings
        kvm: fix usage of uninit spinlock in avic_vm_destroy()
        KVM: VMX: downgrade warning on unexpected exit code
      050fc52d
    • Arnd Bergmann's avatar
      virtio_balloon: prevent uninitialized variable use · f0bb2d50
      Arnd Bergmann authored
      The latest gcc-7.0.1 snapshot reports a new warning:
      
      virtio/virtio_balloon.c: In function 'update_balloon_stats':
      virtio/virtio_balloon.c:258:26: error: 'events[2]' is used uninitialized in this function [-Werror=uninitialized]
      virtio/virtio_balloon.c:260:26: error: 'events[3]' is used uninitialized in this function [-Werror=uninitialized]
      virtio/virtio_balloon.c:261:56: error: 'events[18]' is used uninitialized in this function [-Werror=uninitialized]
      virtio/virtio_balloon.c:262:56: error: 'events[17]' is used uninitialized in this function [-Werror=uninitialized]
      
      This seems absolutely right, so we should add an extra check to
      prevent copying uninitialized stack data into the statistics.
      >From all I can tell, this has been broken since the statistics code
      was originally added in 2.6.34.
      
      Fixes: 9564e138
      
       ("virtio: Add memory statistics reporting to the balloon driver (V4)")
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarLadi Prosek <lprosek@redhat.com>
      Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      f0bb2d50
    • Ladi Prosek's avatar
      virtio-balloon: use actual number of stats for stats queue buffers · 9646b26e
      Ladi Prosek authored
      
      
      The virtio balloon driver contained a not-so-obvious invariant that
      update_balloon_stats has to update exactly VIRTIO_BALLOON_S_NR counters
      in order to send valid stats to the host. This commit fixes it by having
      update_balloon_stats return the actual number of counters, and its
      callers use it when pushing buffers to the stats virtqueue.
      
      Note that it is still out of spec to change the number of counters
      at run-time. "Driver MUST supply the same subset of statistics in all
      buffers submitted to the statsq."
      
      Suggested-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarLadi Prosek <lprosek@redhat.com>
      Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      9646b26e
    • Ladi Prosek's avatar
      virtio_balloon: init 1st buffer in stats vq · fc865322
      Ladi Prosek authored
      
      
      When init_vqs runs, virtio_balloon.stats is either uninitialized or
      contains stale values. The host updates its state with garbage data
      because it has no way of knowing that this is just a marker buffer
      used for signaling.
      
      This patch updates the stats before pushing the initial buffer.
      
      Alternative fixes:
      * Push an empty buffer in init_vqs. Not easily done with the current
        virtio implementation and violates the spec "Driver MUST supply the
        same subset of statistics in all buffers submitted to the statsq".
      * Push a buffer with invalid tags in init_vqs. Violates the same
        spec clause, plus "invalid tag" is not really defined.
      
      Note: the spec says:
      	When using the legacy interface, the device SHOULD ignore all values in
      	the first buffer in the statsq supplied by the driver after device
      	initialization. Note: Historically, drivers supplied an uninitialized
      	buffer in the first buffer.
      
      Unfortunately QEMU does not seem to implement the recommendation
      even for the legacy interface.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarLadi Prosek <lprosek@redhat.com>
      Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      fc865322
    • Jason Wang's avatar
      virtio_pci: fix out of bound access for msix_names · de85ec8b
      Jason Wang authored
      Fedora has received multiple reports of crashes when running
      4.11 as a guest
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1430297
      https://bugzilla.redhat.com/show_bug.cgi?id=1434462
      https://bugzilla.kernel.org/show_bug.cgi?id=194911
      https://bugzilla.redhat.com/show_bug.cgi?id=1433899
      
      The crashes are not always consistent but they are generally
      some flavor of oops or GPF in virtio related code. Multiple people
      have done bisections (Thank you Thorsten Leemhuis and
      Richard W.M. Jones) and found this commit to be at fault
      
      07ec5148 is the first bad commit
      commit 07ec5148
      Author: Christoph Hellwig <hch@lst.de>
      Date:   Sun Feb 5 18:15:19 2017 +0100
      
          virtio_pci: use shared interrupts for virtqueues
      
      The issue seems to be an out of bounds access to the msix_names
      array corrupting kernel memory.
      
      Fixes: 07ec5148
      
       ("virtio_pci: use shared interrupts for virtqueues")
      Reported-by: default avatarLaura Abbott <labbott@redhat.com>
      Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
      Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Tested-by: default avatarRichard W.M. Jones <rjones@redhat.com>
      Tested-by: default avatarThorsten Leemhuis <linux@leemhuis.info>
      de85ec8b
  3. Mar 28, 2017
    • Paolo Bonzini's avatar
      KVM: x86: cleanup the page tracking SRCU instance · 2beb6dad
      Paolo Bonzini authored
      
      
      SRCU uses a delayed work item.  Skip cleaning it up, and
      the result is use-after-free in the work item callbacks.
      
      Reported-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Suggested-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Cc: stable@vger.kernel.org
      Fixes: 0eb05bf2
      
      
      Reviewed-by: default avatarXiao Guangrong <xiaoguangrong.eric@gmail.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      2beb6dad
    • Ladi Prosek's avatar
      KVM: nVMX: fix nested EPT detection · 7ad658b6
      Ladi Prosek authored
      The nested_ept_enabled flag introduced in commit 7ca29de2 was not
      computed correctly. We are interested only in L1's EPT state, not the
      the combined L0+L1 value.
      
      In particular, if L0 uses EPT but L1 does not, nested_ept_enabled must
      be false to make sure that PDPSTRs are loaded based on CR3 as usual,
      because the special case described in 26.3.2.4 Loading Page-Directory-
      Pointer-Table Entries does not apply.
      
      Fixes: 7ca29de2
      
       ("KVM: nVMX: fix CR3 load if L2 uses PAE paging and EPT")
      Cc: qemu-stable@nongnu.org
      Reported-by: default avatarWanpeng Li <wanpeng.li@hotmail.com>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Signed-off-by: default avatarLadi Prosek <lprosek@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      7ad658b6
    • Herongguang (Stephen)'s avatar
      KVM: pci-assign: do not map smm memory slot pages in vt-d page tables · 0292e169
      Herongguang (Stephen) authored
      
      
      or VM memory are not put thus leaked in kvm_iommu_unmap_memslots() when
      destroy VM.
      
      This is consistent with current vfio implementation.
      
      Signed-off-by: default avatarherongguang <herongguang.he@huawei.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      0292e169
    • Ingo Molnar's avatar
      Merge tag 'perf-core-for-mingo-4.12-20170327' of... · 3906a13a
      Ingo Molnar authored
      Merge tag 'perf-core-for-mingo-4.12-20170327' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux
      
       into perf/core
      
      Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:
      
      New features:
      
       - Handle inline functions in callchains (Jin Yao)
      
       - Enable sorting by srcline as key (Milian Wolff)
      
      Fixes:
      
       - Fix no_size logic in addr_filter__resolve_kernel_syms() in the
         auxtrace code (Adrian Hunter)
      
       - Fix some thread refcount leaks in 'perf trace' (Arnaldo Carvalho de Melo)
      
       - Fix divide by zero when calculating percent for an event in a group in
         the annotate by source line code (Taeung Song)
      
       - build-id files now aren't anymore symlinks, their parent directories
         are, so readlink the later (Taeung Song)
      
       - Assorted fixes for null termination problems, mostly related to
         readlink, detected by valgrind (Tommi Rantala)
      
      Infrastructure changes:
      
       - Make vfs_getname probe point logic in 'perf trace' more robust
         wrt length of pathname (Arnaldo Carvalho de Melo)
      
       - Remove unused 'prefix' parameter from builtins main functions (Arnaldo Carvalho de Melo)
      
       - Show 'perf list sdt' option in man page (Ravi Bangoria)
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      3906a13a
    • Ingo Molnar's avatar
      d652f4bb
    • Tommi Rantala's avatar
      perf utils: Readlink /proc/self/exe to find the perf binary · 55f77128
      Tommi Rantala authored
      
      
      Simplification: it is easier to open /proc/self/exe than /proc/$pid/exe.
      
      Signed-off-by: default avatarTommi Rantala <tommi.t.rantala@nokia.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20170322130624.21881-7-tommi.t.rantala@nokia.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      55f77128
    • Tommi Rantala's avatar
      perf utils: Null terminate buf in read_ftrace_printk() · d4b364df
      Tommi Rantala authored
      
      
      Ensure that the string that we read from the data file is null terminated.
      
      Valgrind was complaining:
      
        ==31357== Invalid read of size 1
        ==31357==    at 0x4EC8C1: __strtok_r_1c (string2.h:200)
        ==31357==    by 0x4EC8C1: parse_ftrace_printk (trace-event-parse.c:161)
        ==31357==    by 0x4F82A8: read_ftrace_printk (trace-event-read.c:204)
        ==31357==    by 0x4F82A8: trace_report (trace-event-read.c:468)
        ==31357==    by 0x4CD552: process_tracing_data (header.c:1576)
        ==31357==    by 0x4D3397: perf_file_section__process (header.c:2705)
        ==31357==    by 0x4D3397: perf_header__process_sections (header.c:2488)
        ==31357==    by 0x4D3397: perf_session__read_header (header.c:2925)
        ==31357==    by 0x4E71E2: perf_session__open (session.c:32)
        ==31357==    by 0x4E71E2: perf_session__new (session.c:139)
        ==31357==    by 0x429F5D: cmd_annotate (builtin-annotate.c:472)
        ==31357==    by 0x497150: run_builtin (perf.c:359)
        ==31357==    by 0x428CE0: handle_internal_command (perf.c:421)
        ==31357==    by 0x428CE0: run_argv (perf.c:467)
        ==31357==    by 0x428CE0: main (perf.c:614)
        ==31357==  Address 0x8ac0efb is 0 bytes after a block of size 1,963 alloc'd
        ==31357==    at 0x4C2DB9D: malloc (vg_replace_malloc.c:299)
        ==31357==    by 0x4F827B: read_ftrace_printk (trace-event-read.c:195)
        ==31357==    by 0x4F827B: trace_report (trace-event-read.c:468)
        ==31357==    by 0x4CD552: process_tracing_data (header.c:1576)
        ==31357==    by 0x4D3397: perf_file_section__process (header.c:2705)
        ==31357==    by 0x4D3397: perf_header__process_sections (header.c:2488)
        ==31357==    by 0x4D3397: perf_session__read_header (header.c:2925)
        ==31357==    by 0x4E71E2: perf_session__open (session.c:32)
        ==31357==    by 0x4E71E2: perf_session__new (session.c:139)
        ==31357==    by 0x429F5D: cmd_annotate (builtin-annotate.c:472)
        ==31357==    by 0x497150: run_builtin (perf.c:359)
        ==31357==    by 0x428CE0: handle_internal_command (perf.c:421)
        ==31357==    by 0x428CE0: run_argv (perf.c:467)
        ==31357==    by 0x428CE0: main (perf.c:614)
      
      Signed-off-by: default avatarTommi Rantala <tommi.t.rantala@nokia.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20170322130624.21881-6-tommi.t.rantala@nokia.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d4b364df
    • Tommi Rantala's avatar
      perf utils: use sizeof(buf) - 1 in readlink() call · b7126ef7
      Tommi Rantala authored
      
      
      Ensure that we have space for the null byte in buf.
      
      Signed-off-by: default avatarTommi Rantala <tommi.t.rantala@nokia.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20170322130624.21881-5-tommi.t.rantala@nokia.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      b7126ef7
    • Tommi Rantala's avatar
      perf tests: Do not assume that readlink() returns a null terminated string · 0e6ba115
      Tommi Rantala authored
      
      
      Ensure that the string in buf is null terminated.
      
      Signed-off-by: default avatarTommi Rantala <tommi.t.rantala@nokia.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20170322130624.21881-4-tommi.t.rantala@nokia.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      0e6ba115
    • Tommi Rantala's avatar
      perf buildid: Do not assume that readlink() returns a null terminated string · 5a234211
      Tommi Rantala authored
      
      
      Valgrind was complaining:
      
        $ valgrind ./perf list >/dev/null
        ==11643== Memcheck, a memory error detector
        ==11643== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
        ==11643== Using Valgrind-3.12.0 and LibVEX; rerun with -h for copyright info
        ==11643== Command: ./perf list
        ==11643==
        ==11643== Conditional jump or move depends on uninitialised value(s)
        ==11643==    at 0x4C30620: rindex (vg_replace_strmem.c:199)
        ==11643==    by 0x49DAA9: build_id_cache__origname (build-id.c:198)
        ==11643==    by 0x49E1C7: build_id_cache__valid_id (build-id.c:222)
        ==11643==    by 0x49E1C7: build_id_cache__list_all (build-id.c:507)
        ==11643==    by 0x4B9C8F: print_sdt_events (parse-events.c:2067)
        ==11643==    by 0x4BB0B3: print_events (parse-events.c:2313)
        ==11643==    by 0x439501: cmd_list (builtin-list.c:53)
        ==11643==    by 0x497150: run_builtin (perf.c:359)
        ==11643==    by 0x428CE0: handle_internal_command (perf.c:421)
        ==11643==    by 0x428CE0: run_argv (perf.c:467)
        ==11643==    by 0x428CE0: main (perf.c:614)
        [...]
      
      Additionally, a zero length result from readlink() is not very interesting.
      
      Signed-off-by: default avatarTommi Rantala <tommi.t.rantala@nokia.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20170322130624.21881-3-tommi.t.rantala@nokia.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      5a234211
    • Tommi Rantala's avatar
      perf buildid: Do not update SDT cache with null filename · 2ccc2202
      Tommi Rantala authored
      
      
      Valgrind was complaining:
      
        ==2633== Syscall param open(filename) points to unaddressable byte(s)
        ==2633==    at 0x5281CC0: __open_nocancel (syscall-template.S:84)
        ==2633==    by 0x537D38: open (fcntl2.h:53)
        ==2633==    by 0x537D38: get_sdt_note_list (symbol-elf.c:2017)
        ==2633==    by 0x5396FD: probe_cache__scan_sdt (probe-file.c:700)
        ==2633==    by 0x49EA2C: build_id_cache__add_sdt_cache (build-id.c:625)
        ==2633==    by 0x49EA2C: build_id_cache__add_s (build-id.c:697)
        ==2633==    by 0x49EE72: build_id_cache__add_b (build-id.c:717)
        ==2633==    by 0x49EE72: dso__cache_build_id (build-id.c:782)
        ==2633==    by 0x49F190: __dsos__cache_build_ids (build-id.c:793)
        ==2633==    by 0x49F190: machine__cache_build_ids (build-id.c:801)
        ==2633==    by 0x49F190: perf_session__cache_build_ids (build-id.c:815)
        ==2633==    by 0x4CD4F2: write_build_id (header.c:165)
        ==2633==    by 0x4D26F7: do_write_feat (header.c:2296)
        ==2633==    by 0x4D26F7: perf_header__adds_write (header.c:2335)
        ==2633==    by 0x4D26F7: perf_session__write_header (header.c:2414)
        ==2633==    by 0x43B324: __cmd_record (builtin-record.c:1154)
        ==2633==    by 0x43B324: cmd_record (builtin-record.c:1839)
        ==2633==    by 0x455A07: __cmd_record (builtin-kmem.c:1868)
        ==2633==    by 0x455A07: cmd_kmem (builtin-kmem.c:1944)
        ==2633==    by 0x497150: run_builtin (perf.c:359)
        ==2633==    by 0x428CE0: handle_internal_command (perf.c:421)
        ==2633==    by 0x428CE0: run_argv (perf.c:467)
        ==2633==    by 0x428CE0: main (perf.c:614)
        ==2633==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
      
      Signed-off-by: default avatarTommi Rantala <tommi.t.rantala@nokia.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Tommi Rantala <tommi.t.rantala@nokia.com>
      Link: http://lkml.kernel.org/r/20170322130624.21881-2-tommi.t.rantala@nokia.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      2ccc2202
    • Linus Torvalds's avatar
      Merge tag 'edac_for_4.11_2' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp · ad0376eb
      Linus Torvalds authored
      Pull EDAC updates from Borislav Petkov:
       "A new EDAC driver for the Pondicherry2 memory controller IP found in
        the Intel Apollo Lake platform and the Denverton microserver.
      
        Plus small fixlets.
      
        Normally I had this queued for 4.12 but Tony requested for the
        pnd2_edac driver to possibly land in 4.11 therefore I'm sending it to
        you now.
      
        It is a driver for new hardware which people don't have yet so it
        shouldn't cause any regressions.
      
        The couple of patches ontop of it show that Qiuxu actually did test it
        on the hardware he has access to :)"
      
      * tag 'edac_for_4.11_2' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp:
        EDAC, pnd2_edac: Fix reported DIMM number
        EDAC, pnd2_edac: Fix !EDAC_DEBUG build
        EDAC: Select DEBUG_FS
        EDAC, pnd2_edac: Add new EDAC driver for Intel SoC platforms
        EDAC, i5000, i5400: Fix use of MTR_DRAM_WIDTH macro
        EDAC, xgene: Fix wrongly spelled "procesing"
      ad0376eb
    • Taeung Song's avatar
      perf annotate: Fix a bug of division by zero when calculating percent · 2e933b12
      Taeung Song authored
      
      
      Currently perf-annotate with --print-line can print
      -nan(0x8000000000000) because of division by zero when calculating
      percent. The division by zero happens when a sum of samples is zero in
      symbol__get_source_line(), so fix it.
      
      For example:
      
      After running 'perf record' like below,
      
          $ perf record -e "{cycles,page-faults,branch-misses}" ./a.out
      
      Before:
      
          $ perf annotate --stdio -l
      
        Sorted summary for file /home/taeung/workspace/a.out
        ----------------------------------------------
      
         32.89    -nan    7.04 a.c:38
         25.14    -nan    0.00 a.c:34
         16.26    -nan   56.34 a.c:31
         15.88    -nan    1.41 a.c:37
          5.67    -nan    0.00 a.c:39
          1.13    -nan   35.21 a.c:26
          0.95    -nan    0.00 a.c:44
          0.57    -nan    0.00 a.c:32
         Percent                 |      Source code & Disassembly of a.out for cycles (529 samples)
        -----------------------------------------------------------------------------------------
                               :
        ...
      
         a.c:26    0.57    -nan    4.23 :         40081a:       mov    %edi,-0x24(%rbp)
         a.c:26    0.00    -nan    9.86 :         40081d:       mov    %rsi,-0x30(%rbp)
      
        ...
      
      However, if a sum of samples is zero (e.g. 'page-faults'),
      skip calculating percent.
      
      After:
      
          $ perf annotate --stdio -l
      
        Sorted summary for file /home/taeung/workspace/a.out
        ----------------------------------------------
      
         32.89    0.00    7.04 a.c:38
         25.14    0.00    0.00 a.c:34
         16.26    0.00   56.34 a.c:31
         15.88    0.00    1.41 a.c:37
          5.67    0.00    0.00 a.c:39
          1.13    0.00   35.21 a.c:26
          0.95    0.00    0.00 a.c:44
          0.57    0.00    0.00 a.c:32
         Percent                 |      Source code & Disassembly of old for cycles (529 samples)
        -----------------------------------------------------------------------------------------
                               :
        ...
      
        a.c:26    0.57    0.00    4.23 :         40081a:       mov    %edi,-0x24(%rbp)
        a.c:26    0.00    0.00    9.86 :         40081d:       mov    %rsi,-0x30(%rbp)
      
        ...
      
      Signed-off-by: default avatarTaeung Song <treeze.taeung@gmail.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: http://lkml.kernel.org/r/1490598638-13947-3-git-send-email-treeze.taeung@gmail.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      2e933b12
    • Taeung Song's avatar
      perf annotate: Fix a bug following symbolic link of a build-id file · 6ebd2547
      Taeung Song authored
      
      
      It is wrong way to read link name from a build-id file.  Because a
      build-id file is not anymore a symbolic link but build-id directory of
      it is symbolic link, so fix it.
      
      For example, if build-id file name gotten from
      dso__build_id_filename() is as below,
      
        /root/.debug/.build-id/4f/75c7d197c951659d1c1b8b5fd49bcdf8f3f8b1/elf
      
      To correctly read link name of build-id, use the build-id dir path that
      is a symbolic link, instead of the above build-id file name like below.
      
        /root/.debug/.build-id/4f/75c7d197c951659d1c1b8b5fd49bcdf8f3f8b1
      
      Signed-off-by: default avatarTaeung Song <treeze.taeung@gmail.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: http://lkml.kernel.org/r/1490598638-13947-2-git-send-email-treeze.taeung@gmail.com
      Fixes: 01412261
      
       ("perf buildid-cache: Use path/to/bin/buildid/elf instead of path/to/bin/buildid")
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      6ebd2547
    • Linus Torvalds's avatar
      Merge tag 'pinctrl-v4.11-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl · 85f91d5c
      Linus Torvalds authored
      Pull more pin control fixes from Linus Walleij:
       "Here is a bunch of pin control fixes again
      
        A bit more than I'd like for this subsystem at this point, but what
        can I do. They are all driver fixes for hardware issues, as like "we
        forgot", "we didn't think of the fact that this could happen", "oops
        that one goes there" etc
      
         - Kconfig fixup for the TI IOdelay pinctrl-single add-on
      
         - fix up a typo in the meson i2c ao groups
      
         - switch a remapping back to use devm_ioremap() as
           devm_ioremap_resource() does not allow for sharing memory regions
      
         - do not clear the Qualcomm irq status bit in irq_unmask(), as this
           can lead to missing interrupts while the irq handler is executing
      
         - add irq_request/release_resources() on the ST driver
      
         - add a bunch of mysteriously missing pingroups for high numbered
           pins in the Qualcomm ipq4019 driver"
      
      * tag 'pinctrl-v4.11-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl:
        pinctrl: qcom: ipq4019: add missing pingroups for pins > 70
        pinctrl: st: add irq_request/release_resources callbacks
        pinctrl: qcom: Don't clear status bit on irq_unmask
        pinctrl: samsung: Fix memory mapping code
        pinctrl: meson-gxbb: Fix typo in i2c ao groups
        pinctrl: ti: The IODelay driver is a DRA7xxx feature so depend on that SoC
      85f91d5c
    • Linus Torvalds's avatar
      Merge tag 'm68k-for-v4.11-tag2' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k · d3e68cef
      Linus Torvalds authored
      Pull m68k updates from Geert Uytterhoeven:
      
        - build warning fix
      
        - defconfig updates
      
        - wire up new statx syscall
      
      * tag 'm68k-for-v4.11-tag2' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k:
        m68k: Wire up statx
        m68k/defconfig: Update defconfigs for v4.11-rc1
        m68k/bitops: Correct signature of test_bit()
      d3e68cef
  4. Mar 27, 2017
    • Milian Wolff's avatar
      perf report: Enable sorting by srcline as key · 5dfa210e
      Milian Wolff authored
      
      
      Often it is interesting to know how costly a given source line is in
      total. Previously, one had to build these sums manually based on all
      addresses that pointed to the same source line. This patch introduces
      srcline as a sort key, which will do the aggregation for us.
      
      Paired with the recent addition of showing inline frames, this makes
      perf report much more useful for many C++ work loads.
      
      The following shows the new feature in action. First, let's show the
      status quo output when we sort by address. The result contains many hist
      entries that generate the same output:
      
        ~~~~~~~~~~~~~~~~
        $ perf report --stdio --inline -g address
        # Children      Self  Command       Shared Object        Symbol
        # ........  ........  ............  ...................  .........................................
        #
            99.89%    35.34%  cpp-inlining  cpp-inlining         [.] main
                  |
                  |--64.55%--main complex:655
                  |          /home/milian/projects/kdab/rnd/hotspot/tests/test-clients/cpp-inlining/main.cpp:39 (inline)
                  |          /usr/include/c++/6.3.1/complex:664 (inline)
                  |          |
                  |          |--60.31%--hypot +20
                  |          |          |
                  |          |          |--8.52%--__hypot_finite +273
                  |          |          |
                  |          |          |--7.32%--__hypot_finite +411
      ...
                   --35.34%--_start +4194346
                             __libc_start_main +241
                             |
                             |--6.65%--main random.tcc:3326
                             |          /home/milian/projects/kdab/rnd/hotspot/tests/test-clients/cpp-inlining/main.cpp:39 (inline)
                             |          /usr/include/c++/6.3.1/bits/random.h:1809 (inline)
                             |          /usr/include/c++/6.3.1/bits/random.h:1818 (inline)
                             |          /usr/include/c++/6.3.1/bits/random.h:185 (inline)
                             |
                             |--2.70%--main random.tcc:3326
                             |          /home/milian/projects/kdab/rnd/hotspot/tests/test-clients/cpp-inlining/main.cpp:39 (inline)
                             |          /usr/include/c++/6.3.1/bits/random.h:1809 (inline)
                             |          /usr/include/c++/6.3.1/bits/random.h:1818 (inline)
                             |          /usr/include/c++/6.3.1/bits/random.h:185 (inline)
                             |
                             |--1.69%--main random.tcc:3326
                             |          /home/milian/projects/kdab/rnd/hotspot/tests/test-clients/cpp-inlining/main.cpp:39 (inline)
                             |          /usr/include/c++/6.3.1/bits/random.h:1809 (inline)
                             |          /usr/include/c++/6.3.1/bits/random.h:1818 (inline)
                             |          /usr/include/c++/6.3.1/bits/random.h:185 (inline)
        ...
        ~~~~~~~~~~~~~~~~
      
      With this patch and `-g srcline` we instead get the following output:
      
        ~~~~~~~~~~~~~~~~
        $ perf report --stdio --inline -g srcline
        # Children      Self  Command       Shared Object        Symbol
        # ........  ........  ............  ...................  .........................................
        #
            99.89%    35.34%  cpp-inlining  cpp-inlining         [.] main
                  |
                  |--64.55%--main complex:655
                  |          /home/milian/projects/kdab/rnd/hotspot/tests/test-clients/cpp-inlining/main.cpp:39 (inline)
                  |          /usr/include/c++/6.3.1/complex:664 (inline)
                  |          |
                  |          |--64.02%--hypot
                  |          |          |
                  |          |           --59.81%--__hypot_finite
                  |          |
                  |           --0.53%--cabs
                  |
                   --35.34%--_start
                             __libc_start_main
                             |
                             |--12.48%--main random.tcc:3326
                             |          /home/milian/projects/kdab/rnd/hotspot/tests/test-clients/cpp-inlining/main.cpp:39 (inline)
                             |          /usr/include/c++/6.3.1/bits/random.h:1809 (inline)
                             |          /usr/include/c++/6.3.1/bits/random.h:1818 (inline)
                             |          /usr/include/c++/6.3.1/bits/random.h:185 (inline)
        ...
        ~~~~~~~~~~~~~~~~
      
      Signed-off-by: default avatarMilian Wolff <milian.wolff@kdab.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Yao Jin <yao.jin@linux.intel.com>
      Link: http://lkml.kernel.org/r/20170318214928.9047-1-milian.wolff@kdab.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      5dfa210e
    • Jin Yao's avatar
      perf report: Show inline stack for browser mode · 0d3eb0b7
      Jin Yao authored
      
      
      If the address belongs to an inlined function, the source information
      back to the first non-inlined function will be printed.
      
      For example:
      
      1. Show inlined function name
         perf report -g function --inline
      
      -    0.69%     0.00%  inline   ld-2.23.so           [.] dl_main
         - dl_main
              0.56% _dl_relocate_object
               _dl_relocate_object (inline)
               elf_dynamic_do_Rela (inline)
      
      2. Show the file/line information
         perf report -g address --inline
      
      -    0.69%     0.00%  inline   ld-2.23.so           [.] _dl_start
           _dl_start rtld.c:307
            /build/glibc-GKVZIf/glibc-2.23/elf/rtld.c:413 (inline)
         + _dl_sysdep_start dl-sysdep.c:250
      
      Signed-off-by: default avatarYao Jin <yao.jin@linux.intel.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Tested-by: default avatarMilian Wolff <milian.wolff@kdab.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@intel.com>
      Link: http://lkml.kernel.org/r/1490474069-15823-6-git-send-email-yao.jin@linux.intel.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      0d3eb0b7
    • Jin Yao's avatar
      perf report: Show inline stack for stdio mode · 0db64dd0
      Jin Yao authored
      
      
      If the address belongs to an inlined function, the source information
      back to the first non-inlined function will be printed.
      
      For example:
      
      1. Show inlined function name
         perf report --stdio -g function --inline
      
           0.69%     0.00%  inline   ld-2.23.so           [.] dl_main
                  |
                  ---dl_main
                     |
                      --0.56%--_dl_relocate_object
                                _dl_relocate_object (inline)
                                elf_dynamic_do_Rela (inline)
      
      2. Show the file/line information
         perf report --stdio -g address --inline
      
           0.69%     0.00%  inline   ld-2.23.so           [.] _dl_start_user
                  |
                  ---_dl_start_user .:0
                     _dl_start rtld.c:307
                     /build/glibc-GKVZIf/glibc-2.23/elf/rtld.c:413 (inline)
                     _dl_sysdep_start dl-sysdep.c:250
                     |
                      --0.56%--dl_main rtld.c:2076
      
      Committer tests:
      
        # perf record --call-graph dwarf ~/bin/perf stat usleep 1
      
       Performance counter stats for 'usleep 1':
      
                0.443020      task-clock (msec)         #    0.449 CPUs utilized
                       1      context-switches          #    0.002 M/sec
                       0      cpu-migrations            #    0.000 K/sec
                      52      page-faults               #    0.117 M/sec
               1,049,423      cycles                    #    2.369 GHz
                 801,456      instructions              #    0.76  insn per cycle
                 155,609      branches                  #  351.246 M/sec
                   7,026      branch-misses             #    4.52% of all branches
      
             0.000987570 seconds time elapsed
      
        [ perf record: Woken up 2 times to write data ]
        [ perf record: Captured and wrote 0.553 MB perf.data (66 samples) ]
        # perf report --stdio --inline fs__get_mountpoint
        <SNIP>
           1.73%     0.00%  perf     perf           [.] fs__get_mountpoint
                  |
                  ---fs__get_mountpoint
                     fs__get_mountpoint (inline)
                     fs__check_mounts (inline)
                     __statfs
                     entry_SYSCALL_64
                     sys_statfs
                     SYSC_statfs
                     user_statfs
                     user_path_at_empty
                     filename_lookup
                     path_lookupat
                     link_path_walk
                     inode_permission
                     __inode_permission
                     kernfs_iop_permission
                     kernfs_refresh_inode
                     security_inode_notifysecctx
                     selinux_inode_notifysecctx
                     selinux_inode_setsecurity
                     security_context_to_sid
                     security_context_to_sid_core
                     string_to_context_struct
                     symcmp
      
      Signed-off-by: default avatarYao Jin <yao.jin@linux.intel.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Tested-by: default avatarMilian Wolff <milian.wolff@kdab.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@intel.com>
      Link: http://lkml.kernel.org/r/1490474069-15823-5-git-send-email-yao.jin@linux.intel.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      0db64dd0
    • Jin Yao's avatar
      perf report: Introduce --inline option · f3a60646
      Jin Yao authored
      
      
      It takes some time to look for inline stack for callgraph addresses.  So
      it provides new option "--inline" to let user decide if enable this
      feature.
      
        --inline:
      
        If a callgraph address belongs to an inlined function, the inline stack
        will be printed. Each entry is the inline function name or file/line.
      
      Signed-off-by: default avatarYao Jin <yao.jin@linux.intel.com>
      Tested-by: default avatarMilian Wolff <milian.wolff@kdab.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@intel.com>
      Link: http://lkml.kernel.org/r/1490474069-15823-4-git-send-email-yao.jin@linux.intel.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      f3a60646
    • Jin Yao's avatar
      perf report: Find the inline stack for a given address · a64489c5
      Jin Yao authored
      
      
      It would be useful for perf to support a mode to query the inline stack
      for a given callgraph address. This would simplify finding the right
      code in code that does a lot of inlining.
      
      The srcline.c has contained the code which supports to translate the
      address to filename:line_nr. This patch just extends the function to let
      it support getting the inline stacks.
      
      It introduces the inline_list which will store the inline function
      result (filename:line_nr and funcname).
      
      If BFD lib is not supported, the result is only filename:line_nr.
      
      Signed-off-by: default avatarYao Jin <yao.jin@linux.intel.com>
      Tested-by: default avatarMilian Wolff <milian.wolff@kdab.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@intel.com>
      Link: http://lkml.kernel.org/r/1490474069-15823-3-git-send-email-yao.jin@linux.intel.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      a64489c5
    • Jin Yao's avatar
      perf report: Refactor common code in srcline.c · 5580338d
      Jin Yao authored
      
      
      Introduce dso__name() and filename_split() out of existing code because
      these codes will be used in several places in next patch.
      
      For filename_split(), it may also solve a potential memory leak in
      existing code. In existing addr2line(),
      
              sep = strchr(filename, ':');
              if (sep) {
                      *sep++ = '\0';
                      *file = filename;
                      *line_nr = strtoul(sep, NULL, 0);
                      ret = 1;
              }
      
      out:
              pclose(fp);
              return ret;
      
      If sep is NULL, filename is not freed or returned via file.
      
      Signed-off-by: default avatarYao Jin <yao.jin@linux.intel.com>
      Tested-by: default avatarMilian Wolff <milian.wolff@kdab.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@intel.com>
      Link: http://lkml.kernel.org/r/1490474069-15823-2-git-send-email-yao.jin@linux.intel.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      5580338d
    • Arnaldo Carvalho de Melo's avatar
      perf tools: Remove unused 'prefix' from builtin functions · b0ad8ea6
      Arnaldo Carvalho de Melo authored
      We got it from the git sources but never used it for anything, with the
      place where this would be somehow used remaining:
      
        static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
        {
      	prefix = NULL;
      	if (p->option & RUN_SETUP)
      		prefix = NULL; /* setup_perf_directory(); */
      
      Ditch it.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: http://lkml.kernel.org/n/tip-uw5swz05vol0qpr32c5lpvus@git.kernel.org
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      b0ad8ea6
    • Ravi Bangoria's avatar
      perf list sdt: Show option in man page · 6963d3c3
      Ravi Bangoria authored
      Commit 40218dae
      
       ("perf list: Show SDT and pre-cached events") added
      sdt support in perf list, but it missed to update documentation.
      
      Show sdt option in man perf-list.
      
      Signed-off-by: default avatarRavi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
      Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
      Link: http://lkml.kernel.org/r/20170327025538.1753-1-ravi.bangoria@linux.vnet.ibm.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      6963d3c3
    • Adrian Hunter's avatar
      perf auxtrace: Fix no_size logic in addr_filter__resolve_kernel_syms() · c3a0bbc7
      Adrian Hunter authored
      
      
      Address filtering with kernel symbols incorrectly resulted in the error
      "Cannot determine size of symbol" because the no_size logic was the wrong
      way around.
      
      Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Tested-by: default avatarAndi Kleen <ak@linux.intel.com>
      Cc: stable@vger.kernel.org # v4.9+
      Link: http://lkml.kernel.org/r/1490357752-27942-1-git-send-email-adrian.hunter@intel.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      c3a0bbc7