]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
staging: greybus: loopback: use gb_loopback_async_wait_all don't spin
authorBryan O'Donoghue <pure.logic@nexus-software.ie>
Thu, 22 Dec 2016 00:37:28 +0000 (00:37 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 3 Jan 2017 15:45:01 +0000 (16:45 +0100)
Currently the greybus-loopback thread logic spins around waiting for
send_count == iteration_max which on real hardware doesn't make a
difference to us but in simulation is excruciatingly slow, anti-social and
bad manners. Use the existing gb_loopback_async_wait_all() function to gate
continuing when the send_count == iteration_max and go to sleep until
there's something worthwhile to-do.

Signed-off-by: Bryan O'Donoghue <pure.logic@nexus-software.ie>
Reviewed-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/greybus/loopback.c

index 7882306adeca9e3737a90003a806c06185cdc0ea..3184dd3999b5598ae8e735cb25c904bf89366153 100644 (file)
@@ -1008,11 +1008,22 @@ static int gb_loopback_fn(void *data)
 
                /* Optionally terminate */
                if (gb->send_count == gb->iteration_max) {
+                       mutex_unlock(&gb->mutex);
+
+                       /* Wait for synchronous and asynchronus completion */
+                       gb_loopback_async_wait_all(gb);
+
+                       /* Mark complete unless user-space has poked us */
+                       mutex_lock(&gb->mutex);
                        if (gb->iteration_count == gb->iteration_max) {
                                gb->type = 0;
                                gb->send_count = 0;
                                sysfs_notify(&gb->dev->kobj,  NULL,
                                                "iteration_count");
+                               dev_dbg(&bundle->dev, "load test complete\n");
+                       } else {
+                               dev_dbg(&bundle->dev,
+                                       "continuing on with new test set\n");
                        }
                        mutex_unlock(&gb->mutex);
                        continue;