summaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/connection.c
diff options
context:
space:
mode:
authorJohan Hovold2016-01-19 12:51:03 +0100
committerGreg Kroah-Hartman2016-01-19 21:12:40 +0100
commit81fba24969c0ca427a8cd3d31bea10749f15b737 (patch)
tree2493dc029be64bc830e388ab54aa45784943cf7c /drivers/staging/greybus/connection.c
parentgreybus: connection: add per-connection request handlers (diff)
downloadkernel-qcow2-linux-81fba24969c0ca427a8cd3d31bea10749f15b737.tar.gz
kernel-qcow2-linux-81fba24969c0ca427a8cd3d31bea10749f15b737.tar.xz
kernel-qcow2-linux-81fba24969c0ca427a8cd3d31bea10749f15b737.zip
greybus: connection: always cancel operations on connection disable
Always cancel all operations on connection disable and remove the now unused DESTROYING state. 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>
Diffstat (limited to 'drivers/staging/greybus/connection.c')
-rw-r--r--drivers/staging/greybus/connection.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/drivers/staging/greybus/connection.c b/drivers/staging/greybus/connection.c
index 3d7a9ca9ce2b..0fd7c051c2d3 100644
--- a/drivers/staging/greybus/connection.c
+++ b/drivers/staging/greybus/connection.c
@@ -426,12 +426,17 @@ EXPORT_SYMBOL_GPL(gb_connection_enable);
void gb_connection_disable(struct gb_connection *connection)
{
+ if (connection->state == GB_CONNECTION_STATE_DISABLED)
+ return;
+
gb_connection_control_disconnected(connection);
spin_lock_irq(&connection->lock);
connection->state = GB_CONNECTION_STATE_DISABLED;
spin_unlock_irq(&connection->lock);
+ gb_connection_cancel_operations(connection, -ESHUTDOWN);
+
gb_connection_svc_connection_destroy(connection);
gb_connection_hd_cport_disable(connection);
}
@@ -483,19 +488,13 @@ EXPORT_SYMBOL_GPL(gb_connection_legacy_init);
void gb_connection_legacy_exit(struct gb_connection *connection)
{
- spin_lock_irq(&connection->lock);
- if (connection->state != GB_CONNECTION_STATE_ENABLED) {
- spin_unlock_irq(&connection->lock);
+ if (connection->state == GB_CONNECTION_STATE_DISABLED)
return;
- }
- connection->state = GB_CONNECTION_STATE_DESTROYING;
- spin_unlock_irq(&connection->lock);
-
- gb_connection_cancel_operations(connection, -ESHUTDOWN);
- connection->protocol->connection_exit(connection);
gb_connection_disable(connection);
+ connection->protocol->connection_exit(connection);
+
gb_connection_unbind_protocol(connection);
}
EXPORT_SYMBOL_GPL(gb_connection_legacy_exit);