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

greybus: operation: clean up operation work function



Call request handler helper explicitly from the work function rather
than overload the operation completion callback.

Signed-off-by: default avatarJohan Hovold <johan@hovoldconsulting.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent db1481ba
Loading
Loading
Loading
Loading
+10 −11
Original line number Diff line number Diff line
@@ -212,9 +212,10 @@ static void gb_operation_request_handle(struct gb_operation *operation)
}

/*
 * Complete an operation in non-atomic context.  For incoming
 * requests, the callback function is the request handler, and
 * the operation result should be -EINPROGRESS at this point.
 * Process operation work.
 *
 * For incoming requests, call the protocol request handler. The operation
 * result should be -EINPROGRESS at this point.
 *
 * For outgoing requests, the operation result value should have
 * been set before queueing this.  The operation callback function
@@ -227,6 +228,9 @@ static void gb_operation_work(struct work_struct *work)

	operation = container_of(work, struct gb_operation, work);

	if (gb_operation_is_incoming(operation))
		gb_operation_request_handle(operation);
	else
		operation->callback(operation);

	gb_operation_put_active(operation);
@@ -789,14 +793,9 @@ static void gb_connection_recv_request(struct gb_connection *connection,
	gb_operation_get_active(operation);

	/*
	 * Incoming requests are handled by arranging for the
	 * request handler to be the operation's callback function.
	 *
	 * The last thing the handler does is send a response
	 * message. The initial reference to the operation will be
	 * dropped when the handler returns.
	 * The initial reference to the operation will be dropped when the
	 * request handler returns.
	 */
	operation->callback = gb_operation_request_handle;
	if (gb_operation_result_set(operation, -EINPROGRESS))
		queue_work(gb_operation_workqueue, &operation->work);
}