From 30a2964f8455ede0f2416a3b6a28b60acc4b569c Mon Sep 17 00:00:00 2001 From: Alex Elder Date: Wed, 19 Nov 2014 17:55:02 -0600 Subject: [PATCH] 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 Signed-off-by: Greg Kroah-Hartman --- drivers/staging/greybus/operation.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c index a2b27aeefb7f..8214a378efa2 100644 --- a/drivers/staging/greybus/operation.c +++ b/drivers/staging/greybus/operation.c @@ -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 */ -- 2.20.1