]> git.karo-electronics.de Git - linux-beck.git/commitdiff
greybus: svc: disable connection after all its users are gone
authorViresh Kumar <viresh.kumar@linaro.org>
Mon, 13 Jun 2016 16:18:28 +0000 (21:48 +0530)
committerGreg Kroah-Hartman <gregkh@google.com>
Tue, 14 Jun 2016 19:05:44 +0000 (12:05 -0700)
gb_svc_del() can be called during removal of gb-es2.ko module as well,
and in that case we would like to properly shutdown all modules and
interfaces as USB is still alive.

This requires that we don't disable the svc connection, at least for tx,
as that will be used while removing modules and interfaces.

Disable only rx to begin with, as we shouldn't be handling any requests
from the SVC. Disable tx only after all the users of svc connection are
gone.

Tested on EVT 2.0 by remove gb-es2.ko module. There are still few
errors, specially while quiescing the connections (-22), but not that
many.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/svc.c

index d467ceb0916df8a4588dbd70cf16cf8981921946..e316f08ab7569a2fc744d4d3fe388fc87d75382d 100644 (file)
@@ -1456,7 +1456,7 @@ static void gb_svc_remove_modules(struct gb_svc *svc)
 
 void gb_svc_del(struct gb_svc *svc)
 {
-       gb_connection_disable(svc->connection);
+       gb_connection_disable_rx(svc->connection);
 
        /*
         * The SVC device and input device may have been registered
@@ -1473,6 +1473,8 @@ void gb_svc_del(struct gb_svc *svc)
        flush_workqueue(svc->wq);
 
        gb_svc_remove_modules(svc);
+
+       gb_connection_disable(svc->connection);
 }
 
 void gb_svc_put(struct gb_svc *svc)