greybus: get rid of cport_id_map_lock
authorAlex Elder <elder@linaro.org>
Mon, 17 Nov 2014 14:08:45 +0000 (08:08 -0600)
committerGreg Kroah-Hartman <greg@kroah.com>
Mon, 17 Nov 2014 18:41:19 +0000 (10:41 -0800)
The only time we get a cport id is when setting up a new connection.
We already have a (coarser-grained) spin lock that's used to protect
the connection lists, and we can use that same lock for protecting
the hd's connection id map.

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/core.c
drivers/staging/greybus/greybus.h

index ecd7931..cb6e2e1 100644 (file)
@@ -42,9 +42,9 @@ static bool gb_connection_hd_cport_id_alloc(struct gb_connection *connection)
        struct ida *ida = &connection->hd->cport_id_map;
        int id;
 
-       spin_lock(&connection->hd->cport_id_map_lock);
+       spin_lock_irq(&gb_connections_lock);
        id = ida_simple_get(ida, 0, HOST_DEV_CPORT_ID_MAX, GFP_KERNEL);
-       spin_unlock(&connection->hd->cport_id_map_lock);
+       spin_unlock_irq(&gb_connections_lock);
        if (id < 0)
                return false;
 
@@ -60,9 +60,9 @@ static void gb_connection_hd_cport_id_free(struct gb_connection *connection)
 {
        struct ida *ida = &connection->hd->cport_id_map;
 
-       spin_lock(&connection->hd->cport_id_map_lock);
+       spin_lock_irq(&gb_connections_lock);
        ida_simple_remove(ida, connection->hd_cport_id);
-       spin_unlock(&connection->hd->cport_id_map_lock);
+       spin_unlock_irq(&gb_connections_lock);
        connection->hd_cport_id = CPORT_ID_BAD;
 }
 
index 96bd974..26e4b44 100644 (file)
@@ -188,7 +188,6 @@ struct greybus_host_device *greybus_create_hd(struct greybus_host_driver *driver
        INIT_LIST_HEAD(&hd->modules);
        INIT_LIST_HEAD(&hd->connections);
        ida_init(&hd->cport_id_map);
-       spin_lock_init(&hd->cport_id_map_lock);
 
        return hd;
 }
index bb39528..90469bb 100644 (file)
@@ -168,7 +168,6 @@ struct greybus_host_device {
        struct list_head modules;
        struct list_head connections;
        struct ida cport_id_map;
-       spinlock_t cport_id_map_lock;
        u8 device_id;
 
        /* Private data for the host driver */