mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 05:48:40 +00:00
greybus: kill gb_operation_wait()
When a caller wants an operation to complete synchronously, there is generally no need for any other threads to wait for the operation's completion. So here's no need for gb_operation_wait() to be available for synchronous requests. At the moment, all operations are done synchronously. Knowing that, get rid of the public gb_operation_wait() function, and open-code it in gb_operation_request_send(). The public wait function can be re-implemented when it's really needed. With that function gone, the only waiter for the completion of an operation is the submitter itself, and only then if it's synchronous. So rather than complete_all(), we can simply use complete() to signal the submitter. Signed-off-by: Alex Elder <elder@linaro.org> Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
This commit is contained in:
parent
7035833f08
commit
2cf72a233a
1 changed files with 7 additions and 17 deletions
|
@ -156,25 +156,10 @@ static void gb_operation_complete(struct gb_operation *operation)
|
|||
if (operation->callback)
|
||||
operation->callback(operation);
|
||||
else
|
||||
complete_all(&operation->completion);
|
||||
complete(&operation->completion);
|
||||
gb_operation_put(operation);
|
||||
}
|
||||
|
||||
/*
|
||||
* Wait for a submitted operation to complete. Returns the result
|
||||
* of the operation; this will be -EINTR if the wait was interrupted.
|
||||
*/
|
||||
static int gb_operation_wait(struct gb_operation *operation)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = wait_for_completion_interruptible(&operation->completion);
|
||||
if (ret < 0)
|
||||
gb_operation_cancel(operation, -EINTR);
|
||||
|
||||
return operation->errno;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void gb_operation_request_handle(struct gb_operation *operation)
|
||||
{
|
||||
|
@ -478,7 +463,12 @@ int gb_operation_request_send(struct gb_operation *operation,
|
|||
if (ret || callback)
|
||||
return ret;
|
||||
|
||||
return gb_operation_wait(operation);
|
||||
/* Cancel the operation if interrupted */
|
||||
ret = wait_for_completion_interruptible(&operation->completion);
|
||||
if (ret < 0)
|
||||
gb_operation_cancel(operation, -EINTR);
|
||||
|
||||
return operation->errno;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue