| From 9e95337a302a7e165a7b9b99957fd802b2227007 Mon Sep 17 00:00:00 2001 |
| From: "Shimoda, Yoshihiro" <yoshihiro.shimoda.uh@renesas.com> |
| Date: Tue, 27 Aug 2013 11:15:09 +0900 |
| Subject: spi: spi-rspi: fix inconsistent spin_lock_irqsave |
| |
| This patch fixes the following Smatch warning: |
| |
| CHECK drivers/spi/spi-rspi.c |
| drivers/spi/spi-rspi.c:606 rspi_work() warn: inconsistent returns spin_lock:&rspi->lock: locked (602) unlocked (606) |
| drivers/spi/spi-rspi.c:606 rspi_work() warn: inconsistent returns irqsave:flags: locked (602) unlocked (606) |
| |
| Reported-by: Dan Carpenter <dan.carpenter@oracle.com> |
| Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> |
| Signed-off-by: Mark Brown <broonie@linaro.org> |
| (cherry picked from commit 8d4d08ce8319ae26227c4dd558405963c14c2037) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/spi/spi-rspi.c | 10 ++++++---- |
| 1 file changed, 6 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c |
| index 5f122d9d2063..00c32320dce8 100644 |
| --- a/drivers/spi/spi-rspi.c |
| +++ b/drivers/spi/spi-rspi.c |
| @@ -564,8 +564,12 @@ static void rspi_work(struct work_struct *work) |
| unsigned long flags; |
| int ret; |
| |
| - spin_lock_irqsave(&rspi->lock, flags); |
| - while (!list_empty(&rspi->queue)) { |
| + while (1) { |
| + spin_lock_irqsave(&rspi->lock, flags); |
| + if (list_empty(&rspi->queue)) { |
| + spin_unlock_irqrestore(&rspi->lock, flags); |
| + break; |
| + } |
| mesg = list_entry(rspi->queue.next, struct spi_message, queue); |
| list_del_init(&mesg->queue); |
| spin_unlock_irqrestore(&rspi->lock, flags); |
| @@ -595,8 +599,6 @@ static void rspi_work(struct work_struct *work) |
| |
| mesg->status = 0; |
| mesg->complete(mesg->context); |
| - |
| - spin_lock_irqsave(&rspi->lock, flags); |
| } |
| |
| return; |
| -- |
| 1.8.5.rc3 |
| |