From mboxrd@z Thu Jan 1 00:00:00 1970 From: Grant Likely Subject: Re: [PATCH] spi/pl022: remove function cannot exit Date: Tue, 2 Aug 2011 14:54:22 +0100 Message-ID: <20110802135422.GB20071@ponder.secretlab.ca> References: <1312277364-12945-1-git-send-email-linus.walleij@stericsson.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: spi-devel-general@lists.sourceforge.net, Linus Walleij , Lee Jones , linux-arm-kernel@lists.infradead.org To: Linus Walleij Return-path: Content-Disposition: inline In-Reply-To: <1312277364-12945-1-git-send-email-linus.walleij@stericsson.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-arm-kernel-bounces@lists.infradead.org Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org List-Id: linux-spi.vger.kernel.org On Tue, Aug 02, 2011 at 11:29:24AM +0200, Linus Walleij wrote: > From: Linus Walleij > > The remove function in the PL022 driver cannot abort the remove > function any way, so restructure the code so as not to make that > assumption. Remove will now proceed no matter whether it can > stop the transfer queue or not. > > Reported-by: Russell King > Signed-off-by: Linus Walleij Applied, thanks. g. > --- > drivers/spi/spi-pl022.c | 11 +++-------- > 1 files changed, 3 insertions(+), 8 deletions(-) > > diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c > index eba88c7..730b4a3 100644 > --- a/drivers/spi/spi-pl022.c > +++ b/drivers/spi/spi-pl022.c > @@ -2267,17 +2267,13 @@ static int __devexit > pl022_remove(struct amba_device *adev) > { > struct pl022 *pl022 = amba_get_drvdata(adev); > - int status = 0; > + > if (!pl022) > return 0; > > /* Remove the queue */ > - status = destroy_queue(pl022); > - if (status != 0) { > - dev_err(&adev->dev, > - "queue remove failed (%d)\n", status); > - return status; > - } > + if (destroy_queue(pl022) != 0) > + dev_err(&adev->dev, "queue remove failed\n"); > load_ssp_default_config(pl022); > pl022_dma_remove(pl022); > free_irq(adev->irq[0], pl022); > @@ -2289,7 +2285,6 @@ pl022_remove(struct amba_device *adev) > spi_unregister_master(pl022->master); > spi_master_put(pl022->master); > amba_set_drvdata(adev, NULL); > - dev_dbg(&adev->dev, "remove succeeded\n"); > return 0; > } > > -- > 1.7.6 >