diff options
author | Axel Lin <axel.lin@ingics.com> | 2014-12-10 22:10:44 -0500 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@linaro.org> | 2015-01-19 03:56:07 -0500 |
commit | 8a66fdae771487762519db0546e9ccb648a2f911 (patch) | |
tree | e77ae8557a608c5114efa3709abb0c1dcf35a6f3 | |
parent | 1818681cda4a1cd23a6c7582db2874b680fac6d4 (diff) |
mmc: toshsd: Fix unbalanced locking
Fix returning IRQ_HANDLED with spin_lock held.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
-rw-r--r-- | drivers/mmc/host/toshsd.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/mmc/host/toshsd.c b/drivers/mmc/host/toshsd.c index e5d8dec65f44..e2cdd5fb1423 100644 --- a/drivers/mmc/host/toshsd.c +++ b/drivers/mmc/host/toshsd.c | |||
@@ -176,7 +176,8 @@ static irqreturn_t toshsd_thread_irq(int irq, void *dev_id) | |||
176 | spin_lock_irqsave(&host->lock, flags); | 176 | spin_lock_irqsave(&host->lock, flags); |
177 | 177 | ||
178 | if (!sg_miter_next(sg_miter)) | 178 | if (!sg_miter_next(sg_miter)) |
179 | return IRQ_HANDLED; | 179 | goto done; |
180 | |||
180 | buf = sg_miter->addr; | 181 | buf = sg_miter->addr; |
181 | 182 | ||
182 | /* Ensure we dont read more than one block. The chip will interrupt us | 183 | /* Ensure we dont read more than one block. The chip will interrupt us |
@@ -198,6 +199,7 @@ static irqreturn_t toshsd_thread_irq(int irq, void *dev_id) | |||
198 | sg_miter->consumed = count; | 199 | sg_miter->consumed = count; |
199 | sg_miter_stop(sg_miter); | 200 | sg_miter_stop(sg_miter); |
200 | 201 | ||
202 | done: | ||
201 | spin_unlock_irqrestore(&host->lock, flags); | 203 | spin_unlock_irqrestore(&host->lock, flags); |
202 | 204 | ||
203 | return IRQ_HANDLED; | 205 | return IRQ_HANDLED; |