On Thu, Oct 30, 2014 at 6:22 AM, Thierry Reding <thierry.reding@xxxxxxxxx> wrote: > On Wed, Oct 29, 2014 at 11:02:36AM -0700, Andrew Bresticker wrote: > [...] >> > Maybe something like this patch would be more correct in handling >> > this: >> > >> > diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c >> > index afcb430508ec..85691a7d8ca6 100644 >> > --- a/drivers/mailbox/mailbox.c >> > +++ b/drivers/mailbox/mailbox.c >> > @@ -117,10 +117,11 @@ static void poll_txdone(unsigned long data) >> > struct mbox_chan *chan = &mbox->chans[i]; >> > >> > if (chan->active_req && chan->cl) { >> > - resched = true; >> > txdone = chan->mbox->ops->last_tx_done(chan); >> > if (txdone) >> > tx_tick(chan, 0); >> > + else >> > + resched = true; >> > } >> > } >> >> ... but we still need to re-arm the timer if tx_tick() submits another >> message. Perhaps the better thing to do is to have msg_submit() arm >> the timer. > > I think we need both. If the last transmission isn't done yet we still > want to keep polling. And we also want to poll if a new message is sent > subsequently. > > Perhaps it would be as easy as moving the poll handling code from > mbox_send_message() (if (chan->txdone_method == TXDONE_BY_POLL)) into > msg_submit()? That has the additional advantage of being able to omit > the polling when an error happens during the mbox' .send_data(). Yes, this is exactly what I've done :). -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html