On Thu, Sep 01, 2022 at 01:02:22PM +0200, David Jander wrote: > @@ -1727,8 +1727,7 @@ static void __spi_pump_messages(struct spi_controller *ctlr, bool in_kthread) > spin_unlock_irqrestore(&ctlr->queue_lock, flags); > > ret = __spi_pump_transfer_message(ctlr, msg, was_busy); > - if (!ret) > - kthread_queue_work(ctlr->kworker, &ctlr->pump_messages); > + kthread_queue_work(ctlr->kworker, &ctlr->pump_messages); > > ctlr->cur_msg = NULL; > ctlr->fallback = false; > > The problem is that if __spi_pump_transfer_message() fails, the ctlr->busy > flag is left true, so __spi_async() is not going to queue new work. The busy > transition is handled right above that piece of code, in > __spi_pump_transfer_message(), and the mechanism is to queue more work to do > it. Apparently work was only queued when the transfer was successful, and I am > not sure why it was like that. Queuing work unconditionally solves the issue > and should not be a problem. This looks like a good spot regardless of if it fixes the issues with spi-mux, can you submit it as a patch please?
Attachment:
signature.asc
Description: PGP signature