diff mbox series

[RESEND,1/2] iio:core: Introduce unlocked version of iio_map_array_unregister()

Message ID 1606571059-13974-1-git-send-email-LinoSanfilippo@gmx.de (mailing list archive)
State New, archived
Headers show
Series [RESEND,1/2] iio:core: Introduce unlocked version of iio_map_array_unregister() | expand

Commit Message

Lino Sanfilippo Nov. 28, 2020, 1:44 p.m. UTC
Introduce an unlocked version of iio_map_array_unregister(). This function
can help to unwind in case of error while the iio_map_list_lock mutex is
held.

Signed-off-by: Lino Sanfilippo <LinoSanfilippo@gmx.de>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
---
 drivers/iio/inkern.c | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

Comments

Jonathan Cameron Nov. 29, 2020, 1:08 p.m. UTC | #1
On Sat, 28 Nov 2020 15:22:16 +0100
Lino Sanfilippo <LinoSanfilippo@gmx.de> wrote:

> Hi Jonathan,
> 
> On 28.11.20 at 14:54, Jonathan Cameron wrote:
> 
> > A few notes to make it harder for people to do that in future.
> > 1. Don't send patch series (or new versions of older patches) in reply
> >    to an existing thread.   They get lost and difficult to pull out.
> >    b4 can't automatically figure out which patches to pull from that
> >    original thread for example.
> > 2. Always version number whole series with same number, even if some patches
> >    are new.   So this should be v3.
> >  
> 
> Thanks for these hints, I will keep it in mind for future patch submissions.

Mailing list seems to have recovered so I can use b4 again :)

Applied to the togreg branch of iio.git and pushed out as testing so the
autobuilders can try to find anything we missed.

Thanks,

Jonathan

> 
> Regards,
> Lino
>
diff mbox series

Patch

diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c
index ede99e0..39c1d63 100644
--- a/drivers/iio/inkern.c
+++ b/drivers/iio/inkern.c
@@ -24,6 +24,21 @@  struct iio_map_internal {
 static LIST_HEAD(iio_map_list);
 static DEFINE_MUTEX(iio_map_list_lock);
 
+static int iio_map_array_unregister_locked(struct iio_dev *indio_dev)
+{
+	int ret = -ENODEV;
+	struct iio_map_internal *mapi, *next;
+
+	list_for_each_entry_safe(mapi, next, &iio_map_list, l) {
+		if (indio_dev == mapi->indio_dev) {
+			list_del(&mapi->l);
+			kfree(mapi);
+			ret = 0;
+		}
+	}
+	return ret;
+}
+
 int iio_map_array_register(struct iio_dev *indio_dev, struct iio_map *maps)
 {
 	int i = 0, ret = 0;
@@ -57,18 +72,12 @@  EXPORT_SYMBOL_GPL(iio_map_array_register);
  */
 int iio_map_array_unregister(struct iio_dev *indio_dev)
 {
-	int ret = -ENODEV;
-	struct iio_map_internal *mapi, *next;
+	int ret;
 
 	mutex_lock(&iio_map_list_lock);
-	list_for_each_entry_safe(mapi, next, &iio_map_list, l) {
-		if (indio_dev == mapi->indio_dev) {
-			list_del(&mapi->l);
-			kfree(mapi);
-			ret = 0;
-		}
-	}
+	ret = iio_map_array_unregister_locked(indio_dev);
 	mutex_unlock(&iio_map_list_lock);
+
 	return ret;
 }
 EXPORT_SYMBOL_GPL(iio_map_array_unregister);