Message ID | 1391772205-22239-37-git-send-email-luis.henriques@canonical.com |
---|---|
State | New |
Headers | show |
On 02/07/2014 05:22 AM, Luis Henriques wrote: > 3.5.7.30 -stable review patch. If anyone has any objections, please let me know. > > ------------------ > > From: Daniel Santos <daniel.santos@pobox.com> > > commit e120cc0dcf2880a4c5c0a6cb27b655600a1cfa1d upstream. > > This corrects a problem in spi_pump_messages() that leads to an spi > message hanging forever when a call to transfer_one_message() fails. > This failure occurs in my MCP2210 driver when the cs_change bit is set > on the last transfer in a message, an operation which the hardware does > not support. > > Rationale > Since the transfer_one_message() returns an int, we must presume that it > may fail. If transfer_one_message() should never fail, it should return > void. Thus, calls to transfer_one_message() should properly manage a > failure. > > Fixes: ffbbdd21329f3 (spi: create a message queueing infrastructure) > Signed-off-by: Daniel Santos <daniel.santos@pobox.com> > Signed-off-by: Mark Brown <broonie@linaro.org> > Signed-off-by: Luis Henriques <luis.henriques@canonical.com> > --- > drivers/spi/spi.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c > index 1041cb8..40f528b 100644 > --- a/drivers/spi/spi.c > +++ b/drivers/spi/spi.c > @@ -574,7 +574,9 @@ static void spi_pump_messages(struct kthread_work *work) > ret = master->transfer_one_message(master, master->cur_msg); > if (ret) { > dev_err(&master->dev, > - "failed to transfer one message from queue\n"); > + "failed to transfer one message from queue: %d\n", ret); > + master->cur_msg->status = ret; > + spi_finalize_current_message(master); > return; > } > } This isn't a good patch and is reverted by a later patch. I'm not sure what the protocol for this is, but either skip this patch or include the one that reverts it. Daniel
On Fri, Feb 07, 2014 at 12:17:47PM -0600, Daniel Santos wrote: > On 02/07/2014 05:22 AM, Luis Henriques wrote: > >3.5.7.30 -stable review patch. If anyone has any objections, please let me know. > > > >------------------ > > > >From: Daniel Santos <daniel.santos@pobox.com> > > > >commit e120cc0dcf2880a4c5c0a6cb27b655600a1cfa1d upstream. > > > >This corrects a problem in spi_pump_messages() that leads to an spi > >message hanging forever when a call to transfer_one_message() fails. > >This failure occurs in my MCP2210 driver when the cs_change bit is set > >on the last transfer in a message, an operation which the hardware does > >not support. > > > >Rationale > >Since the transfer_one_message() returns an int, we must presume that it > >may fail. If transfer_one_message() should never fail, it should return > >void. Thus, calls to transfer_one_message() should properly manage a > >failure. > > > >Fixes: ffbbdd21329f3 (spi: create a message queueing infrastructure) > >Signed-off-by: Daniel Santos <daniel.santos@pobox.com> > >Signed-off-by: Mark Brown <broonie@linaro.org> > >Signed-off-by: Luis Henriques <luis.henriques@canonical.com> > >--- > > drivers/spi/spi.c | 4 +++- > > 1 file changed, 3 insertions(+), 1 deletion(-) > > > >diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c > >index 1041cb8..40f528b 100644 > >--- a/drivers/spi/spi.c > >+++ b/drivers/spi/spi.c > >@@ -574,7 +574,9 @@ static void spi_pump_messages(struct kthread_work *work) > > ret = master->transfer_one_message(master, master->cur_msg); > > if (ret) { > > dev_err(&master->dev, > >- "failed to transfer one message from queue\n"); > >+ "failed to transfer one message from queue: %d\n", ret); > >+ master->cur_msg->status = ret; > >+ spi_finalize_current_message(master); > > return; > > } > > } > > This isn't a good patch and is reverted by a later patch. I'm not > sure what the protocol for this is, but either skip this patch or > include the one that reverts it. Great, thanks. I will drop this patch both in the 3.5 and 3.11 kernels. Cheers, -- Luis
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 1041cb8..40f528b 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -574,7 +574,9 @@ static void spi_pump_messages(struct kthread_work *work) ret = master->transfer_one_message(master, master->cur_msg); if (ret) { dev_err(&master->dev, - "failed to transfer one message from queue\n"); + "failed to transfer one message from queue: %d\n", ret); + master->cur_msg->status = ret; + spi_finalize_current_message(master); return; } }