]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
greybus: distinguish incoming from outgoing requests
authorAlex Elder <elder@linaro.org>
Wed, 19 Nov 2014 23:55:02 +0000 (17:55 -0600)
committerGreg Kroah-Hartman <greg@kroah.com>
Thu, 20 Nov 2014 00:49:57 +0000 (16:49 -0800)
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>
drivers/staging/greybus/operation.c

index a2b27aeefb7fd0d11e536e3ccd93d1e363cdb059..8214a378efa208c511430105ce9b3343cd935438 100644 (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 @@ struct gb_operation *gb_operation_create(struct gb_connection *connection,
        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 */