Re: [PATCH 3/3] mailbox: pcc: Fix command timeout due to missed interrupt
From: Adam Young
Date: Thu Jul 23 2026 - 12:14:41 EST
On 7/23/26 05:16, Sudeep Holla wrote:
On Wed, Jul 22, 2026 at 11:10:51PM -0400, Adam Young wrote:Yes, I saw the hang, and debugged to see this line semantically different. I changed it to true and things resumed working. !ret is 0 so that happens in the success case.
+ /*Did you run and seeing hang or just code inspection. If latter, have you
+ * Set chan_in_use before ringing the doorbell so a fast completion
+ * interrupt is not mistaken for a shared interrupt from another
+ * subspace. Use WRITE_ONCE() for the lockless flag update. The
+ * ordered MMIO accessor used to ring the doorbell keeps this store
+ * visible before the platform is notified.
+ */
+ if (pchan->plat_irq > 0)
+ WRITE_ONCE(pchan->chan_in_use, true);
ret = pcc_chan_reg_read_modify_write(&pchan->db);
if (!ret && pchan->plat_irq > 0)
- pchan->chan_in_use = true;
+ WRITE_ONCE(pchan->chan_in_use, false);
return ret;
}
--
2.43.0
iAt the end of the above code,
WRITE_ONCE(pchan->chan_in_use, false);
should be
WRITE_ONCE(pchan->chan_in_use, true);
In order to keep the original semantics. The flag is cleared when the
messages is ACKed, not here. This version causes a hang.
considered that modified code sets it true before doorbell is rung and
set to false only if there is a failure to ring the doorbell ?