greybus: core: disable incoming operations pre disconnect
authorJohan Hovold <johan@hovoldconsulting.com>
Tue, 19 Jan 2016 11:51:09 +0000 (12:51 +0100)
committerGreg Kroah-Hartman <gregkh@google.com>
Tue, 19 Jan 2016 20:17:13 +0000 (12:17 -0800)
Disable and flush incoming operations before calling driver disconnect.

Bundle drivers are still responsible for disabling their connections
in their disconnect callback.

Note that specifically the legacy protocols must have incoming
operations disabled when their connection_exit callback is called as
that is where their state is deallocated.

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

index 28f48d79b0055212f72b6a267f32a726b4a7b302..cf06c9fb5bdce9d09525ac62d642a488e755e9a0 100644 (file)
@@ -159,6 +159,10 @@ static int greybus_remove(struct device *dev)
 {
        struct greybus_driver *driver = to_greybus_driver(dev->driver);
        struct gb_bundle *bundle = to_gb_bundle(dev);
+       struct gb_connection *connection;
+
+       list_for_each_entry(connection, &bundle->connections, bundle_links)
+               gb_connection_disable_rx(connection);
 
        driver->disconnect(bundle);
        return 0;