mirror of https://gitee.com/openkylin/linux.git
greybus: connection: fix connection-state handling
Set connection state to ENABLE before sending the control connected message, and set state DISABLE after sending the control disconnected event. Remove the now unused ERROR connection state. Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
parent
2c92bd5235
commit
4d0bee1125
|
@ -403,15 +403,14 @@ int gb_connection_init(struct gb_connection *connection)
|
|||
if (ret)
|
||||
goto err_hd_cport_disable;
|
||||
|
||||
ret = gb_connection_control_connected(connection);
|
||||
if (ret)
|
||||
goto err_svc_destroy;
|
||||
|
||||
/* Need to enable the connection to initialize it */
|
||||
spin_lock_irq(&connection->lock);
|
||||
connection->state = GB_CONNECTION_STATE_ENABLED;
|
||||
spin_unlock_irq(&connection->lock);
|
||||
|
||||
ret = gb_connection_control_connected(connection);
|
||||
if (ret)
|
||||
goto err_svc_destroy;
|
||||
|
||||
ret = gb_connection_protocol_get_version(connection);
|
||||
if (ret)
|
||||
goto err_disconnect;
|
||||
|
@ -423,11 +422,11 @@ int gb_connection_init(struct gb_connection *connection)
|
|||
return 0;
|
||||
|
||||
err_disconnect:
|
||||
spin_lock_irq(&connection->lock);
|
||||
connection->state = GB_CONNECTION_STATE_ERROR;
|
||||
spin_unlock_irq(&connection->lock);
|
||||
|
||||
gb_connection_control_disconnected(connection);
|
||||
|
||||
spin_lock_irq(&connection->lock);
|
||||
connection->state = GB_CONNECTION_STATE_DISABLED;
|
||||
spin_unlock_irq(&connection->lock);
|
||||
err_svc_destroy:
|
||||
gb_connection_svc_connection_destroy(connection);
|
||||
err_hd_cport_disable:
|
||||
|
@ -451,7 +450,13 @@ void gb_connection_exit(struct gb_connection *connection)
|
|||
gb_connection_cancel_operations(connection, -ESHUTDOWN);
|
||||
|
||||
connection->protocol->connection_exit(connection);
|
||||
|
||||
gb_connection_control_disconnected(connection);
|
||||
|
||||
spin_lock_irq(&connection->lock);
|
||||
connection->state = GB_CONNECTION_STATE_DISABLED;
|
||||
spin_unlock_irq(&connection->lock);
|
||||
|
||||
gb_connection_svc_connection_destroy(connection);
|
||||
gb_connection_hd_cport_disable(connection);
|
||||
gb_connection_unbind_protocol(connection);
|
||||
|
|
|
@ -17,8 +17,7 @@ enum gb_connection_state {
|
|||
GB_CONNECTION_STATE_INVALID = 0,
|
||||
GB_CONNECTION_STATE_DISABLED = 1,
|
||||
GB_CONNECTION_STATE_ENABLED = 2,
|
||||
GB_CONNECTION_STATE_ERROR = 3,
|
||||
GB_CONNECTION_STATE_DESTROYING = 4,
|
||||
GB_CONNECTION_STATE_DESTROYING = 3,
|
||||
};
|
||||
|
||||
struct gb_connection {
|
||||
|
|
Loading…
Reference in New Issue