greybus: loopback: Relax locking during loopback operations
authorBryan O'Donoghue <bryan.odonoghue@linaro.org>
Thu, 3 Dec 2015 17:29:38 +0000 (17:29 +0000)
committerGreg Kroah-Hartman <gregkh@google.com>
Thu, 3 Dec 2015 23:37:24 +0000 (15:37 -0800)
Currently a per-connection mutex is held during calls to
gb_operation_send_sync. It is not necessary to hold this lock and later
patches supporting multiple-outstanding bi-directional operations need to
take the per-connection lock and the gb_dev level lock. Since gb_dev must
always be taken before per-connection locks, it is both desirable and safe
to drop the lock now.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/loopback.c

index ef16ca579ca1d1a9c6c5d4b18f03bd5259306c6f..e0be130afb70be5c8755564bb161fea39dc5de4e 100644 (file)
@@ -774,6 +774,8 @@ static int gb_loopback_fn(void *data)
                        mutex_unlock(&gb->mutex);
                        goto sleep;
                }
+               mutex_unlock(&gb->mutex);
+
                /* Else operations to perform */
                gb->apbridge_latency_ts = 0;
                gb->gpbridge_latency_ts = 0;
@@ -783,7 +785,6 @@ static int gb_loopback_fn(void *data)
                        error = gb_loopback_transfer(gb, size);
                else if (type == GB_LOOPBACK_TYPE_SINK)
                        error = gb_loopback_sink(gb, size);
-               mutex_unlock(&gb->mutex);
 
                mutex_lock(&gb_dev.mutex);
                mutex_lock(&gb->mutex);