mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
UPSTREAM: coresight: trbe: irq handler: Do not disable TRBE if no action is needed
The IRQ handler of the TRBE driver could race against the update_buffer()
in consuming the IRQ. So, if the update_buffer() gets to processing the
TRBE irq, the TRBSR will be cleared. Thus by the time IRQ handler is
triggered, there is nothing to do there. Handle these cases and do not
disable the TRBE unnecessarily. Since the TRBSR can be read without
stopping the TRBE, we can check that before disabling the TRBE.
Bug: 213931796
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Mike Leach <mike.leach@linaro.org>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Link: https://lore.kernel.org/r/20210923143919.2944311-2-suzuki.poulose@arm.com
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
(cherry picked from commit 85fb92353e)
Signed-off-by: Qais Yousef <qais.yousef@arm.com>
Change-Id: Ic53d31cb60f44ab5843aa3c054dad5b61e601697
This commit is contained in:
committed by
Todd Kjos
parent
984ff5cb73
commit
aac76367e4
@@ -762,12 +762,7 @@ static irqreturn_t arm_trbe_irq_handler(int irq, void *dev)
|
||||
enum trbe_fault_action act;
|
||||
u64 status;
|
||||
|
||||
/*
|
||||
* Ensure the trace is visible to the CPUs and
|
||||
* any external aborts have been resolved.
|
||||
*/
|
||||
trbe_drain_and_disable_local();
|
||||
|
||||
/* Reads to TRBSR_EL1 is fine when TRBE is active */
|
||||
status = read_sysreg_s(SYS_TRBSR_EL1);
|
||||
/*
|
||||
* If the pending IRQ was handled by update_buffer callback
|
||||
@@ -776,6 +771,11 @@ static irqreturn_t arm_trbe_irq_handler(int irq, void *dev)
|
||||
if (!is_trbe_irq(status))
|
||||
return IRQ_NONE;
|
||||
|
||||
/*
|
||||
* Ensure the trace is visible to the CPUs and
|
||||
* any external aborts have been resolved.
|
||||
*/
|
||||
trbe_drain_and_disable_local();
|
||||
clr_trbe_irq();
|
||||
isb();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user