All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/9] Trigger locking rework and splitting up trigger.h
@ 2011-08-24 16:28 Jonathan Cameron
  2011-08-24 16:28 ` [PATCH 1/9] staging:iio:triggers. Add a reference get to the core for triggers Jonathan Cameron
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: Jonathan Cameron @ 2011-08-24 16:28 UTC (permalink / raw)
  To: greg; +Cc: linux-iio, Jonathan Cameron

Hi Greg,

This series has been floating around for a while and fixes some nasty
issues with reference counting on triggers + gets rid of some work
arounds people were using in drivers for the above issue.  Series
has had a few little reorganization patches added since first posting,
but nothing controversial.

Whilst some of this is technically stable material it's probably better
to wait an see if anyone cares then do a backport as and when.

Thanks as ever for your hard work.

Jonathan

Original text was:

This is the result of actually checking the locking code for
triggers and ensuring saferemoval.

One kicker in here.  Any driver that can do dynamic creation / removal
of triggers (currently only sysfs trigger), must be very very careful.
It's possible post this series for two devices to apparently be connected
to a trigger with the same name, but only one be connected to the current
instance of that trigger.  To my mind, if you've got into this mess, your
userspace is borked anyway and it doesn't actually cause a crash (unlike
before this set), it just doesn't work as expected.

If anyone can see a case I've missed, please do point it out.

Note this also includes the trigger.h split and the semantic change
discussed in 'Splitting trigger header in two and barriers'.

That is, if your driver is currently using a trigger (other than one
it provides), you will not be able to remove the module.  The previous
approach of just disconnected on removal would double release some stuff
anyway causing lots of unpleasant messages.

Whilst this stuff is definitely broken in current mainline, I'm not
proposing to rush this set out.


Jonathan Cameron (9):
  staging:iio:triggers. Add a reference get to the core for triggers.
  staging:iio:triggers reorder module put and device put to ensure that
    the ops are still there if put results in device deletion.
  staging:iio:trigger:sysfs trigger: Add a release function to avoid
    warning on module removal.
  staging:iio:pollfunc: Make explicit that private data is always
    pointer to a struct iio_dev.
  staging:iio: prevent removal of module connected to trigger.
  staging:iio:rename trigger_consumer.h to indicate it is core only.
  staging:iio: spit trigger.h into provider and consumer parts.
  staging:iio:trigger core. Trivial code cleanups.
  staging:iio:trigger push functions that don't need to be generaly
    available down into the core.

 drivers/staging/iio/accel/adis16201_ring.c   |    4 +-
 drivers/staging/iio/accel/adis16203_ring.c   |    4 +-
 drivers/staging/iio/accel/adis16204_ring.c   |    4 +-
 drivers/staging/iio/accel/adis16209_ring.c   |    4 +-
 drivers/staging/iio/accel/adis16240_ring.c   |    4 +-
 drivers/staging/iio/accel/lis3l02dq_ring.c   |    3 +-
 drivers/staging/iio/adc/ad7192.c             |    9 +--
 drivers/staging/iio/adc/ad7298_ring.c        |    9 +--
 drivers/staging/iio/adc/ad7476_ring.c        |   10 +---
 drivers/staging/iio/adc/ad7606_ring.c        |   10 +---
 drivers/staging/iio/adc/ad7793.c             |    9 +--
 drivers/staging/iio/adc/ad7887_ring.c        |   10 +---
 drivers/staging/iio/adc/ad799x_ring.c        |   10 +---
 drivers/staging/iio/adc/max1363_ring.c       |    9 +--
 drivers/staging/iio/gyro/adis16260_ring.c    |    4 +-
 drivers/staging/iio/iio_core_trigger.h       |   46 ++++++++++++++
 drivers/staging/iio/imu/adis16400_ring.c     |    4 +-
 drivers/staging/iio/industrialio-core.c      |    2 +-
 drivers/staging/iio/industrialio-trigger.c   |   65 +++++++++++++--------
 drivers/staging/iio/meter/ade7758_ring.c     |   10 +---
 drivers/staging/iio/trigger.h                |   83 +-------------------------
 drivers/staging/iio/trigger/iio-trig-sysfs.c |    7 ++
 drivers/staging/iio/trigger_consumer.h       |   71 ++++++++++++----------
 23 files changed, 169 insertions(+), 222 deletions(-)
 create mode 100644 drivers/staging/iio/iio_core_trigger.h

-- 
1.7.3.4

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/9] staging:iio:triggers. Add a reference get to the core for triggers.
  2011-08-24 16:28 [PATCH 0/9] Trigger locking rework and splitting up trigger.h Jonathan Cameron
@ 2011-08-24 16:28 ` Jonathan Cameron
  2011-08-24 16:28 ` [PATCH 2/9] staging:iio:triggers reorder module put and device put to ensure that the ops are still there if put results in device deletion Jonathan Cameron
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Jonathan Cameron @ 2011-08-24 16:28 UTC (permalink / raw)
  To: greg; +Cc: linux-iio, Jonathan Cameron

This is to do with dynamically allocated triggers and the need to ensure
the underlying structures don't go away when a consumer is using them.

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/industrialio-trigger.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c
index ebacfda..89a9934 100644
--- a/drivers/staging/iio/industrialio-trigger.c
+++ b/drivers/staging/iio/industrialio-trigger.c
@@ -8,7 +8,6 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/module.h>
 #include <linux/idr.h>
 #include <linux/err.h>
 #include <linux/device.h>
@@ -478,6 +477,7 @@ struct iio_trigger *iio_allocate_trigger(const char *fmt, ...)
 					  IRQ_NOPROBE);
 		}
 		iio_get();
+		get_device(&trig->dev);
 	}
 	return trig;
 }
@@ -501,6 +501,9 @@ EXPORT_SYMBOL(iio_device_register_trigger_consumer);
 
 int iio_device_unregister_trigger_consumer(struct iio_dev *dev_info)
 {
+	/* Clean up and associated but not attached triggers references */
+	if (dev_info->trig)
+		iio_put_trigger(dev_info->trig);
 	sysfs_remove_group(&dev_info->dev.kobj,
 			   &iio_trigger_consumer_attr_group);
 	return 0;
-- 
1.7.3.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 2/9] staging:iio:triggers reorder module put and device put to ensure that the ops are still there if put results in device deletion.
  2011-08-24 16:28 [PATCH 0/9] Trigger locking rework and splitting up trigger.h Jonathan Cameron
  2011-08-24 16:28 ` [PATCH 1/9] staging:iio:triggers. Add a reference get to the core for triggers Jonathan Cameron
