Merge remote-tracking branches 'spi/topic/doc', 'spi/topic/dw' and 'spi/topic/flash...
authorMark Brown <broonie@kernel.org>
Fri, 11 Mar 2016 07:28:35 +0000 (14:28 +0700)
committerMark Brown <broonie@kernel.org>
Fri, 11 Mar 2016 07:28:35 +0000 (14:28 +0700)
1  2  3  4 
drivers/spi/spi.c
include/linux/spi/spi.h

@@@@@ -1152,7 -1152,6 -1152,6 -1154,9 +1154,9 @@@@@ static void __spi_pump_messages(struct 
                }
        }
    
-       mutex_lock(&master->bus_lock_mutex);
+++     if (!bus_locked)
+++             mutex_lock(&master->bus_lock_mutex);
+++ 
        trace_spi_message_start(master->cur_msg);
    
        if (master->prepare_message) {
                                "failed to prepare message: %d\n", ret);
                        master->cur_msg->status = ret;
                        spi_finalize_current_message(master);
-                       mutex_unlock(&master->bus_lock_mutex);
---                     return;
+++                     goto out;
                }
                master->cur_msg_prepared = true;
        }
        if (ret) {
                master->cur_msg->status = ret;
                spi_finalize_current_message(master);
-               mutex_unlock(&master->bus_lock_mutex);
---             return;
+++             goto out;
        }
    
        ret = master->transfer_one_message(master, master->cur_msg);
        if (ret) {
                dev_err(&master->dev,
                        "failed to transfer one message from queue\n");
-               mutex_unlock(&master->bus_lock_mutex);
---             return;
+++             goto out;
        }
-       mutex_unlock(&master->bus_lock_mutex);
+++ 
+++ out:
+++     if (!bus_locked)
+++             mutex_unlock(&master->bus_lock_mutex);
 ++ 
 ++     /* Prod the scheduler in case transfer_one() was busy waiting */
-       cond_resched();
+++     if (!ret)
+++             cond_resched();
    }
    
    /**
Simple merge