> A second thing is that module_put is called. This should also not be > done when startup() fails. It breaks the expected symmetry that > request_channel() gets the module and only free_channel() puts it again. This part is bogus... > This patch is RFC because I am still somewhat new to the mailbox > subsystem and might miss something. ... which proves this point ;) ... > dev_err(dev, "Unable to startup the chan (%d)\n", ret); > - mbox_free_channel(chan); > + scoped_guard(spinlock_irqsave, &chan->lock) { > + chan->cl = NULL; > + if (chan->txdone_method == TXDONE_BY_ACK) > + chan->txdone_method = TXDONE_BY_POLL; > + } ... module_put needs to be here. Still, not calling shutdown() still seems essential to me, so I'd appreciate comments about the patch still.