mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 07:03:09 -04:00
soc: qcom: smp2p: Add memory barrier for irq_pending
There is a very tight race where the irq_retrigger function is run on one cpu and the actual retrigger softirq is running on a second cpu. When this happens, there may be a chance that the second cpu will not see the updated irq_pending value from first cpu. Add a memory barrier to ensure that irq_pending is read correctly. Change-Id: I3dd185decc4f050bd57c0b6558f417ead2a3aa5a Signed-off-by: Chris Lew <clew@codeaurora.org>
This commit is contained in:
parent
9d099b501a
commit
f2197a20e8
1 changed files with 8 additions and 0 deletions
|
|
@ -270,6 +270,9 @@ static void qcom_smp2p_notify_in(struct qcom_smp2p *smp2p)
|
|||
|
||||
status = val ^ entry->last_value;
|
||||
entry->last_value = val;
|
||||
|
||||
/* Ensure irq_pending is read correctly */
|
||||
mb();
|
||||
status |= *entry->irq_pending;
|
||||
|
||||
SMP2P_INFO("%d:\t%s: status:%0lx val:%0x\n",
|
||||
|
|
@ -391,6 +394,11 @@ static int smp2p_retrigger_irq(struct irq_data *irqd)
|
|||
SMP2P_INFO("%d: %s: %lu\n", entry->smp2p->remote_pid, entry->name, irq);
|
||||
set_bit(irq, entry->irq_pending);
|
||||
|
||||
/* Ensure irq_pending is visible to all cpus that retried interrupt
|
||||
* can run on
|
||||
*/
|
||||
mb();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue