greybus: hd: Add API to release reserved CPorts
authorVaibhav Agarwal <vaibhav.agarwal@linaro.org>
Fri, 27 May 2016 05:19:23 +0000 (10:49 +0530)
committerGreg Kroah-Hartman <gregkh@google.com>
Fri, 27 May 2016 18:27:28 +0000 (11:27 -0700)
It is required to release all unique ids registered via ida_get_simple
to avoid any possible memory leak. cport_release() already exists with
special handling for ES2_CPORT_CDSI1, i.e. updating in_use flag without
removing associated ida.

So, added another API to release reserved cports CDSI0 and CDSI1. This
is intended to  be used only during es2_destroy().

Signed-off-by: Vaibhav Agarwal <vaibhav.agarwal@linaro.org>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/hd.c
drivers/staging/greybus/hd.h

index f64b592..5238825 100644 (file)
@@ -54,6 +54,14 @@ int gb_hd_cport_reserve(struct gb_host_device *hd, u16 cport_id)
 }
 EXPORT_SYMBOL_GPL(gb_hd_cport_reserve);
 
+void gb_hd_cport_release_reserved(struct gb_host_device *hd, u16 cport_id)
+{
+       struct ida *id_map = &hd->cport_id_map;
+
+       ida_simple_remove(id_map, cport_id);
+}
+EXPORT_SYMBOL_GPL(gb_hd_cport_release_reserved);
+
 /* Locking: Caller guarantees serialisation */
 int gb_hd_cport_allocate(struct gb_host_device *hd, int cport_id,
                                unsigned long flags)
index 8510816..ad22962 100644 (file)
@@ -61,6 +61,7 @@ struct gb_host_device {
 #define to_gb_host_device(d) container_of(d, struct gb_host_device, dev)
 
 int gb_hd_cport_reserve(struct gb_host_device *hd, u16 cport_id);
+void gb_hd_cport_release_reserved(struct gb_host_device *hd, u16 cport_id);
 int gb_hd_cport_allocate(struct gb_host_device *hd, int cport_id,
                                        unsigned long flags);
 void gb_hd_cport_release(struct gb_host_device *hd, u16 cport_id);