[PATCH v6 00/13] coresight: Fix CTI module refcount leak by making it a helper device
Suzuki K Poulose
suzuki.poulose at arm.com
Tue Jun 6 02:53:34 PDT 2023
On 25/04/2023 15:35, James Clark wrote:
> Changes since v5:
>
> * Formatting fixes
> * helper->type != CORESIGHT_DEV_TYPE_HELPER -> !coresight_is_helper()
> * Remove ect from coresight_dev_type and add a static assert so that
> it stays in sync with the enum
>
> ------------------
>
> Changes since v4:
>
> * Update commit message on patch 1
> * Drop previous change that added lockdep checks to coresight_add_helper()
> because they are already in mutex_lock(). But keep extra comment.
> * Check for allocation failure in coresight_add_out_conn()
>
> ------------------
>
> Changes since v3:
>
> * Put connection loss fix at the beginning so that it can be backported
> * Replace coresight_find_link_{x}() with coresight_find_out_connection()
> * Reorder coresight_enable_source() arguments for consistency
> * Add source and destination reference counts so that two link devices
> connected together don't clash
> * Add coresight_is_helper()
> * Fix overwriting csdev bug in coresight_orphan_match()
> * Don't clear conns[i]->dest_fwnode in coresight_remove_conns() in case
> it's used again
> * Use dev instead of adev->dev for devmem allocation in
> acpi_coresight_parse_graph() so that it's consistent with DT mode and
> doesn't cause a warning on free.
> * Rename coresight_add_helper_mutex() -> coresight_add_helper()
> * Ensure coresight_mutex isn't already held in coresight_add_helper()
> * Return new connection from coresight_add_out_conn()
> * Comment and formatting improvements
>
> ------------------
>
> 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 (18996a113f256) but everything except the
> first fixes commit requires the realloc_array patch here [1].
>
> Also available in full here [2].
>
> [1]: https://lore.kernel.org/linux-arm-kernel/20230320145710.1120469-1-james.clark@arm.com/
> [2]: https://gitlab.arm.com/linux-arm/linux-jc/-/tree/james-cs-cti-module-refcount-fix-v6
Queued to coresight/next
[01] https://git.kernel.org/coresight/c/c45b2835e7b2
[02] https://git.kernel.org/coresight/c/9fa3682869d4
[03] https://git.kernel.org/coresight/c/704faaf4e33c
[04] https://git.kernel.org/coresight/c/81d0ea763d8a
[05] https://git.kernel.org/coresight/c/d49c9cf15f89
[06] https://git.kernel.org/coresight/c/3d4ff657e454
[07] https://git.kernel.org/coresight/c/4e8fe7e5c3a5
[08] https://git.kernel.org/coresight/c/102162dbac89
[09] https://git.kernel.org/coresight/c/e3f4e68797a9
[10] https://git.kernel.org/coresight/c/ae7f2b5a7b56
[11] https://git.kernel.org/coresight/c/296b01fd106e
[12] https://git.kernel.org/coresight/c/6148652807ba
[13] https://git.kernel.org/coresight/c/1b5b1646e63d
Thanks
Suzuki
More information about the linux-arm-kernel
mailing list