lkml.org 
[lkml]   [2023]   [Mar]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH v3 00/13] coresight: Fix CTI module refcount leak by making it a helper device
    Date
    Changes since v2:

    * Make out_conns array contiguous instead of sparse which simplifies
    filling and using it. New connections are always added to the end
    * Store pointers to individual connection objects so that they can be
    shared between inputs and outputs
    * Fix an existing bug where connection info was lost when unloading a
    device
    * Simplify connection fixup functions. Now the orphan mechanism is used
    for inputs in the same way as outputs to guarantee that all
    connections have both an input and an output set
    * Use input connections to disconnect devices on unload instead of
    iterating through them all
    * Make refcount a property of the connection rather than use it's own
    array based on the number of inputs and outputs
    * Fix a bug in v2 where helpers attached to the source device weren't
    disabled because coresight-etm-perf.c was making a raw call to
    disable rather than using a helper.
    * Change names of connection members to make direction explicit now
    that the connection is shared between input and outputs

    ------------------

    Changes since v1:

    * Don't dereference handle in tmc_etr_get_buffer() when not in perf mode.
    * Fix some W=1 warnings
    * Add a commit to rename child/output in terms of local/remote

    -------------------

    Currently there is a refcount leak in CTI when using system wide mode
    or tracing multithreaded applications. See the last commit for a
    reproducer. This prevents the module from being unloaded.

    Historically there have been a few issues and fixes attempted around
    here which have resulted in some extra logic and a member to keep
    track of CTI being enabled 'struct coresight_device->ect_enabled'.
    The fix in commit 665c157e0204 ("coresight: cti: Fix hang in
    cti_disable_hw()") was also related to CTI having its own
    enable/disable path which came later than other devices.

    If we make CTI a helper device and enable helper devices adjacent to
    the path we get very similar enable/disable behavior to now, but with
    more reuse of the existing reference counting logic in the coresight
    core code. This also affects CATU which can have a little bit of
    its hard coded enable/disable code removed.

    Enabling CATU on the generic path does require that input connections
    are tracked so that it can get its associated ETR buffer.

    Applies to coresight/next (197b6b60ae7b) but also requires the
    realloc_array patch here [1].

    Also available in full here [2].

    [1]: https://lore.kernel.org/linux-arm-kernel/20230306152723.3090195-1-james.clark@arm.com/
    [2]: https://gitlab.arm.com/linux-arm/linux-jc/-/tree/james-cs-cti-module-refcount-fix-v3

    James Clark (13):
    coresight: Use enum type for cs_mode wherever possible
    coresight: Change name of pdata->conns
    coresight: Rename nr_outports to nr_outconns
    coresight: Rename connection members to make the direction explicit
    coresight: Dynamically add connections
    coresight: Fix loss of connection info when a module is unloaded
    coresight: Store pointers to connections rather than an array of them
    coresight: Simplify connection fixup mechanism
    coresight: Store in-connections as well as out-connections
    coresight: Make refcount a property of the connection
    coresight: Refactor out buffer allocation function for ETR
    coresight: Enable and disable helper devices adjacent to the path
    coresight: Fix CTI module refcount leak by making it a helper device

    drivers/hwtracing/coresight/coresight-catu.c | 21 +-
    drivers/hwtracing/coresight/coresight-core.c | 557 +++++++++---------
    .../hwtracing/coresight/coresight-cti-core.c | 52 +-
    .../hwtracing/coresight/coresight-cti-sysfs.c | 4 +-
    drivers/hwtracing/coresight/coresight-cti.h | 4 +-
    drivers/hwtracing/coresight/coresight-etb10.c | 13 +-
    .../hwtracing/coresight/coresight-etm-perf.c | 4 +-
    .../coresight/coresight-etm3x-core.c | 6 +-
    .../coresight/coresight-etm4x-core.c | 6 +-
    .../hwtracing/coresight/coresight-funnel.c | 26 +-
    .../hwtracing/coresight/coresight-platform.c | 250 +++-----
    drivers/hwtracing/coresight/coresight-priv.h | 17 +-
    .../coresight/coresight-replicator.c | 23 +-
    drivers/hwtracing/coresight/coresight-stm.c | 6 +-
    drivers/hwtracing/coresight/coresight-sysfs.c | 17 +-
    .../hwtracing/coresight/coresight-tmc-etf.c | 26 +-
    .../hwtracing/coresight/coresight-tmc-etr.c | 110 ++--
    drivers/hwtracing/coresight/coresight-tmc.h | 2 +
    drivers/hwtracing/coresight/coresight-tpda.c | 23 +-
    drivers/hwtracing/coresight/coresight-tpdm.c | 4 +-
    drivers/hwtracing/coresight/coresight-tpiu.c | 7 +-
    drivers/hwtracing/coresight/coresight-trbe.c | 3 +-
    drivers/hwtracing/coresight/ultrasoc-smb.c | 11 +-
    drivers/hwtracing/coresight/ultrasoc-smb.h | 2 +-
    include/linux/coresight.h | 124 ++--
    25 files changed, 669 insertions(+), 649 deletions(-)

    --
    2.34.1

    \
     
     \ /
      Last update: 2023-03-29 13:54    [W:2.905 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site