@ 2011-08-24 16:28 ` Jonathan Cameron
  2011-08-24 16:28 ` [PATCH 3/9] staging:iio:trigger:sysfs trigger: Add a release function to avoid warning on module removal Jonathan Cameron
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Jonathan Cameron @ 2011-08-24 16:28 UTC (permalink / raw)
  To: greg; +Cc: linux-iio, Jonathan Cameron

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/trigger.h |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/iio/trigger.h b/drivers/staging/iio/trigger.h
index 325e086..234c774 100644
--- a/drivers/staging/iio/trigger.h
+++ b/drivers/staging/iio/trigger.h
@@ -104,14 +104,14 @@ static inline struct iio_trigger *to_iio_trigger(struct device *d)
 
 static inline void iio_put_trigger(struct iio_trigger *trig)
 {
-	put_device(&trig->dev);
 	module_put(trig->ops->owner);
+	put_device(&trig->dev);
 };
 
 static inline void iio_get_trigger(struct iio_trigger *trig)
 {
-	__module_get(trig->ops->owner);
 	get_device(&trig->dev);
+	__module_get(trig->ops->owner);
 };
 
 /**
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 3/9] staging:iio:trigger:sysfs trigger: Add a release function to avoid warning on module removal.
  2011-08-24 16:28 [PATCH 0/9] Trigger locking rework and splitting up trigger.h Jonathan Cameron
  2011-08-24 16:28 ` [PATCH 1/9] staging:iio:triggers. Add a reference get to the core for triggers Jonathan Cameron
  2011-08-24 16:28 ` [PATCH 2/9] staging:iio:triggers reorder module put and device put to ensure that the ops are still there if put results in device deletion Jonathan Cameron
@ 2011-08-24 16:28 ` Jonathan Cameron
  2011-08-24 16:28 ` [PATCH 4/9] staging:iio:pollfunc: Make explicit that private data is always pointer to a struct iio_dev Jonathan Cameron
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Jonathan Cameron @ 2011-08-24 16:28 UTC (permalink / raw)
  To: greg; +Cc: linux-iio, Jonathan Cameron

The device is static and should never actually be deleted. The release
is just to avoid a warning from the kernel.

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/trigger/iio-trig-sysfs.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/iio/trigger/iio-trig-sysfs.c b/drivers/staging/iio/trigger/iio-trig-sysfs.c
index 346b30c..174dc65 100644
--- a/drivers/staging/iio/trigger/iio-trig-sysfs.c
+++ b/drivers/staging/iio/trigger/iio-trig-sysfs.c
@@ -77,9 +77,16 @@ static const struct attribute_group *iio_sysfs_trig_groups[] = {
 	NULL
 };
 
+
+/* Nothing to actually do upon release */
+static void iio_trigger_sysfs_release(struct device *dev)
+{
+}
+
 static struct device iio_sysfs_trig_dev = {
 	.bus = &iio_bus_type,
 	.groups = iio_sysfs_trig_groups,
+	.release = &iio_trigger_sysfs_release,
 };
 
 static ssize_t iio_sysfs_trigger_poll(struct device *dev,
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 4/9] staging:iio:pollfunc: Make explicit that private data is always pointer to a struct iio_dev.
  2011-08-24 16:28 [PATCH 0/9] Trigger locking rework and splitting up trigger.h Jonathan Cameron
                   ` (2 preceding siblings ...)
  2011-08-24 16:28 ` [PATCH 3/9] staging:iio:trigger:sysfs trigger: Add a release function to avoid warning on module removal Jonathan Cameron
@ 2011-08-24 16:28 ` Jonathan Cameron
  2011-08-24 16:28 ` [PATCH 5/9] staging:iio: prevent removal of module connected to trigger Jonathan Cameron
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Jonathan Cameron @ 2011-08-24 16:28 UTC (permalink / raw)
  To: greg; +Cc: linux-iio, Jonathan Cameron

This is always true, so lets make it explicit.

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/accel/adis16201_ring.c |    2 +-
 drivers/staging/iio/accel/adis16203_ring.c |    2 +-
 drivers/staging/iio/accel/adis16204_ring.c |    2 +-
 drivers/staging/iio/accel/adis16209_ring.c |    2 +-
 drivers/staging/iio/accel/adis16240_ring.c |    2 +-
 drivers/staging/iio/accel/lis3l02dq_ring.c |    2 +-
 drivers/staging/iio/adc/ad7192.c           |    2 +-
 drivers/staging/iio/adc/ad7298_ring.c      |    2 +-
 drivers/staging/iio/adc/ad7476_ring.c      |    2 +-
 drivers/staging/iio/adc/ad7606_ring.c      |    3 +--
 drivers/staging/iio/adc/ad7793.c           |    2 +-
 drivers/staging/iio/adc/ad7887_ring.c      |    2 +-
 drivers/staging/iio/adc/ad799x_ring.c      |    2 +-
 drivers/staging/iio/adc/max1363_ring.c     |    2 +-
 drivers/staging/iio/gyro/adis16260_ring.c  |    2 +-
 drivers/staging/iio/imu/adis16400_ring.c   |    2 +-
 drivers/staging/iio/industrialio-trigger.c |    4 ++--
 drivers/staging/iio/meter/ade7758_ring.c   |    2 +-
 drivers/staging/iio/trigger.h              |    6 +++---
 19 files changed, 22 insertions(+), 23 deletions(-)

diff --git a/drivers/staging/iio/accel/adis16201_ring.c b/drivers/staging/iio/accel/adis16201_ring.c
index 9925785..880c490 100644
--- a/drivers/staging/iio/accel/adis16201_ring.c
+++ b/drivers/staging/iio/accel/adis16201_ring.c
@@ -59,7 +59,7 @@ static int adis16201_read_ring_data(struct iio_dev *indio_dev, u8 *rx)
 static irqreturn_t adis16201_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct adis16201_state *st = iio_priv(indio_dev);
 	struct iio_ring_buffer *ring = indio_dev->ring;
 
diff --git a/drivers/staging/iio/accel/adis16203_ring.c b/drivers/staging/iio/accel/adis16203_ring.c
index 049174d..4398fd9 100644
--- a/drivers/staging/iio/accel/adis16203_ring.c
+++ b/drivers/staging/iio/accel/adis16203_ring.c
@@ -59,7 +59,7 @@ static int adis16203_read_ring_data(struct device *dev, u8 *rx)
 static irqreturn_t adis16203_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct adis16203_state *st = iio_priv(indio_dev);
 	struct iio_ring_buffer *ring = indio_dev->ring;
 
diff --git a/drivers/staging/iio/accel/adis16204_ring.c b/drivers/staging/iio/accel/adis16204_ring.c
index b173856..385e350 100644
--- a/drivers/staging/iio/accel/adis16204_ring.c
+++ b/drivers/staging/iio/accel/adis16204_ring.c
@@ -57,7 +57,7 @@ static int adis16204_read_ring_data(struct device *dev, u8 *rx)
 static irqreturn_t adis16204_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct adis16204_state *st = iio_priv(indio_dev);
 	struct iio_ring_buffer *ring = indio_dev->ring;
 	int i = 0;
diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging/iio/accel/adis16209_ring.c
index 7547ddb..1652f15 100644
--- a/drivers/staging/iio/accel/adis16209_ring.c
+++ b/drivers/staging/iio/accel/adis16209_ring.c
@@ -57,7 +57,7 @@ static int adis16209_read_ring_data(struct device *dev, u8 *rx)
 static irqreturn_t adis16209_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct adis16209_state *st = iio_priv(indio_dev);
 	struct iio_ring_buffer *ring = indio_dev->ring;
 
diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging/iio/accel/adis16240_ring.c
index 9bb4ff8..9d4ba15 100644
--- a/drivers/staging/iio/accel/adis16240_ring.c
+++ b/drivers/staging/iio/accel/adis16240_ring.c
@@ -54,7 +54,7 @@ static int adis16240_read_ring_data(struct device *dev, u8 *rx)
 static irqreturn_t adis16240_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct adis16240_state *st = iio_priv(indio_dev);
 	struct iio_ring_buffer *ring = indio_dev->ring;
 
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index c53985e..7f7dca4 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -160,7 +160,7 @@ static int lis3l02dq_get_ring_element(struct iio_dev *indio_dev,
 static irqreturn_t lis3l02dq_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct iio_ring_buffer *ring = indio_dev->ring;
 	int len = 0;
 	size_t datasize = ring->access->get_bytes_per_datum(ring);
diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
index c5a8b50..1b07b63 100644
--- a/drivers/staging/iio/adc/ad7192.c
+++ b/drivers/staging/iio/adc/ad7192.c
@@ -537,7 +537,7 @@ static int ad7192_ring_postdisable(struct iio_dev *indio_dev)
 static irqreturn_t ad7192_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct iio_ring_buffer *ring = indio_dev->ring;
 	struct ad7192_state *st = iio_priv(indio_dev);
 	s64 dat64[2];
diff --git a/drivers/staging/iio/adc/ad7298_ring.c b/drivers/staging/iio/adc/ad7298_ring.c
index 7423d4a..ab828a9 100644
--- a/drivers/staging/iio/adc/ad7298_ring.c
+++ b/drivers/staging/iio/adc/ad7298_ring.c
@@ -117,7 +117,7 @@ static int ad7298_ring_preenable(struct iio_dev *indio_dev)
 static irqreturn_t ad7298_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct ad7298_state *st = iio_priv(indio_dev);
 	struct iio_ring_buffer *ring = indio_dev->ring;
 	s64 time_ns;
diff --git a/drivers/staging/iio/adc/ad7476_ring.c b/drivers/staging/iio/adc/ad7476_ring.c
index 86bbba8..2597fda 100644
--- a/drivers/staging/iio/adc/ad7476_ring.c
+++ b/drivers/staging/iio/adc/ad7476_ring.c
@@ -76,7 +76,7 @@ static int ad7476_ring_preenable(struct iio_dev *indio_dev)
 static irqreturn_t ad7476_trigger_handler(int irq, void  *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct ad7476_state *st = iio_priv(indio_dev);
 	s64 time_ns;
 	__u8 *rxbuf;
diff --git a/drivers/staging/iio/adc/ad7606_ring.c b/drivers/staging/iio/adc/ad7606_ring.c
index f8f574a..52b0c1d 100644
--- a/drivers/staging/iio/adc/ad7606_ring.c
+++ b/drivers/staging/iio/adc/ad7606_ring.c
@@ -80,8 +80,7 @@ static int ad7606_ring_preenable(struct iio_dev *indio_dev)
 static irqreturn_t ad7606_trigger_handler_th_bh(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
-	struct ad7606_state *st = iio_priv(indio_dev);
+	struct ad7606_state *st = iio_priv(pf->indio_dev);
 
 	gpio_set_value(st->pdata->gpio_convst, 1);
 
diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c
index ab6f109..aab7528 100644
--- a/drivers/staging/iio/adc/ad7793.c
+++ b/drivers/staging/iio/adc/ad7793.c
@@ -401,7 +401,7 @@ static int ad7793_ring_postdisable(struct iio_dev *indio_dev)
 static irqreturn_t ad7793_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct iio_ring_buffer *ring = indio_dev->ring;
 	struct ad7793_state *st = iio_priv(indio_dev);
 	s64 dat64[2];
diff --git a/drivers/staging/iio/adc/ad7887_ring.c b/drivers/staging/iio/adc/ad7887_ring.c
index b77b120..05ae4a0 100644
--- a/drivers/staging/iio/adc/ad7887_ring.c
+++ b/drivers/staging/iio/adc/ad7887_ring.c
@@ -112,7 +112,7 @@ static int ad7887_ring_postdisable(struct iio_dev *indio_dev)
 static irqreturn_t ad7887_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct ad7887_state *st = iio_priv(indio_dev);
 	struct iio_ring_buffer *ring = indio_dev->ring;
 	s64 time_ns;
diff --git a/drivers/staging/iio/adc/ad799x_ring.c b/drivers/staging/iio/adc/ad799x_ring.c
index d84efd6..7980fe5 100644
--- a/drivers/staging/iio/adc/ad799x_ring.c
+++ b/drivers/staging/iio/adc/ad799x_ring.c
@@ -105,7 +105,7 @@ static int ad799x_ring_preenable(struct iio_dev *indio_dev)
 static irqreturn_t ad799x_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct ad799x_state *st = iio_priv(indio_dev);
 	struct iio_ring_buffer *ring = indio_dev->ring;
 	s64 time_ns;
diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c
index 696676f..caa63cb 100644
--- a/drivers/staging/iio/adc/max1363_ring.c
+++ b/drivers/staging/iio/adc/max1363_ring.c
@@ -104,7 +104,7 @@ static int max1363_ring_preenable(struct iio_dev *indio_dev)
 static irqreturn_t max1363_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct max1363_state *st = iio_priv(indio_dev);
 	s64 time_ns;
 	__u8 *rxbuf;
diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/iio/gyro/adis16260_ring.c
index 92d1fac..36f72c3 100644
--- a/drivers/staging/iio/gyro/adis16260_ring.c
+++ b/drivers/staging/iio/gyro/adis16260_ring.c
@@ -60,7 +60,7 @@ static int adis16260_read_ring_data(struct device *dev, u8 *rx)
 static irqreturn_t adis16260_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct adis16260_state *st = iio_priv(indio_dev);
 	struct iio_ring_buffer *ring = indio_dev->ring;
 	int i = 0;
diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c
index ef38477..56385d3 100644
--- a/drivers/staging/iio/imu/adis16400_ring.c
+++ b/drivers/staging/iio/imu/adis16400_ring.c
@@ -111,7 +111,7 @@ static int adis16350_spi_read_all(struct device *dev, u8 *rx)
 static irqreturn_t adis16400_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct adis16400_state *st = iio_priv(indio_dev);
 	struct iio_ring_buffer *ring = indio_dev->ring;
 	int i = 0, j, ret = 0;
diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c
index 89a9934..ccfd558 100644
--- a/drivers/staging/iio/industrialio-trigger.c
+++ b/drivers/staging/iio/industrialio-trigger.c
@@ -274,7 +274,7 @@ struct iio_poll_func
 *iio_alloc_pollfunc(irqreturn_t (*h)(int irq, void *p),
 		    irqreturn_t (*thread)(int irq, void *p),
 		    int type,
-		    void *private,
+		    struct iio_dev *indio_dev,
 		    const char *fmt,
 		    ...)
 {
@@ -294,7 +294,7 @@ struct iio_poll_func
 	pf->h = h;
 	pf->thread = thread;
 	pf->type = type;
-	pf->private_data = private;
+	pf->indio_dev = indio_dev;
 
 	return pf;
 }
diff --git a/drivers/staging/iio/meter/ade7758_ring.c b/drivers/staging/iio/meter/ade7758_ring.c
index c9271d0..c29beec 100644
--- a/drivers/staging/iio/meter/ade7758_ring.c
+++ b/drivers/staging/iio/meter/ade7758_ring.c
@@ -60,7 +60,7 @@ out:
 static irqreturn_t ade7758_trigger_handler(int irq, void *p)
 {
 	struct iio_poll_func *pf = p;
-	struct iio_dev *indio_dev = pf->private_data;
+	struct iio_dev *indio_dev = pf->indio_dev;
 	struct iio_ring_buffer *ring = indio_dev->ring;
 	struct ade7758_state *st = iio_priv(indio_dev);
 	s64 dat64[2];
diff --git a/drivers/staging/iio/trigger.h b/drivers/staging/iio/trigger.h
index 234c774..010da1d 100644
--- a/drivers/staging/iio/trigger.h
+++ b/drivers/staging/iio/trigger.h
@@ -76,7 +76,7 @@ struct iio_trigger {
 /**
  * struct iio_poll_func - poll function pair
  *
- * @private_data:		data specific to device (passed into poll func)
+ * @indio_dev:			data specific to device (passed into poll func)
  * @h:				the function that is actually run on trigger
  * @thread:			threaded interrupt part
  * @type:			the type of interrupt (basically if oneshot)
@@ -88,7 +88,7 @@ struct iio_trigger {
  *				passes it via here.
  **/
 struct iio_poll_func {
-	void				*private_data;
+	struct iio_dev *indio_dev;
 	irqreturn_t (*h)(int irq, void *p);
 	irqreturn_t (*thread)(int irq, void *p);
 	int type;
@@ -180,7 +180,7 @@ struct iio_poll_func
 *iio_alloc_pollfunc(irqreturn_t (*h)(int irq, void *p),
 		    irqreturn_t (*thread)(int irq, void *p),
 		    int type,
-		    void *private,
+		    struct iio_dev *indio_dev,
 		    const char *fmt,
 		    ...);
 void iio_dealloc_pollfunc(struct iio_poll_func *pf);
-- 
1.7.3.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 5/9] staging:iio: prevent removal of module connected to trigger.
  2011-08-24 16:28 [PATCH 0/9] Trigger locking rework and splitting up trigger.h Jonathan Cameron
                   ` (3 preceding siblings ...)
  2011-08-24 16:28 ` [PATCH 4/9] staging:iio:pollfunc: Make explicit that private data is always pointer to a struct iio_dev Jonathan Cameron
@ 2011-08-24 16:28 ` Jonathan Cameron
  2011-08-24 16:28 ` [PATCH 6/9] staging:iio:rename trigger_consumer.h to indicate it is core only Jonathan Cameron
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Jonathan Cameron @ 2011-08-24 16:28 UTC (permalink / raw)
  To: greg; +Cc: linux-iio, Jonathan Cameron

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/adc/ad7192.c           |    6 ------
 drivers/staging/iio/adc/ad7298_ring.c      |    5 -----
 drivers/staging/iio/adc/ad7476_ring.c      |    6 ------
 drivers/staging/iio/adc/ad7606_ring.c      |    5 -----
 drivers/staging/iio/adc/ad7793.c           |    6 ------
 drivers/staging/iio/adc/ad7887_ring.c      |    6 ------
 drivers/staging/iio/adc/ad799x_ring.c      |    6 ------
 drivers/staging/iio/adc/max1363_ring.c     |    5 -----
 drivers/staging/iio/industrialio-trigger.c |    3 +++
 drivers/staging/iio/meter/ade7758_ring.c   |    6 ------
 10 files changed, 3 insertions(+), 51 deletions(-)

diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
index 1b07b63..fd37908 100644
--- a/drivers/staging/iio/adc/ad7192.c
+++ b/drivers/staging/iio/adc/ad7192.c
@@ -605,12 +605,6 @@ error_ret:
 
 static void ad7192_ring_cleanup(struct iio_dev *indio_dev)
 {
-	/* ensure that the trigger has been detached */
-	if (indio_dev->trig) {
-		iio_put_trigger(indio_dev->trig);
-		iio_trigger_dettach_poll_func(indio_dev->trig,
-					      indio_dev->pollfunc);
-	}
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
 	iio_sw_rb_free(indio_dev->ring);
 }
diff --git a/drivers/staging/iio/adc/ad7298_ring.c b/drivers/staging/iio/adc/ad7298_ring.c
index ab828a9..5b87926 100644
--- a/drivers/staging/iio/adc/ad7298_ring.c
+++ b/drivers/staging/iio/adc/ad7298_ring.c
@@ -189,11 +189,6 @@ error_ret:
 
 void ad7298_ring_cleanup(struct iio_dev *indio_dev)
 {
-	if (indio_dev->trig) {
-		iio_put_trigger(indio_dev->trig);
-		iio_trigger_dettach_poll_func(indio_dev->trig,
-					      indio_dev->pollfunc);
-	}
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
 	iio_sw_rb_free(indio_dev->ring);
 }
diff --git a/drivers/staging/iio/adc/ad7476_ring.c b/drivers/staging/iio/adc/ad7476_ring.c
index 2597fda..41d6b8d 100644
--- a/drivers/staging/iio/adc/ad7476_ring.c
+++ b/drivers/staging/iio/adc/ad7476_ring.c
@@ -152,12 +152,6 @@ error_ret:
 
 void ad7476_ring_cleanup(struct iio_dev *indio_dev)
 {
-	/* ensure that the trigger has been detached */
-	if (indio_dev->trig) {
-		iio_put_trigger(indio_dev->trig);
-		iio_trigger_dettach_poll_func(indio_dev->trig,
-					      indio_dev->pollfunc);
-	}
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
 	iio_sw_rb_free(indio_dev->ring);
 }
diff --git a/drivers/staging/iio/adc/ad7606_ring.c b/drivers/staging/iio/adc/ad7606_ring.c
index 52b0c1d..1c563ec 100644
--- a/drivers/staging/iio/adc/ad7606_ring.c
+++ b/drivers/staging/iio/adc/ad7606_ring.c
@@ -197,11 +197,6 @@ error_ret:
 
 void ad7606_ring_cleanup(struct iio_dev *indio_dev)
 {
-	if (indio_dev->trig) {
-		iio_put_trigger(indio_dev->trig);
-		iio_trigger_dettach_poll_func(indio_dev->trig,
-					      indio_dev->pollfunc);
-	}
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
 	iio_sw_rb_free(indio_dev->ring);
 }
diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c
index aab7528..8a5857c 100644
--- a/drivers/staging/iio/adc/ad7793.c
+++ b/drivers/staging/iio/adc/ad7793.c
@@ -469,12 +469,6 @@ error_ret:
 
 static void ad7793_ring_cleanup(struct iio_dev *indio_dev)
 {
-	/* ensure that the trigger has been detached */
-	if (indio_dev->trig) {
-		iio_put_trigger(indio_dev->trig);
-		iio_trigger_dettach_poll_func(indio_dev->trig,
-					      indio_dev->pollfunc);
-	}
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
 	iio_sw_rb_free(indio_dev->ring);
 }
diff --git a/drivers/staging/iio/adc/ad7887_ring.c b/drivers/staging/iio/adc/ad7887_ring.c
index 05ae4a0..cc39eee 100644
--- a/drivers/staging/iio/adc/ad7887_ring.c
+++ b/drivers/staging/iio/adc/ad7887_ring.c
@@ -188,12 +188,6 @@ error_ret:
 
 void ad7887_ring_cleanup(struct iio_dev *indio_dev)
 {
-	/* ensure that the trigger has been detached */
-	if (indio_dev->trig) {
-		iio_put_trigger(indio_dev->trig);
-		iio_trigger_dettach_poll_func(indio_dev->trig,
-					      indio_dev->pollfunc);
-	}
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
 	iio_sw_rb_free(indio_dev->ring);
 }
diff --git a/drivers/staging/iio/adc/ad799x_ring.c b/drivers/staging/iio/adc/ad799x_ring.c
index 7980fe5..e268a61 100644
--- a/drivers/staging/iio/adc/ad799x_ring.c
+++ b/drivers/staging/iio/adc/ad799x_ring.c
@@ -204,12 +204,6 @@ error_ret:
 
 void ad799x_ring_cleanup(struct iio_dev *indio_dev)
 {
-	/* ensure that the trigger has been detached */
-	if (indio_dev->trig) {
-		iio_put_trigger(indio_dev->trig);
-		iio_trigger_dettach_poll_func(indio_dev->trig,
-					      indio_dev->pollfunc);
-	}
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
 	iio_sw_rb_free(indio_dev->ring);
 }
diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c
index caa63cb..d4db91d 100644
--- a/drivers/staging/iio/adc/max1363_ring.c
+++ b/drivers/staging/iio/adc/max1363_ring.c
@@ -195,11 +195,6 @@ error_ret:
 void max1363_ring_cleanup(struct iio_dev *indio_dev)
 {
 	/* ensure that the trigger has been detached */
-	if (indio_dev->trig) {
-		iio_put_trigger(indio_dev->trig);
-		iio_trigger_dettach_poll_func(indio_dev->trig,
-					      indio_dev->pollfunc);
-	}
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
 	iio_sw_rb_free(indio_dev->ring);
 }
diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c
index ccfd558..7012f8c 100644
--- a/drivers/staging/iio/industrialio-trigger.c
+++ b/drivers/staging/iio/industrialio-trigger.c
@@ -230,6 +230,8 @@ int iio_trigger_attach_poll_func(struct iio_trigger *trig,
 	bool notinuse
 		= bitmap_empty(trig->pool, CONFIG_IIO_CONSUMERS_PER_TRIGGER);
 
+	/* Prevent the module being removed whilst attached to a trigger */
+	__module_get(pf->indio_dev->info->driver_module);
 	pf->irq = iio_trigger_get_irq(trig);
 	ret = request_threaded_irq(pf->irq, pf->h, pf->thread,
 				   pf->type, pf->name,
@@ -256,6 +258,7 @@ int iio_trigger_dettach_poll_func(struct iio_trigger *trig,
 	}
 	iio_trigger_put_irq(trig, pf->irq);
 	free_irq(pf->irq, pf);
+	module_put(pf->indio_dev->info->driver_module);
 
 error_ret:
 	return ret;
diff --git a/drivers/staging/iio/meter/ade7758_ring.c b/drivers/staging/iio/meter/ade7758_ring.c
index c29beec..2dec532 100644
--- a/drivers/staging/iio/meter/ade7758_ring.c
+++ b/drivers/staging/iio/meter/ade7758_ring.c
@@ -127,12 +127,6 @@ static const struct iio_ring_setup_ops ade7758_ring_setup_ops = {
 
 void ade7758_unconfigure_ring(struct iio_dev *indio_dev)
 {
-	/* ensure that the trigger has been detached */
-	if (indio_dev->trig) {
-		iio_put_trigger(indio_dev->trig);
-		iio_trigger_dettach_poll_func(indio_dev->trig,
-					      indio_dev->pollfunc);
-	}
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
 	iio_sw_rb_free(indio_dev->ring);
 }
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 6/9] staging:iio:rename trigger_consumer.h to indicate it is core only.
  2011-08-24 16:28 [PATCH 0/9] Trigger locking rework and splitting up trigger.h Jonathan Cameron
                   ` (4 preceding siblings ...)
  2011-08-24 16:28 ` [PATCH 5/9] staging:iio: prevent removal of module connected to trigger Jonathan Cameron
@ 2011-08-24 16:28 ` Jonathan Cameron
  2011-08-24 16:28 ` [PATCH 7/9] staging:iio: spit trigger.h into provider and consumer parts Jonathan Cameron
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Jonathan Cameron @ 2011-08-24 16:28 UTC (permalink / raw)
  To: greg; +Cc: linux-iio, Jonathan Cameron

Need this out the way to create a trigger_consumer.h that actually is
for trigger consumers.

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/iio_core_trigger.h     |   47 ++++++++++++++++++++++++++++
 drivers/staging/iio/industrialio-core.c    |    2 +-
 drivers/staging/iio/industrialio-trigger.c |    2 +-
 drivers/staging/iio/trigger_consumer.h     |   47 ----------------------------
 4 files changed, 49 insertions(+), 49 deletions(-)

diff --git a/drivers/staging/iio/iio_core_trigger.h b/drivers/staging/iio/iio_core_trigger.h
new file mode 100644
index 0000000..9d52d96
--- /dev/null
+++ b/drivers/staging/iio/iio_core_trigger.h
@@ -0,0 +1,47 @@
+
+/* The industrial I/O core, trigger consumer handling functions
+ *
+ * Copyright (c) 2008 Jonathan Cameron
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+
+#ifdef CONFIG_IIO_TRIGGER
+/**
+ * iio_device_register_trigger_consumer() - set up an iio_dev to use triggers
+ * @dev_info: iio_dev associated with the device that will consume the trigger
+ **/
+int iio_device_register_trigger_consumer(struct iio_dev *dev_info);
+
+/**
+ * iio_device_unregister_trigger_consumer() - reverse the registration process
+ * @dev_info: iio_dev associated with the device that consumed the trigger
+ **/
+int iio_device_unregister_trigger_consumer(struct iio_dev *dev_info);
+
+#else
+
+/**
+ * iio_device_register_trigger_consumer() - set up an iio_dev to use triggers
+ * @dev_info: iio_dev associated with the device that will consume the trigger
+ **/
+static int iio_device_register_trigger_consumer(struct iio_dev *dev_info)
+{
+	return 0;
+};
+
+/**
+ * iio_device_unregister_trigger_consumer() - reverse the registration process
+ * @dev_info: iio_dev associated with the device that consumed the trigger
+ **/
+static int iio_device_unregister_trigger_consumer(struct iio_dev *dev_info)
+{
+	return 0;
+};
+
+#endif /* CONFIG_TRIGGER_CONSUMER */
+
+
+
diff --git a/drivers/staging/iio/industrialio-core.c b/drivers/staging/iio/industrialio-core.c
index cf268bc..ed8a6df 100644
--- a/drivers/staging/iio/industrialio-core.c
+++ b/drivers/staging/iio/industrialio-core.c
@@ -22,8 +22,8 @@
 #include <linux/cdev.h>
 #include <linux/slab.h>
 #include "iio.h"
-#include "trigger_consumer.h"
 #include "iio_core.h"
+#include "iio_core_trigger.h"
 
 #define IIO_ID_PREFIX "device"
 #define IIO_ID_FORMAT IIO_ID_PREFIX "%d"
diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c
index 7012f8c..8fafeb8 100644
--- a/drivers/staging/iio/industrialio-trigger.c
+++ b/drivers/staging/iio/industrialio-trigger.c
@@ -18,7 +18,7 @@
 #include "iio.h"
 #include "trigger.h"
 #include "iio_core.h"
-#include "trigger_consumer.h"
+#include "iio_core_trigger.h"
 
 /* RFC - Question of approach
  * Make the common case (single sensor single trigger)
diff --git a/drivers/staging/iio/trigger_consumer.h b/drivers/staging/iio/trigger_consumer.h
deleted file mode 100644
index 9d52d96..0000000
--- a/drivers/staging/iio/trigger_consumer.h
+++ /dev/null
@@ -1,47 +0,0 @@
-
-/* The industrial I/O core, trigger consumer handling functions
- *
- * Copyright (c) 2008 Jonathan Cameron
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published by
- * the Free Software Foundation.
- */
-
-#ifdef CONFIG_IIO_TRIGGER
-/**
- * iio_device_register_trigger_consumer() - set up an iio_dev to use triggers
- * @dev_info: iio_dev associated with the device that will consume the trigger
- **/
-int iio_device_register_trigger_consumer(struct iio_dev *dev_info);
-
-/**
- * iio_device_unregister_trigger_consumer() - reverse the registration process
- * @dev_info: iio_dev associated with the device that consumed the trigger
- **/
-int iio_device_unregister_trigger_consumer(struct iio_dev *dev_info);
-
-#else
-
-/**
- * iio_device_register_trigger_consumer() - set up an iio_dev to use triggers
- * @dev_info: iio_dev associated with the device that will consume the trigger
- **/
-static int iio_device_register_trigger_consumer(struct iio_dev *dev_info)
-{
-	return 0;
-};
-
-/**
- * iio_device_unregister_trigger_consumer() - reverse the registration process
- * @dev_info: iio_dev associated with the device that consumed the trigger
- **/
-static int iio_device_unregister_trigger_consumer(struct iio_dev *dev_info)
-{
-	return 0;
-};
-
-#endif /* CONFIG_TRIGGER_CONSUMER */
-
-
-
-- 
1.7.3.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 7/9] staging:iio: spit trigger.h into provider and consumer parts.
  2011-08-24 16:28 [PATCH 0/9] Trigger locking rework and splitting up trigger.h Jonathan Cameron
                   ` (5 preceding siblings ...)
  2011-08-24 16:28 ` [PATCH 6/9] staging:iio:rename trigger_consumer.h to indicate it is core only Jonathan Cameron
@ 2011-08-24 16:28 ` Jonathan Cameron
  2011-08-24 16:28 ` [PATCH 8/9] staging:iio:trigger core. Trivial code cleanups Jonathan Cameron
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Jonathan Cameron @ 2011-08-24 16:28 UTC (permalink / raw)
  To: greg; +Cc: linux-iio, Jonathan Cameron

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/accel/adis16201_ring.c |    2 +-
 drivers/staging/iio/accel/adis16203_ring.c |    2 +-
 drivers/staging/iio/accel/adis16204_ring.c |    2 +-
 drivers/staging/iio/accel/adis16209_ring.c |    2 +-
 drivers/staging/iio/accel/adis16240_ring.c |    2 +-
 drivers/staging/iio/accel/lis3l02dq_ring.c |    1 +
 drivers/staging/iio/adc/ad7192.c           |    1 +
 drivers/staging/iio/adc/ad7298_ring.c      |    2 +-
 drivers/staging/iio/adc/ad7476_ring.c      |    2 +-
 drivers/staging/iio/adc/ad7606_ring.c      |    2 +-
 drivers/staging/iio/adc/ad7793.c           |    1 +
 drivers/staging/iio/adc/ad7887_ring.c      |    2 +-
 drivers/staging/iio/adc/ad799x_ring.c      |    2 +-
 drivers/staging/iio/adc/max1363_ring.c     |    2 +-
 drivers/staging/iio/gyro/adis16260_ring.c  |    2 +-
 drivers/staging/iio/imu/adis16400_ring.c   |    2 +-
 drivers/staging/iio/industrialio-trigger.c |    1 +
 drivers/staging/iio/meter/ade7758_ring.c   |    2 +-
 drivers/staging/iio/trigger.h              |   42 +----------------------
 drivers/staging/iio/trigger_consumer.h     |   52 ++++++++++++++++++++++++++++
 20 files changed, 71 insertions(+), 55 deletions(-)

diff --git a/drivers/staging/iio/accel/adis16201_ring.c b/drivers/staging/iio/accel/adis16201_ring.c
index 880c490..4b433c5 100644
--- a/drivers/staging/iio/accel/adis16201_ring.c
+++ b/drivers/staging/iio/accel/adis16201_ring.c
@@ -6,7 +6,7 @@
 
 #include "../iio.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 #include "adis16201.h"
 
 
diff --git a/drivers/staging/iio/accel/adis16203_ring.c b/drivers/staging/iio/accel/adis16203_ring.c
index 4398fd9..993e239 100644
--- a/drivers/staging/iio/accel/adis16203_ring.c
+++ b/drivers/staging/iio/accel/adis16203_ring.c
@@ -6,7 +6,7 @@
 
 #include "../iio.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 #include "adis16203.h"
 
 /**
diff --git a/drivers/staging/iio/accel/adis16204_ring.c b/drivers/staging/iio/accel/adis16204_ring.c
index 385e350..847f438 100644
--- a/drivers/staging/iio/accel/adis16204_ring.c
+++ b/drivers/staging/iio/accel/adis16204_ring.c
@@ -6,7 +6,7 @@
 
 #include "../iio.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 #include "adis16204.h"
 
 /**
diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging/iio/accel/adis16209_ring.c
index 1652f15..f889fe7 100644
--- a/drivers/staging/iio/accel/adis16209_ring.c
+++ b/drivers/staging/iio/accel/adis16209_ring.c
@@ -6,7 +6,7 @@
 
 #include "../iio.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 #include "adis16209.h"
 
 /**
diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging/iio/accel/adis16240_ring.c
index 9d4ba15..051ba64 100644
--- a/drivers/staging/iio/accel/adis16240_ring.c
+++ b/drivers/staging/iio/accel/adis16240_ring.c
@@ -6,7 +6,7 @@
 
 #include "../iio.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 #include "adis16240.h"
 
 /**
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index 7f7dca4..5c6fe13 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -9,6 +9,7 @@
 #include "../ring_sw.h"
 #include "../kfifo_buf.h"
 #include "../trigger.h"
+#include "../trigger_consumer.h"
 #include "lis3l02dq.h"
 
 /**
diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
index fd37908..adf6d95 100644
--- a/drivers/staging/iio/adc/ad7192.c
+++ b/drivers/staging/iio/adc/ad7192.c
@@ -22,6 +22,7 @@
 #include "../ring_generic.h"
 #include "../ring_sw.h"
 #include "../trigger.h"
+#include "../trigger_consumer.h"
 
 #include "ad7192.h"
 
diff --git a/drivers/staging/iio/adc/ad7298_ring.c b/drivers/staging/iio/adc/ad7298_ring.c
index 5b87926..741818c 100644
--- a/drivers/staging/iio/adc/ad7298_ring.c
+++ b/drivers/staging/iio/adc/ad7298_ring.c
@@ -14,7 +14,7 @@
 #include "../iio.h"
 #include "../ring_generic.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 
 #include "ad7298.h"
 
diff --git a/drivers/staging/iio/adc/ad7476_ring.c b/drivers/staging/iio/adc/ad7476_ring.c
index 41d6b8d..b109afb 100644
--- a/drivers/staging/iio/adc/ad7476_ring.c
+++ b/drivers/staging/iio/adc/ad7476_ring.c
@@ -16,7 +16,7 @@
 #include "../iio.h"
 #include "../ring_generic.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 
 #include "ad7476.h"
 
diff --git a/drivers/staging/iio/adc/ad7606_ring.c b/drivers/staging/iio/adc/ad7606_ring.c
index 1c563ec..e642430 100644
--- a/drivers/staging/iio/adc/ad7606_ring.c
+++ b/drivers/staging/iio/adc/ad7606_ring.c
@@ -14,7 +14,7 @@
 #include "../iio.h"
 #include "../ring_generic.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 
 #include "ad7606.h"
 
diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c
index 8a5857c..1bcb3eb 100644
--- a/drivers/staging/iio/adc/ad7793.c
+++ b/drivers/staging/iio/adc/ad7793.c
@@ -22,6 +22,7 @@
 #include "../ring_generic.h"
 #include "../ring_sw.h"
 #include "../trigger.h"
+#include "../trigger_consumer.h"
 
 #include "ad7793.h"
 
diff --git a/drivers/staging/iio/adc/ad7887_ring.c b/drivers/staging/iio/adc/ad7887_ring.c
index cc39eee..6b3daf4 100644
--- a/drivers/staging/iio/adc/ad7887_ring.c
+++ b/drivers/staging/iio/adc/ad7887_ring.c
@@ -15,7 +15,7 @@
 #include "../iio.h"
 #include "../ring_generic.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 
 #include "ad7887.h"
 
diff --git a/drivers/staging/iio/adc/ad799x_ring.c b/drivers/staging/iio/adc/ad799x_ring.c
index e268a61..8f1fc52 100644
--- a/drivers/staging/iio/adc/ad799x_ring.c
+++ b/drivers/staging/iio/adc/ad799x_ring.c
@@ -19,7 +19,7 @@
 #include "../iio.h"
 #include "../ring_generic.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 
 #include "ad799x.h"
 
diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c
index d4db91d..be601e0 100644
--- a/drivers/staging/iio/adc/max1363_ring.c
+++ b/drivers/staging/iio/adc/max1363_ring.c
@@ -17,7 +17,7 @@
 #include "../iio.h"
 #include "../ring_generic.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 
 #include "max1363.h"
 
diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/iio/gyro/adis16260_ring.c
index 36f72c3..10f8a66 100644
--- a/drivers/staging/iio/gyro/adis16260_ring.c
+++ b/drivers/staging/iio/gyro/adis16260_ring.c
@@ -6,7 +6,7 @@
 
 #include "../iio.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 #include "adis16260.h"
 
 /**
diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c
index 56385d3..3fc2403 100644
--- a/drivers/staging/iio/imu/adis16400_ring.c
+++ b/drivers/staging/iio/imu/adis16400_ring.c
@@ -7,7 +7,7 @@
 
 #include "../iio.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 #include "adis16400.h"
 
 /**
diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c
index 8fafeb8..1013442 100644
--- a/drivers/staging/iio/industrialio-trigger.c
+++ b/drivers/staging/iio/industrialio-trigger.c
@@ -19,6 +19,7 @@
 #include "trigger.h"
 #include "iio_core.h"
 #include "iio_core_trigger.h"
+#include "trigger_consumer.h"
 
 /* RFC - Question of approach
  * Make the common case (single sensor single trigger)
diff --git a/drivers/staging/iio/meter/ade7758_ring.c b/drivers/staging/iio/meter/ade7758_ring.c
index 2dec532..1e2a096 100644
--- a/drivers/staging/iio/meter/ade7758_ring.c
+++ b/drivers/staging/iio/meter/ade7758_ring.c
@@ -13,7 +13,7 @@
 
 #include "../iio.h"
 #include "../ring_sw.h"
-#include "../trigger.h"
+#include "../trigger_consumer.h"
 #include "ade7758.h"
 
 /**
diff --git a/drivers/staging/iio/trigger.h b/drivers/staging/iio/trigger.h
index 010da1d..56f8baf 100644
--- a/drivers/staging/iio/trigger.h
+++ b/drivers/staging/iio/trigger.h
@@ -73,29 +73,6 @@ struct iio_trigger {
 	struct mutex			pool_lock;
 };
 
-/**
- * struct iio_poll_func - poll function pair
- *
- * @indio_dev:			data specific to device (passed into poll func)
- * @h:				the function that is actually run on trigger
- * @thread:			threaded interrupt part
- * @type:			the type of interrupt (basically if oneshot)
- * @name:			name used to identify the trigger consumer.
- * @irq:			the corresponding irq as allocated from the
- *				trigger pool
- * @timestamp:			some devices need a timestamp grabbed as soon
- *				as possible after the trigger - hence handler
- *				passes it via here.
- **/
-struct iio_poll_func {
-	struct iio_dev *indio_dev;
-	irqreturn_t (*h)(int irq, void *p);
-	irqreturn_t (*thread)(int irq, void *p);
-	int type;
-	char *name;
-	int irq;
-	s64 timestamp;
-};
 
 static inline struct iio_trigger *to_iio_trigger(struct device *d)
 {
@@ -151,7 +128,7 @@ int iio_trigger_dettach_poll_func(struct iio_trigger *trig,
  **/
 void iio_trigger_poll(struct iio_trigger *trig, s64 time);
 void iio_trigger_poll_chained(struct iio_trigger *trig, s64 time);
-void iio_trigger_notify_done(struct iio_trigger *trig);
+
 
 irqreturn_t iio_trigger_generic_data_rdy_poll(int irq, void *private);
 
@@ -176,23 +153,6 @@ static inline void iio_trigger_put_irq(struct iio_trigger *trig, int irq)
 	mutex_unlock(&trig->pool_lock);
 };
 
-struct iio_poll_func
-*iio_alloc_pollfunc(irqreturn_t (*h)(int irq, void *p),
-		    irqreturn_t (*thread)(int irq, void *p),
-		    int type,
-		    struct iio_dev *indio_dev,
-		    const char *fmt,
-		    ...);
-void iio_dealloc_pollfunc(struct iio_poll_func *pf);
-irqreturn_t iio_pollfunc_store_time(int irq, void *p);
-
-/*
- * Two functions for common case where all that happens is a pollfunc
- * is attached and detached from a trigger
- */
-int iio_triggered_ring_postenable(struct iio_dev *indio_dev);
-int iio_triggered_ring_predisable(struct iio_dev *indio_dev);
-
 struct iio_trigger *iio_allocate_trigger(const char *fmt, ...)
 	__attribute__((format(printf, 1, 2)));
 void iio_free_trigger(struct iio_trigger *trig);
diff --git a/drivers/staging/iio/trigger_consumer.h b/drivers/staging/iio/trigger_consumer.h
new file mode 100644
index 0000000..418e0bd
--- /dev/null
+++ b/drivers/staging/iio/trigger_consumer.h
@@ -0,0 +1,52 @@
+/* The industrial I/O core, trigger consumer functions
+ *
+ * Copyright (c) 2008-2011 Jonathan Cameron
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+
+/**
+ * struct iio_poll_func - poll function pair
+ *
+ * @indio_dev:			data specific to device (passed into poll func)
+ * @h:				the function that is actually run on trigger
+ * @thread:			threaded interrupt part
+ * @type:			the type of interrupt (basically if oneshot)
+ * @name:			name used to identify the trigger consumer.
+ * @irq:			the corresponding irq as allocated from the
+ *				trigger pool
+ * @timestamp:			some devices need a timestamp grabbed as soon
+ *				as possible after the trigger - hence handler
+ *				passes it via here.
+ **/
+struct iio_poll_func {
+	struct iio_dev *indio_dev;
+	irqreturn_t (*h)(int irq, void *p);
+	irqreturn_t (*thread)(int irq, void *p);
+	int type;
+	char *name;
+	int irq;
+	s64 timestamp;
+};
+
+
+struct iio_poll_func
+*iio_alloc_pollfunc(irqreturn_t (*h)(int irq, void *p),
+		    irqreturn_t (*thread)(int irq, void *p),
+		    int type,
+		    struct iio_dev *indio_dev,
+		    const char *fmt,
+		    ...);
+void iio_dealloc_pollfunc(struct iio_poll_func *pf);
+irqreturn_t iio_pollfunc_store_time(int irq, void *p);
+
+void iio_trigger_notify_done(struct iio_trigger *trig);
+
+/*
+ * Two functions for common case where all that happens is a pollfunc
+ * is attached and detached from a trigger
+ */
+int iio_triggered_ring_postenable(struct iio_dev *indio_dev);
+int iio_triggered_ring_predisable(struct iio_dev *indio_dev);
-- 
1.7.3.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 8/9] staging:iio:trigger core. Trivial code cleanups.
  2011-08-24 16:28 [PATCH 0/9] Trigger locking rework and splitting up trigger.h Jonathan Cameron
                   ` (6 preceding siblings ...)
  2011-08-24 16:28 ` [PATCH 7/9] staging:iio: spit trigger.h into provider and consumer parts Jonathan Cameron
@ 2011-08-24 16:28 ` Jonathan Cameron
  2011-08-24 16:28 ` [PATCH 9/9] staging:iio:trigger push functions that don't need to be generaly available down into the core Jonathan Cameron
  2011-08-24 21:24 ` [PATCH 0/9] Trigger locking rework and splitting up trigger.h Greg KH
  9 siblings, 0 replies; 11+ messages in thread
From: Jonathan Cameron @ 2011-08-24 16:28 UTC (permalink / raw)
  To: greg; +Cc: linux-iio, Jonathan Cameron

Stop exporting functions only intended for core usage.
Return void from function which can never return anything other than 0.
Trivial stype cleanups.

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/iio_core_trigger.h     |    5 ++---
 drivers/staging/iio/industrialio-trigger.c |   22 +++++++---------------
 2 files changed, 9 insertions(+), 18 deletions(-)

diff --git a/drivers/staging/iio/iio_core_trigger.h b/drivers/staging/iio/iio_core_trigger.h
index 9d52d96..3e5195a 100644
--- a/drivers/staging/iio/iio_core_trigger.h
+++ b/drivers/staging/iio/iio_core_trigger.h
@@ -19,7 +19,7 @@ int iio_device_register_trigger_consumer(struct iio_dev *dev_info);
  * iio_device_unregister_trigger_consumer() - reverse the registration process
  * @dev_info: iio_dev associated with the device that consumed the trigger
  **/
-int iio_device_unregister_trigger_consumer(struct iio_dev *dev_info);
+void iio_device_unregister_trigger_consumer(struct iio_dev *dev_info);
 
 #else
 
@@ -36,9 +36,8 @@ static int iio_device_register_trigger_consumer(struct iio_dev *dev_info)
  * iio_device_unregister_trigger_consumer() - reverse the registration process
  * @dev_info: iio_dev associated with the device that consumed the trigger
  **/
-static int iio_device_unregister_trigger_consumer(struct iio_dev *dev_info)
+static void iio_device_unregister_trigger_consumer(struct iio_dev *dev_info)
 {
-	return 0;
 };
 
 #endif /* CONFIG_TRIGGER_CONSUMER */
diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c
index 1013442..72ea106 100644
--- a/drivers/staging/iio/industrialio-trigger.c
+++ b/drivers/staging/iio/industrialio-trigger.c
@@ -174,13 +174,12 @@ static struct iio_trigger *iio_trigger_find_by_name(const char *name,
 void iio_trigger_poll(struct iio_trigger *trig, s64 time)
 {
 	int i;
-	if (!trig->use_count) {
+	if (!trig->use_count)
 		for (i = 0; i < CONFIG_IIO_CONSUMERS_PER_TRIGGER; i++)
 			if (trig->subirqs[i].enabled) {
 				trig->use_count++;
 				generic_handle_irq(trig->subirq_base + i);
 			}
-	}
 }
 EXPORT_SYMBOL(iio_trigger_poll);
 
@@ -322,12 +321,10 @@ static ssize_t iio_trigger_read_current(struct device *dev,
 					char *buf)
 {
 	struct iio_dev *dev_info = dev_get_drvdata(dev);
-	int len = 0;
+
 	if (dev_info->trig)
-		len = sprintf(buf,
-			      "%s\n",
-			      dev_info->trig->name);
-	return len;
+		return sprintf(buf, "%s\n", dev_info->trig->name);
+	return 0;
 }
 
 /**
@@ -496,23 +493,18 @@ EXPORT_SYMBOL(iio_free_trigger);
 
 int iio_device_register_trigger_consumer(struct iio_dev *dev_info)
 {
-	int ret;
-	ret = sysfs_create_group(&dev_info->dev.kobj,
-				 &iio_trigger_consumer_attr_group);
-	return ret;
+	return sysfs_create_group(&dev_info->dev.kobj,
+				  &iio_trigger_consumer_attr_group);
 }
-EXPORT_SYMBOL(iio_device_register_trigger_consumer);
 
-int iio_device_unregister_trigger_consumer(struct iio_dev *dev_info)
+void iio_device_unregister_trigger_consumer(struct iio_dev *dev_info)
 {
 	/* Clean up and associated but not attached triggers references */
 	if (dev_info->trig)
 		iio_put_trigger(dev_info->trig);
 	sysfs_remove_group(&dev_info->dev.kobj,
 			   &iio_trigger_consumer_attr_group);
-	return 0;
 }
-EXPORT_SYMBOL(iio_device_unregister_trigger_consumer);
 
 int iio_triggered_ring_postenable(struct iio_dev *indio_dev)
 {
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 9/9] staging:iio:trigger push functions that don't need to be generaly available down into the core.
  2011-08-24 16:28 [PATCH 0/9] Trigger locking rework and splitting up trigger.h Jonathan Cameron
                   ` (7 preceding siblings ...)
  2011-08-24 16:28 ` [PATCH 8/9] staging:iio:trigger core. Trivial code cleanups Jonathan Cameron
@ 2011-08-24 16:28 ` Jonathan Cameron
  2011-08-24 21:24 ` [PATCH 0/9] Trigger locking rework and splitting up trigger.h Greg KH
  9 siblings, 0 replies; 11+ messages in thread
From: Jonathan Cameron @ 2011-08-24 16:28 UTC (permalink / raw)
  To: greg; +Cc: linux-iio, Jonathan Cameron

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/industrialio-trigger.c |   30 +++++++++++++++++----
 drivers/staging/iio/trigger.h              |   39 ----------------------------
 2 files changed, 24 insertions(+), 45 deletions(-)

diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c
index 72ea106..f1ece86 100644
--- a/drivers/staging/iio/industrialio-trigger.c
+++ b/drivers/staging/iio/industrialio-trigger.c
@@ -215,6 +215,26 @@ void iio_trigger_notify_done(struct iio_trigger *trig)
 EXPORT_SYMBOL(iio_trigger_notify_done);
 
 /* Trigger Consumer related functions */
+static int iio_trigger_get_irq(struct iio_trigger *trig)
+{
+	int ret;
+	mutex_lock(&trig->pool_lock);
+	ret = bitmap_find_free_region(trig->pool,
+				      CONFIG_IIO_CONSUMERS_PER_TRIGGER,
+				      ilog2(1));
+	mutex_unlock(&trig->pool_lock);
+	if (ret >= 0)
+		ret += trig->subirq_base;
+
+	return ret;
+}
+
+static void iio_trigger_put_irq(struct iio_trigger *trig, int irq)
+{
+	mutex_lock(&trig->pool_lock);
+	clear_bit(irq - trig->subirq_base, trig->pool);
+	mutex_unlock(&trig->pool_lock);
+}
 
 /* Complexity in here.  With certain triggers (datardy) an acknowledgement
  * may be needed if the pollfuncs do not include the data read for the
@@ -223,8 +243,8 @@ EXPORT_SYMBOL(iio_trigger_notify_done);
  * the relevant function is in there may be the best option.
  */
 /* Worth protecting against double additions?*/
-int iio_trigger_attach_poll_func(struct iio_trigger *trig,
-				 struct iio_poll_func *pf)
+static int iio_trigger_attach_poll_func(struct iio_trigger *trig,
+					struct iio_poll_func *pf)
 {
 	int ret = 0;
 	bool notinuse
@@ -241,10 +261,9 @@ int iio_trigger_attach_poll_func(struct iio_trigger *trig,
 
 	return ret;
 }
-EXPORT_SYMBOL(iio_trigger_attach_poll_func);
 
-int iio_trigger_dettach_poll_func(struct iio_trigger *trig,
-				  struct iio_poll_func *pf)
+static int iio_trigger_dettach_poll_func(struct iio_trigger *trig,
+					 struct iio_poll_func *pf)
 {
 	int ret = 0;
 	bool no_other_users
@@ -263,7 +282,6 @@ int iio_trigger_dettach_poll_func(struct iio_trigger *trig,
 error_ret:
 	return ret;
 }
-EXPORT_SYMBOL(iio_trigger_dettach_poll_func);
 
 irqreturn_t iio_pollfunc_store_time(int irq, void *p)
 {
diff --git a/drivers/staging/iio/trigger.h b/drivers/staging/iio/trigger.h
index 56f8baf..722fc33 100644
--- a/drivers/staging/iio/trigger.h
+++ b/drivers/staging/iio/trigger.h
@@ -104,23 +104,6 @@ int iio_trigger_register(struct iio_trigger *trig_info);
 void iio_trigger_unregister(struct iio_trigger *trig_info);
 
 /**
- * iio_trigger_attach_poll_func() - add a function pair to be run on trigger
- * @trig:	trigger to which the function pair are being added
- * @pf:		poll function pair
- **/
-int iio_trigger_attach_poll_func(struct iio_trigger *trig,
-				 struct iio_poll_func *pf);
-
-/**
- * iio_trigger_dettach_poll_func() -	remove function pair from those to be
- *					run on trigger
- * @trig:	trigger from which the function is being removed
- * @pf:		poll function pair
- **/
-int iio_trigger_dettach_poll_func(struct iio_trigger *trig,
-				  struct iio_poll_func *pf);
-
-/**
  * iio_trigger_poll() - called on a trigger occurring
  * @trig: trigger which occurred
  *
@@ -129,30 +112,8 @@ int iio_trigger_dettach_poll_func(struct iio_trigger *trig,
 void iio_trigger_poll(struct iio_trigger *trig, s64 time);
 void iio_trigger_poll_chained(struct iio_trigger *trig, s64 time);
 
-
 irqreturn_t iio_trigger_generic_data_rdy_poll(int irq, void *private);
 
-static inline int iio_trigger_get_irq(struct iio_trigger *trig)
-{
-	int ret;
-	mutex_lock(&trig->pool_lock);
-	ret = bitmap_find_free_region(trig->pool,
-				      CONFIG_IIO_CONSUMERS_PER_TRIGGER,
-				      ilog2(1));
-	mutex_unlock(&trig->pool_lock);
-	if (ret >= 0)
-		ret += trig->subirq_base;
-
-	return ret;
-};
-
-static inline void iio_trigger_put_irq(struct iio_trigger *trig, int irq)
-{
-	mutex_lock(&trig->pool_lock);
-	clear_bit(irq - trig->subirq_base, trig->pool);
-	mutex_unlock(&trig->pool_lock);
-};
-
 struct iio_trigger *iio_allocate_trigger(const char *fmt, ...)
 	__attribute__((format(printf, 1, 2)));
 void iio_free_trigger(struct iio_trigger *trig);
-- 
1.7.3.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 0/9] Trigger locking rework and splitting up trigger.h
  2011-08-24 16:28 [PATCH 0/9] Trigger locking rework and splitting up trigger.h Jonathan Cameron
                   ` (8 preceding siblings ...)
  2011-08-24 16:28 ` [PATCH 9/9] staging:iio:trigger push functions that don't need to be generaly available down into the core Jonathan Cameron
@ 2011-08-24 21:24 ` Greg KH
  9 siblings, 0 replies; 11+ messages in thread
From: Greg KH @ 2011-08-24 21:24 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio

On Wed, Aug 24, 2011 at 05:28:32PM +0100, Jonathan Cameron wrote:
> Hi Greg,
> 
> This series has been floating around for a while and fixes some nasty
> issues with reference counting on triggers + gets rid of some work
> arounds people were using in drivers for the above issue.  Series
> has had a few little reorganization patches added since first posting,
> but nothing controversial.
> 
> Whilst some of this is technically stable material it's probably better
> to wait an see if anyone cares then do a backport as and when.
> 
> Thanks as ever for your hard work.

All applied and pushed out.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2011-08-24 21:24 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-24 16:28 [PATCH 0/9] Trigger locking rework and splitting up trigger.h Jonathan Cameron
2011-08-24 16:28 ` [PATCH 1/9] staging:iio:triggers. Add a reference get to the core for triggers Jonathan Cameron
2011-08-24 16:28 ` [PATCH 2/9] staging:iio:triggers reorder module put and device put to ensure that the ops are still there if put results in device deletion Jonathan Cameron
2011-08-24 16:28 ` [PATCH 3/9] staging:iio:trigger:sysfs trigger: Add a release function to avoid warning on module removal Jonathan Cameron
2011-08-24 16:28 ` [PATCH 4/9] staging:iio:pollfunc: Make explicit that private data is always pointer to a struct iio_dev Jonathan Cameron
2011-08-24 16:28 ` [PATCH 5/9] staging:iio: prevent removal of module connected to trigger Jonathan Cameron
2011-08-24 16:28 ` [PATCH 6/9] staging:iio:rename trigger_consumer.h to indicate it is core only Jonathan Cameron
2011-08-24 16:28 ` [PATCH 7/9] staging:iio: spit trigger.h into provider and consumer parts Jonathan Cameron
2011-08-24 16:28 ` [PATCH 8/9] staging:iio:trigger core. Trivial code cleanups Jonathan Cameron
2011-08-24 16:28 ` [PATCH 9/9] staging:iio:trigger push functions that don't need to be generaly available down into the core Jonathan Cameron
2011-08-24 21:24 ` [PATCH 0/9] Trigger locking rework and splitting up trigger.h Greg KH

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.