Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77bbbcf6 authored by Johan Hovold's avatar Johan Hovold Committed by Greg Kroah-Hartman
Browse files

greybus: operation: restructure activation state handling



Restructure the operation activation state handling in preparation for a
new disconnecting state.

Signed-off-by: default avatarJohan Hovold <johan@hovoldconsulting.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 8890f957
Loading
Loading
Loading
Loading
+14 −5
Original line number Diff line number Diff line
@@ -47,11 +47,15 @@ static int gb_operation_get_active(struct gb_operation *operation)

	spin_lock_irqsave(&connection->lock, flags);

	if (connection->state != GB_CONNECTION_STATE_ENABLED &&
			(connection->state != GB_CONNECTION_STATE_ENABLED_TX ||
			 gb_operation_is_incoming(operation))) {
		spin_unlock_irqrestore(&connection->lock, flags);
		return -ENOTCONN;
	switch (connection->state) {
	case GB_CONNECTION_STATE_ENABLED:
		break;
	case GB_CONNECTION_STATE_ENABLED_TX:
		if (gb_operation_is_incoming(operation))
			goto err_unlock;
		break;
	default:
		goto err_unlock;
	}

	if (operation->active++ == 0)
@@ -62,6 +66,11 @@ static int gb_operation_get_active(struct gb_operation *operation)
	spin_unlock_irqrestore(&connection->lock, flags);

	return 0;

err_unlock:
	spin_unlock_irqrestore(&connection->lock, flags);

	return -ENOTCONN;
}

/* Caller holds operation reference. */