spi/pl022: fix stop queue procedure
authorGrzegorz Sygieda <grzegorz.sygieda@tieto.com>
Thu, 20 May 2010 22:28:30 +0000 (22:28 +0000)
committerGrant Likely <grant.likely@secretlab.ca>
Tue, 25 May 2010 06:23:14 +0000 (00:23 -0600)
This fix prevents queue being marked as "stopped", if data exists
in the queue list.

Signed-off-by: Grzegorz Sygieda <grzegorz.sygieda@tieto.com>
Signed-off-by: Lukasz Baj <lukasz.baj@tieto.com>
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
drivers/spi/amba-pl022.c

index c75831c..f0a1418 100644 (file)
@@ -1211,7 +1211,6 @@ static int stop_queue(struct pl022 *pl022)
         * A wait_queue on the pl022->busy could be used, but then the common
         * execution path (pump_messages) would be required to call wake_up or
         * friends on every SPI message. Do this instead */
-       pl022->run = QUEUE_STOPPED;
        while (!list_empty(&pl022->queue) && pl022->busy && limit--) {
                spin_unlock_irqrestore(&pl022->queue_lock, flags);
                msleep(10);
@@ -1220,6 +1219,7 @@ static int stop_queue(struct pl022 *pl022)
 
        if (!list_empty(&pl022->queue) || pl022->busy)
                status = -EBUSY;
+       else pl022->run = QUEUE_STOPPED;
 
        spin_unlock_irqrestore(&pl022->queue_lock, flags);