greybus: distinguish incoming from outgoing requests

When we remove the mandatory status byte from response messages we
will no longer be able to use a zero-sized response to indicate
an operation is to be used for an incoming request.

Define a new function gb_operation_create_incoming() to be used
for incoming operations.  Change (and rename) gb_operation_create()
to be a helper that takes a Boolean to indicate which type is to be
created, and use a simple wrapper to expose the outgoing operation
creation routine.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
This commit is contained in:
Alex Elder 2014-11-19 17:55:02 -06:00 committed by Greg Kroah-Hartman
parent dcec19fb1b
commit 30a2964f84
1 changed files with 22 additions and 5 deletions

View File

@ -294,13 +294,13 @@ static void gb_operation_message_exit(struct gb_message *message)
* Returns a pointer to the new operation or a null pointer if an
* error occurs.
*/
struct gb_operation *gb_operation_create(struct gb_connection *connection,
u8 type, size_t request_size,
size_t response_size)
static struct gb_operation *
gb_operation_create_common(struct gb_connection *connection, bool outgoing,
u8 type, size_t request_size,
size_t response_size)
{
struct gb_operation *operation;
gfp_t gfp_flags = response_size ? GFP_KERNEL : GFP_ATOMIC;
bool outgoing = response_size != 0;
int ret;
operation = kmem_cache_zalloc(gb_operation_cache, gfp_flags);
@ -340,6 +340,23 @@ err_cache:
return NULL;
}
struct gb_operation *gb_operation_create(struct gb_connection *connection,
u8 type, size_t request_size,
size_t response_size)
{
return gb_operation_create_common(connection, true, type,
request_size, response_size);
}
static struct gb_operation *
gb_operation_create_incoming(struct gb_connection *connection,
u8 type, size_t request_size,
size_t response_size)
{
return gb_operation_create_common(connection, false, type,
request_size, response_size);
}
/*
* Destroy a previously created operation.
*/
@ -427,7 +444,7 @@ void gb_connection_recv_request(struct gb_connection *connection,
{
struct gb_operation *operation;
operation = gb_operation_create(connection, type, size, 0);
operation = gb_operation_create_incoming(connection, type, size, 0);
if (!operation) {
gb_connection_err(connection, "can't create operation");
return; /* XXX Respond with pre-allocated ENOMEM */