Yabin Cui 321577251c BACKPORT:FROMGIT: coresight: Serialize enabling/disabling a link device.
Backport: coresight-dynamic-replicator.c and coresight-replicator.c has
been merged upstream into coresight-replicator.c, in commit
455328b177.
So backport the change to both of the files.

When tracing etm data of multiple threads on multiple cpus through perf
interface, some link devices are shared between paths of different cpus.
It creates race conditions when different cpus wants to enable/disable
the same link device at the same time.

Example 1:
Two cpus want to enable different ports of a coresight funnel, thus
calling the funnel enable operation at the same time. But the funnel
enable operation isn't reentrantable.

Example 2:
For an enabled coresight dynamic replicator with refcnt=1, one cpu wants
to disable it, while another cpu wants to enable it. Ideally we still have
an enabled replicator with refcnt=1 at the end. But in reality the result
is uncertain.

Since coresight devices claim themselves when enabled for self-hosted
usage, the race conditions above usually make the link devices not usable
after many cycles.

To fix the race conditions, this patch uses spinlocks to serialize
enabling/disabling link devices.

Fixes: a06ae8609b ("coresight: add CoreSight core layer framework")
Signed-off-by: Yabin Cui <yabinc@google.com>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: stable <stable@vger.kernel.org> # 5.3
Link: https://lore.kernel.org/r/20191104181251.26732-14-mathieu.poirier@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

(cherry picked from commit edda32dabe
 git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
 char-misc-next)

Bug: 140266694
Change-Id: I59a1a36c3e4771a57910f6f437fd2ce5f3cfab6e
Signed-off-by: Yabin Cui <yabinc@google.com>
2019-11-07 16:21:21 -08:00
2019-10-29 09:41:48 +01:00
2019-10-11 19:13:57 +02:00
2019-10-01 08:51:37 +02:00
2019-08-06 20:08:18 +02:00
2019-10-29 09:41:48 +01:00
2019-10-29 09:41:48 +01:00
2019-11-06 13:21:58 +01:00
2019-11-06 13:21:58 +01:00
2019-10-11 19:13:57 +02:00
2019-11-06 13:21:58 +01:00
2019-10-17 15:33:07 -07:00
2019-11-06 13:21:58 +01:00

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.
See Documentation/00-INDEX for a list of what is contained in each file.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.
Description
No description provided
Readme 7.9 GiB
Languages
C 97.7%
Assembly 1.6%
Makefile 0.3%
Perl 0.1%