greybus: allocate connection host cport id
authorAlex Elder <elder@linaro.org>
Thu, 2 Oct 2014 17:30:04 +0000 (12:30 -0500)
committerGreg Kroah-Hartman <greg@kroah.com>
Fri, 3 Oct 2014 04:22:45 +0000 (21:22 -0700)
Allocate a cport id from the host device whenever creating a
connection.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/staging/greybus/connection.c
drivers/staging/greybus/connection.h

index fa5ab5d..b16ac4c 100644 (file)
@@ -23,7 +23,7 @@
  * pointer otherwise.
  */
 struct gb_connection *gb_connection_create(struct greybus_host_device *hd,
-                               u16 cport_id, struct gb_function *function)
+                               struct gb_function *function)
 {
        struct gb_connection *connection;
 
@@ -31,8 +31,13 @@ struct gb_connection *gb_connection_create(struct greybus_host_device *hd,
        if (!connection)
                return NULL;
 
+       connection->cport_id = greybus_hd_cport_id_alloc(hd);
+       if (connection->cport_id == CPORT_ID_BAD) {
+               kfree(connection);
+               return NULL;
+       }
+
        connection->hd = hd;                    /* XXX refcount? */
-       connection->cport_id = cport_id;
        connection->function = function;        /* XXX refcount? */
        INIT_LIST_HEAD(&connection->operations);
        atomic_set(&connection->op_cycle, 0);
@@ -51,6 +56,7 @@ void gb_connection_destroy(struct gb_connection *connection)
        /* XXX Need to wait for any outstanding requests to complete */
        WARN_ON(!list_empty(&connection->operations));
 
+       greybus_hd_cport_id_free(connection->hd, connection->cport_id);
        /* kref_put(function); */
        /* kref_put(hd); */
        kfree(connection);
index 6094fb4..f06ff92 100644 (file)
@@ -25,7 +25,7 @@ struct gb_connection {
 };
 
 struct gb_connection *gb_connection_create(struct greybus_host_device *hd,
-                               u16 cport_id, struct gb_function *function);
+                                       struct gb_function *function);
 void gb_connection_destroy(struct gb_connection *connection);
 
 u16 gb_connection_op_id(struct gb_connection *connection);