Skip to content

Commit

Permalink
coresight: cpu-debug: Replace mutex with mutex_trylock on panic notifier
Browse files Browse the repository at this point in the history
[ Upstream commit 1adff54 ]

The panic notifier infrastructure executes registered callbacks when
a panic event happens - such callbacks are executed in atomic context,
with interrupts and preemption disabled in the running CPU and all other
CPUs disabled. That said, mutexes in such context are not a good idea.

This patch replaces a regular mutex with a mutex_trylock safer approach;
given the nature of the mutex used in the driver, it should be pretty
uncommon being unable to acquire such mutex in the panic path, hence
no functional change should be observed (and if it is, that would be
likely a deadlock with the regular mutex).

Fixes: 2227b7c ("coresight: add support for CPU debug module")
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Link: https://lore.kernel.org/r/20220427224924.592546-10-gpiccoli@igalia.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
guilhermepiccoli authored and gregkh committed Jun 14, 2022
1 parent fd18fb3 commit fffde6d
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions drivers/hwtracing/coresight/coresight-cpu-debug.c
Expand Up @@ -380,9 +380,10 @@ static int debug_notifier_call(struct notifier_block *self,
int cpu;
struct debug_drvdata *drvdata;

mutex_lock(&debug_lock);
/* Bail out if we can't acquire the mutex or the functionality is off */
if (!mutex_trylock(&debug_lock))
return NOTIFY_DONE;

/* Bail out if the functionality is disabled */
if (!debug_enable)
goto skip_dump;

Expand All @@ -401,7 +402,7 @@ static int debug_notifier_call(struct notifier_block *self,

skip_dump:
mutex_unlock(&debug_lock);
return 0;
return NOTIFY_DONE;
}

static struct notifier_block debug_notifier = {
Expand Down

0 comments on commit fffde6d

Please sign in to comment.