From 477ad1921c0413be13f94be7ed68ef787619b391 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Wed, 15 Feb 2012 19:48:00 +0000 Subject: [PATCH] --- yaml --- r: 289142 b: refs/heads/master c: ac917a81117ce0286847666b55dd265f6cda8383 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/staging/iio/iio.h | 2 ++ trunk/drivers/staging/iio/industrialio-core.c | 4 ++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 293735fba992..41125a7ac0e8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 08cd9ef4eca0b53cdae190b718e4945408c7d3b8 +refs/heads/master: ac917a81117ce0286847666b55dd265f6cda8383 diff --git a/trunk/drivers/staging/iio/iio.h b/trunk/drivers/staging/iio/iio.h index be6ced31f65e..478dbe5924cb 100644 --- a/trunk/drivers/staging/iio/iio.h +++ b/trunk/drivers/staging/iio/iio.h @@ -310,6 +310,7 @@ struct iio_buffer_setup_ops { * @chan_attr_group: [INTERN] group for all attrs in base directory * @name: [DRIVER] name of the device. * @info: [DRIVER] callbacks and constant info from driver + * @info_exist_lock: [INTERN] lock to prevent use during removal * @chrdev: [INTERN] associated character device * @groups: [INTERN] attribute groups * @groupcounter: [INTERN] index of next attribute group @@ -340,6 +341,7 @@ struct iio_dev { struct attribute_group chan_attr_group; const char *name; const struct iio_info *info; + struct mutex info_exist_lock; const struct iio_buffer_setup_ops *setup_ops; struct cdev chrdev; #define IIO_MAX_GROUPS 6 diff --git a/trunk/drivers/staging/iio/industrialio-core.c b/trunk/drivers/staging/iio/industrialio-core.c index e4824fe8b405..3a2d08026624 100644 --- a/trunk/drivers/staging/iio/industrialio-core.c +++ b/trunk/drivers/staging/iio/industrialio-core.c @@ -594,6 +594,7 @@ struct iio_dev *iio_allocate_device(int sizeof_priv) device_initialize(&dev->dev); dev_set_drvdata(&dev->dev, (void *)dev); mutex_init(&dev->mlock); + mutex_init(&dev->info_exist_lock); dev->id = ida_simple_get(&iio_ida, 0, 0, GFP_KERNEL); if (dev->id < 0) { @@ -718,6 +719,9 @@ EXPORT_SYMBOL(iio_device_register); void iio_device_unregister(struct iio_dev *indio_dev) { + mutex_lock(&indio_dev->info_exist_lock); + indio_dev->info = NULL; + mutex_unlock(&indio_dev->info_exist_lock); device_unregister(&indio_dev->dev); } EXPORT_SYMBOL(iio_device_unregister);