• Kan Liang's avatar
    perf/core: Fix the same task check in perf_event_set_output · 24d3ae2f
    Kan Liang authored
    The same task check in perf_event_set_output has some potential issues
    for some usages.
    
    For the current perf code, there is a problem if using of
    perf_event_open() to have multiple samples getting into the same mmap’d
    memory when they are both attached to the same process.
    https://lore.kernel.org/all/92645262-D319-4068-9C44-2409EF44888E@gmail.com/
    Because the event->ctx is not ready when the perf_event_set_output() is
    invoked in the perf_event_open().
    
    Besides the above issue, before the commit bd275681 ("perf: Rewrite
    core context handling"), perf record can errors out when sampling with
    a hardware event and a software event as below.
     $ perf record -e cycles,dummy --per-thread ls
     failed to mmap with 22 (Invalid argument)
    That's because that prior to the commit a hardware event and a software
    event are from different task context.
    
    The problem should be a long time issue since commit c3f00c70
    ("perk: Separate find_get_context() from event initialization").
    
    The task struct is stored in the event->hw.target for each per-thread
    event. It is a more reliable way to determine whether two events are
    attached to the same task.
    
    The event->hw.target was also introduced several years ago by the
    commit 50f16a8b ("perf: Remove type specific target pointers"). It
    can not only be used to fix the issue with the current code, but also
    back port to fix the issues with an older kernel.
    
    Note: The event->hw.target was introduced later than commit
    c3f00c70. The patch may cannot be applied between the commit
    c3f00c70 and commit 50f16a8b. Anybody that wants to back-port
    this at that period may have to find other solutions.
    
    Fixes: c3f00c70 ("perf: Separate find_get_context() from event initialization")
    Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: default avatarZhengjun Xing <zhengjun.xing@linux.intel.com>
    Link: https://lkml.kernel.org/r/20230322202449.512091-1-kan.liang@linux.intel.com
    24d3ae2f
core.c 330 KB