Re: [PATCH 3/3] mailbox: pcc: Fix command timeout due to missed interrupt
From: Sudeep Holla
Date: Thu Jul 23 2026 - 06:30:42 EST
On Thu, Jul 23, 2026 at 05:47:35PM +0800, lihuisong (C) wrote:
>
> On 7/23/2026 5:16 PM, Sudeep Holla wrote:
> > On Wed, Jul 22, 2026 at 11:10:51PM -0400, Adam Young wrote:
> > > + /*
> > > + * 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.
> > >
> > Did you run and seeing hang or just code inspection. If latter, have you
> > 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 ?
> + /*
> + * 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;
> + if (ret && pchan->plat_irq > 0)
> + WRITE_ONCE(pchan->chan_in_use, false);
>
>
> !ret -->ret.
> should set to false on failure. I remember that I fixed this place when I
> tested. But I missed this when I sent it out.
> Sorry for my mistake.
> >
Ah right, my brain was somehow wired to read it w/o !. My mistake as well,
didn't spot it. I will sent v2, so Jassi can pick that up instead.
--
Regards,
Sudeep