diff options
author | Johan Hovold <johan@hovoldconsulting.com> | 2016-01-19 12:51:03 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@google.com> | 2016-01-19 12:12:40 -0800 |
commit | 81fba24969c0ca427a8cd3d31bea10749f15b737 (patch) | |
tree | 2493dc029be64bc830e388ab54aa45784943cf7c /drivers/staging/greybus/connection.c | |
parent | bfa9a5e2d07937a7620d55ff6eb55b480bc13100 (diff) |
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.c | 17 |
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); |