Messages in this thread Patch in this message | | | Date | Thu, 22 Sep 2022 16:28:25 +0100 | From | Cristian Marussi <> | Subject | Re: Query regarding "firmware: arm_scmi: Free mailbox channels if probe fails" |
| |
On Thu, Sep 22, 2022 at 03:54:31PM +0100, Cristian Marussi wrote: > On Thu, Sep 22, 2022 at 10:31:47AM +0530, Shivnandan Kumar wrote: > > Hi Christian, > > >
Hi Shivnandan,
[snip]
> Looking at the transport layer that you use, mailbox, I see that while > setup/free helpers are synchronized on an internal chan->lock, the RX > path inside the mailbox core is not, so I tried this: > > > diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c > index 4229b9b5da98..bb6173c0ad54 100644 > --- a/drivers/mailbox/mailbox.c > +++ b/drivers/mailbox/mailbox.c > @@ -157,9 +157,13 @@ static enum hrtimer_restart txdone_hrtimer(struct hrtimer *hrtimer) > */ > void mbox_chan_received_data(struct mbox_chan *chan, void *mssg) > { > + unsigned long flags; > + > + spin_lock_irqsave(&chan->lock, flags); > /* No buffering the received data */ > if (chan->cl->rx_callback) > chan->cl->rx_callback(chan->cl, mssg); > + spin_unlock_irqrestore(&chan->lock, flags); > } > EXPORT_SYMBOL_GPL(mbox_chan_received_data); >
...sorry... a small change on the tentative above fix...
----8<------
diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c index 4229b9b5da98..6fbe183acdae 100644 --- a/drivers/mailbox/mailbox.c +++ b/drivers/mailbox/mailbox.c @@ -157,9 +157,13 @@ static enum hrtimer_restart txdone_hrtimer(struct hrtimer *hrtimer) */ void mbox_chan_received_data(struct mbox_chan *chan, void *mssg) { + unsigned long flags; + + spin_lock_irqsave(&chan->lock, flags); /* No buffering the received data */ - if (chan->cl->rx_callback) + if (chan->cl && chan->cl->rx_callback) chan->cl->rx_callback(chan->cl, mssg); + spin_unlock_irqrestore(&chan->lock, flags); } EXPORT_SYMBOL_GPL(mbox_chan_received_data);
------8<----- Thanks, Cristian
| |