Skip to contentSkip to conversation

staging:iio: drop sw_ring buffer implementation.

PATCH In review Jonathan Cameron 2 participants 9 messages Nov 30, 2012 – Jan 19, 2013

Subsystems (4)
lore
Share & tools
lore

Jonathan Cameron

author maintainer
#0 lore raw

cover staging:iio: drop sw_ring buffer implementation.

sw_ring was the original buffer implementation for IIO. It kind of evolved over a couple of late nights and even though I wrote it I was never convinced it was right. Then a nice kfifo implementation came along and in the vast majority of IIO use cases whether we have a kfifo or a ring buffer is not as it turns out that important.

We have been telling people not to use this for quite some time now. Lets make that finally a really hard rule by dropping it. There are 4 remaining users. This patch drops support form lis3l02dq which had support for both this and kfifo. For the other 3 users it simply switches over to kfifo. We haven't seen any real problems doing this with any other driver so I can't see why these would cause trouble!

Note my aim for this cycle ist to greatly cut down what we have left in staging by removing legacy cruft and getting other stuff cleaned up and out!

Jonathan

Jonathan Cameron (5):
staging:iio:accel:lis3l02dq remove sw_ring support. staging:iio:impedance-analyzer switch from sw_ring to kfifo. staging:iio:meter:ade7758 switch from sw_ring to kfifo staging:iio:imu: adis16400 switch from sw_ring to kfifo staging:iio: drop sw_ring buffer implementation.

 drivers/staging/iio/Kconfig                     |  13 -
 drivers/staging/iio/Makefile                    |   2 -
 drivers/staging/iio/accel/Kconfig               |  23 +-
 drivers/staging/iio/accel/lis3l02dq.h           |   8 -
 drivers/staging/iio/accel/lis3l02dq_ring.c      |   7 +-
 drivers/staging/iio/impedance-analyzer/Kconfig  |   2 +-
 drivers/staging/iio/impedance-analyzer/ad5933.c |   8 +-
 drivers/staging/iio/imu/Kconfig                 |   2 +-
 drivers/staging/iio/imu/adis16400_ring.c        |  12 +-
 drivers/staging/iio/meter/Kconfig               |   2 +-
 drivers/staging/iio/meter/ade7758_ring.c        |  12 +-
 drivers/staging/iio/ring_sw.c                   | 366 ------------------------
 drivers/staging/iio/ring_sw.h                   |  30 --
 13 files changed, 23 insertions(+), 464 deletions(-)
 delete mode 100644 drivers/staging/iio/ring_sw.c
 delete mode 100644 drivers/staging/iio/ring_sw.h
Signature · 1 line
1.8.0.1
author maintainer
#1 lore raw

PATCH 1/5 staging:iio:accel:lis3l02dq remove sw_ring support.

The sw_ring buffer is being removed in favour of the kfifo version. This is one of only a couple of driver still supporting its use.

This driver will hopefully also be removed in favour of supporting the part in the unified ST accelerometer driver.

---
 drivers/staging/iio/accel/Kconfig          | 23 +----------------------
 drivers/staging/iio/accel/lis3l02dq.h      |  8 --------
 drivers/staging/iio/accel/lis3l02dq_ring.c |  7 +++----
 3 files changed, 4 insertions(+), 34 deletions(-)
drivers/staging/iio/accel/Kconfig +1 -22
index 2b54430..fa772a9 100644
@@ -67,34 +67,13 @@ config LIS3L02DQ
 	tristate "ST Microelectronics LIS3L02DQ Accelerometer Driver"
 	depends on SPI
 	select IIO_TRIGGER if IIO_BUFFER
-	depends on !IIO_BUFFER || IIO_KFIFO_BUF || IIO_SW_RING
+	depends on !IIO_BUFFER || IIO_KFIFO_BUF
 	depends on GENERIC_GPIO
 	help
 	  Say yes here to build SPI support for the ST microelectronics
 	  accelerometer. The driver supplies direct access via sysfs files
 	  and an event interface via a character device.
 
-choice
-	prompt "Buffer type"
-       	depends on LIS3L02DQ && IIO_BUFFER
-
-config LIS3L02DQ_BUF_KFIFO
-       depends on IIO_KFIFO_BUF
-       bool "Simple FIFO"
-       help
-         Kfifo based FIFO.  Does not provide any events so it is up
-	 to userspace to ensure it reads often enough that data is not
-	 lost.
-
-config LIS3L02DQ_BUF_RING_SW
-       depends on IIO_SW_RING
-       bool "IIO Software Ring"
-       help
-         Original IIO ring buffer implementation.  Provides simple
-	 buffer events, half full etc.
-
-endchoice
-
 config SCA3000
 	depends on IIO_BUFFER
 	depends on SPI
drivers/staging/iio/accel/lis3l02dq.h +0 -8
index 2bac722..0a8ea82 100644
@@ -185,14 +185,6 @@ int lis3l02dq_probe_trigger(struct iio_dev *indio_dev);
 int lis3l02dq_configure_buffer(struct iio_dev *indio_dev);
 void lis3l02dq_unconfigure_buffer(struct iio_dev *indio_dev);
 
-#ifdef CONFIG_LIS3L02DQ_BUF_RING_SW
-#define lis3l02dq_free_buf iio_sw_rb_free
-#define lis3l02dq_alloc_buf iio_sw_rb_allocate
-#endif
-#ifdef CONFIG_LIS3L02DQ_BUF_KFIFO
-#define lis3l02dq_free_buf iio_kfifo_free
-#define lis3l02dq_alloc_buf iio_kfifo_allocate
-#endif
 irqreturn_t lis3l02dq_data_rdy_trig_poll(int irq, void *private);
 #define lis3l02dq_th lis3l02dq_data_rdy_trig_poll
 
drivers/staging/iio/accel/lis3l02dq_ring.c +3 -4
index bc38651..6861877 100644
@@ -7,7 +7,6 @@
 #include <linux/export.h>
 
 #include <linux/iio/iio.h>
-#include "../ring_sw.h"
 #include <linux/iio/kfifo_buf.h>
 #include <linux/iio/trigger.h>
 #include <linux/iio/trigger_consumer.h>
@@ -318,7 +317,7 @@ void lis3l02dq_remove_trigger(struct iio_dev *indio_dev)
 void lis3l02dq_unconfigure_buffer(struct iio_dev *indio_dev)
 {
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
-	lis3l02dq_free_buf(indio_dev->buffer);
+	iio_kfifo_free(indio_dev->buffer);
 }
 
 static int lis3l02dq_buffer_postenable(struct iio_dev *indio_dev)
@@ -401,7 +400,7 @@ int lis3l02dq_configure_buffer(struct iio_dev *indio_dev)
 	int ret;
 	struct iio_buffer *buffer;
 
-	buffer = lis3l02dq_alloc_buf(indio_dev);
+	buffer = iio_kfifo_allocate(indio_dev);
 	if (!buffer)
 		return -ENOMEM;
 
@@ -427,6 +426,6 @@ int lis3l02dq_configure_buffer(struct iio_dev *indio_dev)
 	return 0;
 
 error_iio_sw_rb_free:
-	lis3l02dq_free_buf(indio_dev->buffer);
+	iio_kfifo_free(indio_dev->buffer);
 	return ret;
 }
Signature · 1 line
1.8.0.1
author maintainer
#2 lore raw

PATCH 2/5 staging:iio:impedance-analyzer switch from sw_ring to kfifo.

In reply to Jonathan Cameron

sw_ring buffer implementation is going away so switch to the kfifo based alternative.

---
 drivers/staging/iio/impedance-analyzer/Kconfig  | 2 +-
 drivers/staging/iio/impedance-analyzer/ad5933.c | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)
drivers/staging/iio/impedance-analyzer/Kconfig +1 -1
index ad0ff76..dd97b6b 100644
@@ -7,7 +7,7 @@ config AD5933
 	tristate "Analog Devices AD5933, AD5934 driver"
 	depends on I2C
 	select IIO_BUFFER
-	select IIO_SW_RING
+	select IIO_KFIFO_BUF
 	help
 	  Say yes here to build support for Analog Devices Impedance Converter,
 	  Network Analyzer, AD5933/4, provides direct access via sysfs.
drivers/staging/iio/impedance-analyzer/ad5933.c +4 -4
index 779243d..440e226 100644
@@ -22,7 +22,7 @@
 #include <linux/iio/iio.h>
 #include <linux/iio/sysfs.h>
 #include <linux/iio/buffer.h>
-#include "../ring_sw.h"
+#include <linux/iio/kfifo_buf.h>
 
 #include "ad5933.h"
 
@@ -630,7 +630,7 @@ static const struct iio_buffer_setup_ops ad5933_ring_setup_ops = {
 
 static int ad5933_register_ring_funcs_and_init(struct iio_dev *indio_dev)
 {
-	indio_dev->buffer = iio_sw_rb_allocate(indio_dev);
+	indio_dev->buffer = iio_kfifo_allocate(indio_dev);
 	if (!indio_dev->buffer)
 		return -ENOMEM;
 
@@ -774,7 +774,7 @@ static int ad5933_probe(struct i2c_client *client,
 error_uninitialize_ring:
 	iio_buffer_unregister(indio_dev);
 error_unreg_ring:
-	iio_sw_rb_free(indio_dev->buffer);
+	iio_kfifo_free(indio_dev->buffer);
 error_disable_reg:
 	if (!IS_ERR(st->reg))
 		regulator_disable(st->reg);
@@ -794,7 +794,7 @@ static int ad5933_remove(struct i2c_client *client)
 
 	iio_device_unregister(indio_dev);
 	iio_buffer_unregister(indio_dev);
-	iio_sw_rb_free(indio_dev->buffer);
+	iio_kfifo_free(indio_dev->buffer);
 	if (!IS_ERR(st->reg)) {
 		regulator_disable(st->reg);
 		regulator_put(st->reg);
Signature · 1 line
1.8.0.1
author maintainer
#3 lore raw

PATCH 3/5 staging:iio:meter:ade7758 switch from sw_ring to kfifo

In reply to Jonathan Cameron

sw ring is going away so switch over to kfifo based buffer implementation. The only real change is that poll will return on some data there rather than buffer 50% full.

---
 drivers/staging/iio/meter/Kconfig        |  2 +-
 drivers/staging/iio/meter/ade7758_ring.c | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)
drivers/staging/iio/meter/Kconfig +1 -1
index d290d27..e53274b 100644
@@ -21,7 +21,7 @@ config ADE7758
 	tristate "Analog Devices ADE7758 Poly Phase Multifunction Energy Metering IC Driver"
 	depends on SPI
 	select IIO_TRIGGER if IIO_BUFFER
-	select IIO_SW_RING if IIO_BUFFER
+	select IIO_KFIFO_BUF if IIO_BUFFER
 	help
 	  Say yes here to build support for Analog Devices ADE7758 Polyphase
 	  Multifunction Energy Metering IC with Per Phase Information Driver.
drivers/staging/iio/meter/ade7758_ring.c +6 -6
index 4552a4c..b29e2d5 100644
@@ -13,7 +13,7 @@
 #include <asm/unaligned.h>
 
 #include <linux/iio/iio.h>
-#include "../ring_sw.h"
+#include <linux/iio/kfifo_buf.h>
 #include <linux/iio/trigger_consumer.h>
 #include "ade7758.h"
 
@@ -119,7 +119,7 @@ static const struct iio_buffer_setup_ops ade7758_ring_setup_ops = {
 void ade7758_unconfigure_ring(struct iio_dev *indio_dev)
 {
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
-	iio_sw_rb_free(indio_dev->buffer);
+	iio_kfifo_free(indio_dev->buffer);
 }
 
 int ade7758_configure_ring(struct iio_dev *indio_dev)
@@ -127,7 +127,7 @@ int ade7758_configure_ring(struct iio_dev *indio_dev)
 	struct ade7758_state *st = iio_priv(indio_dev);
 	int ret = 0;
 
-	indio_dev->buffer = iio_sw_rb_allocate(indio_dev);
+	indio_dev->buffer = iio_kfifo_allocate(indio_dev);
 	if (!indio_dev->buffer) {
 		ret = -ENOMEM;
 		return ret;
@@ -143,7 +143,7 @@ int ade7758_configure_ring(struct iio_dev *indio_dev)
 						 indio_dev->id);
 	if (indio_dev->pollfunc == NULL) {
 		ret = -ENOMEM;
-		goto error_iio_sw_rb_free;
+		goto error_iio_kfifo_free;
 	}
 
 	indio_dev->modes |= INDIO_BUFFER_TRIGGERED;
@@ -183,8 +183,8 @@ int ade7758_configure_ring(struct iio_dev *indio_dev)
 
 	return 0;
 
-error_iio_sw_rb_free:
-	iio_sw_rb_free(indio_dev->buffer);
+error_iio_kfifo_free:
+	iio_kfifo_free(indio_dev->buffer);
 	return ret;
 }
 
Signature · 1 line
1.8.0.1
author maintainer
#4 lore raw

PATCH 4/5 staging:iio:imu: adis16400 switch from sw_ring to kfifo

In reply to Jonathan Cameron

sw ring is going away so switch over to kfifo based buffer implementation. The only real change is that poll will return on some data there rather than buffer 50% full.

---
 drivers/staging/iio/imu/Kconfig          |  2 +-
 drivers/staging/iio/imu/adis16400_ring.c | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)
drivers/staging/iio/imu/Kconfig +1 -1
index 2c2f47d..b9d9c14 100644
@@ -6,7 +6,7 @@ menu "Inertial measurement units"
 config ADIS16400
 	tristate "Analog Devices ADIS16400 and similar IMU SPI driver"
 	depends on SPI
-	select IIO_SW_RING if IIO_BUFFER
+	select IIO_KFIFO_BUF if IIO_BUFFER
 	select IIO_TRIGGER if IIO_BUFFER
 	help
 	  Say yes here to build support for Analog Devices adis16300, adis16344,
drivers/staging/iio/imu/adis16400_ring.c +6 -6
index d46c1e3..319c2c0 100644
@@ -7,7 +7,7 @@
 #include <linux/export.h>
 
 #include <linux/iio/iio.h>
-#include "../ring_sw.h"
+#include <linux/iio/kfifo_buf.h>
 #include <linux/iio/trigger_consumer.h>
 #include "adis16400.h"
 
@@ -161,7 +161,7 @@ done:
 void adis16400_unconfigure_ring(struct iio_dev *indio_dev)
 {
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
-	iio_sw_rb_free(indio_dev->buffer);
+	iio_kfifo_free(indio_dev->buffer);
 }
 
 static const struct iio_buffer_setup_ops adis16400_ring_setup_ops = {
@@ -175,7 +175,7 @@ int adis16400_configure_ring(struct iio_dev *indio_dev)
 	int ret = 0;
 	struct iio_buffer *ring;
 
-	ring = iio_sw_rb_allocate(indio_dev);
+	ring = iio_kfifo_allocate(indio_dev);
 	if (!ring) {
 		ret = -ENOMEM;
 		return ret;
@@ -193,12 +193,12 @@ int adis16400_configure_ring(struct iio_dev *indio_dev)
 						 indio_dev->id);
 	if (indio_dev->pollfunc == NULL) {
 		ret = -ENOMEM;
-		goto error_iio_sw_rb_free;
+		goto error_iio_kfifo_free;
 	}
 
 	indio_dev->modes |= INDIO_BUFFER_TRIGGERED;
 	return 0;
-error_iio_sw_rb_free:
-	iio_sw_rb_free(indio_dev->buffer);
+error_iio_kfifo_free:
+	iio_kfifo_free(indio_dev->buffer);
 	return ret;
 }
Signature · 1 line
1.8.0.1
#5 lore raw

Re: [PATCH 4/5] staging:iio:imu: adis16400 switch from sw_ring to kfifo

Quoted 5 lines · Jonathan Cameron

sw ring is going away so switch over to kfifo based buffer implementation. The only real change is that poll will return on some data there rather than buffer 50% full.

Is is ok for you to drop this one and wait with the last patch in the series still a bit? I've patches to switch this driver over to the adislib and this patch would probably introduce a couple of conflicts.

The rest of the series looks good.

Thanks,
- Lars

Quoted 65 lines
---
 drivers/staging/iio/imu/Kconfig          |  2 +-
 drivers/staging/iio/imu/adis16400_ring.c | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)
drivers/staging/iio/imu/Kconfig +1 -1
index 2c2f47d..b9d9c14 100644
@@ -6,7 +6,7 @@ menu "Inertial measurement units"
 config ADIS16400
 	tristate "Analog Devices ADIS16400 and similar IMU SPI driver"
 	depends on SPI
-	select IIO_SW_RING if IIO_BUFFER
+	select IIO_KFIFO_BUF if IIO_BUFFER
 	select IIO_TRIGGER if IIO_BUFFER
 	help
 	  Say yes here to build support for Analog Devices adis16300, adis16344,
drivers/staging/iio/imu/adis16400_ring.c +6 -6
index d46c1e3..319c2c0 100644
@@ -7,7 +7,7 @@
 #include <linux/export.h>
 
 #include <linux/iio/iio.h>
-#include "../ring_sw.h"
+#include <linux/iio/kfifo_buf.h>
 #include <linux/iio/trigger_consumer.h>
 #include "adis16400.h"
 
@@ -161,7 +161,7 @@ done:
 void adis16400_unconfigure_ring(struct iio_dev *indio_dev)
 {
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
-	iio_sw_rb_free(indio_dev->buffer);
+	iio_kfifo_free(indio_dev->buffer);
 }
 
 static const struct iio_buffer_setup_ops adis16400_ring_setup_ops = {
@@ -175,7 +175,7 @@ int adis16400_configure_ring(struct iio_dev *indio_dev)
 	int ret = 0;
 	struct iio_buffer *ring;
 
-	ring = iio_sw_rb_allocate(indio_dev);
+	ring = iio_kfifo_allocate(indio_dev);
 	if (!ring) {
 		ret = -ENOMEM;
 		return ret;
@@ -193,12 +193,12 @@ int adis16400_configure_ring(struct iio_dev *indio_dev)
 						 indio_dev->id);
 	if (indio_dev->pollfunc == NULL) {
 		ret = -ENOMEM;
-		goto error_iio_sw_rb_free;
+		goto error_iio_kfifo_free;
 	}
 
 	indio_dev->modes |= INDIO_BUFFER_TRIGGERED;
 	return 0;
-error_iio_sw_rb_free:
-	iio_sw_rb_free(indio_dev->buffer);
+error_iio_kfifo_free:
+	iio_kfifo_free(indio_dev->buffer);
 	return ret;
 }
author maintainer
#6 lore raw

Re: [PATCH 4/5] staging:iio:imu: adis16400 switch from sw_ring to kfifo

Quoted 5 lines · Lars-Peter Clausen
Quoted 4 lines · Jonathan Cameron

sw ring is going away so switch over to kfifo based buffer implementation. The only real change is that poll will return on some data there rather than buffer 50% full.

Quoted 7 lines
Quoted 1 line

Is is ok for you to drop this one and wait with the last patch in the series still a bit? I've patches to switch this driver over to the adislib and this patch would probably introduce a couple of conflicts.

The rest of the series looks good.

*laughs* I guessed as much, but decided it was quicker to write the patch and have you request I hold it than to send you an email to ask if you had such a patch and then wait for the response.

Should have known you'd get back almost instantly.

These are very much for the next cycle, so I am happy to do as you requested!

Quoted 75 lines

Thanks,
- Lars

Quoted 55 lines
---
 drivers/staging/iio/imu/Kconfig          |  2 +-
 drivers/staging/iio/imu/adis16400_ring.c | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)
drivers/staging/iio/imu/Kconfig +1 -1
index 2c2f47d..b9d9c14 100644
@@ -6,7 +6,7 @@ menu "Inertial measurement units"
 config ADIS16400
 	tristate "Analog Devices ADIS16400 and similar IMU SPI driver"
 	depends on SPI
-	select IIO_SW_RING if IIO_BUFFER
+	select IIO_KFIFO_BUF if IIO_BUFFER
 	select IIO_TRIGGER if IIO_BUFFER
 	help
 	  Say yes here to build support for Analog Devices adis16300, adis16344,
drivers/staging/iio/imu/adis16400_ring.c +4 -4
index d46c1e3..319c2c0 100644
@@ -7,7 +7,7 @@
 #include <linux/export.h>
 
 #include <linux/iio/iio.h>
-#include "../ring_sw.h"
+#include <linux/iio/kfifo_buf.h>
 #include <linux/iio/trigger_consumer.h>
 #include "adis16400.h"
 
@@ -161,7 +161,7 @@ done:
 void adis16400_unconfigure_ring(struct iio_dev *indio_dev)
 {
 	iio_dealloc_pollfunc(indio_dev->pollfunc);
-	iio_sw_rb_free(indio_dev->buffer);
+	iio_kfifo_free(indio_dev->buffer);
 }
 
 static const struct iio_buffer_setup_ops adis16400_ring_setup_ops = {
@@ -175,7 +175,7 @@ int adis16400_configure_ring(struct iio_dev *indio_dev)
 	int ret = 0;
 	struct iio_buffer *ring;
 
-	ring = iio_sw_rb_allocate(indio_dev);
+	ring = iio_kfifo_allocate(indio_dev);
 	if (!ring) {
 		ret = -ENOMEM;
 		return ret;
@@ -193,12 +193,12 @@ int adis16400_configure_ring(struct iio_dev *indio_dev)
 						 indio_dev->id);
 	if (indio_dev->pollfunc == NULL) {
 		ret = -ENOMEM;
-		goto error_iio_sw_rb_free;
+		goto error_iio_kfifo_free;

drivers/staging/iio/imu/adis16400_ring.c int adis16400_configure_ring(struct iio_dev *indio_dev) · line 204

Quoted 10 lines
drivers/staging/iio/imu/adis16400_ring.c +2 -2
 	}
 
 	indio_dev->modes |= INDIO_BUFFER_TRIGGERED;
 	return 0;
-error_iio_sw_rb_free:
-	iio_sw_rb_free(indio_dev->buffer);
+error_iio_kfifo_free:
+	iio_kfifo_free(indio_dev->buffer);
 	return ret;
 }

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

author maintainer
#7 lore raw

PATCH 5/5 staging:iio: drop sw_ring buffer implementation.

In reply to Jonathan Cameron

Whilst this is IIO's oldest buffer implementation it is messy, poorly implemented and whilst it works, no one is entirely sure it always will.

New IIO drivers have not been using this for some time and now all remaining old users have been converted to use the kfifo based alternative.

Clearly a fifo isn't the same as a ring buffer but in many use cases it really doesn't matter. We also loose the watershed based poll implementation. However having poll effectively report data only when the buffer was half full was at best an 'unusual' use of the interface.

At somepoint in the future we may bring watersheds back on a different buffer implementation, but then we will think a lot more about how to do the interface first.

---
 drivers/staging/iio/Kconfig   |  13 --
 drivers/staging/iio/Makefile  |   2 -
 drivers/staging/iio/ring_sw.c | 366 ------------------------------------------
 drivers/staging/iio/ring_sw.h |  30 ----
 4 files changed, 411 deletions(-)
drivers/staging/iio/Kconfig +0 -13
index ca56c75..d7f9929 100644
@@ -12,19 +12,6 @@ config IIO_ST_HWMON
 	  map allows IIO devices to provide  basic hwmon functionality
 	  for those channels specified in the map.
 
-if IIO_BUFFER
-
-config IIO_SW_RING
-       select IIO_TRIGGER
-	tristate "Industrial I/O lock free software ring"
-	help
-	  Example software ring buffer implementation.  The design aim
-	  of this particular realization was to minimize write locking
-	  with the intention that some devices would be able to write
-	  in interrupt context.
-
-endif # IIO_BUFFER
-
 source "drivers/staging/iio/accel/Kconfig"
 source "drivers/staging/iio/adc/Kconfig"
 source "drivers/staging/iio/addac/Kconfig"
drivers/staging/iio/Makefile +0 -2
index fa6937d..12984da 100644
@@ -2,8 +2,6 @@
 # Makefile for the industrial I/O core.
 #
 
-obj-$(CONFIG_IIO_SW_RING) += ring_sw.o
-
 obj-$(CONFIG_IIO_SIMPLE_DUMMY) += iio_dummy.o
 iio_dummy-y := iio_simple_dummy.o
 iio_dummy-$(CONFIG_IIO_SIMPLE_DUMMY_EVENTS) += iio_simple_dummy_events.o
drivers/staging/iio/ring_sw.c deleted +0 -366

366 lines not on this page · raw message

drivers/staging/iio/ring_sw.h deleted +0 -30
deleted file mode 100644
index a5857aa..0000000
@@ -1,30 +0,0 @@
-/* The industrial I/O simple minimally locked ring buffer.
- *
- * 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.
- *
- * This code is deliberately kept separate from the main industrialio I/O core
- * as it is intended that in the future a number of different software ring
- * buffer implementations will exist with different characteristics to suit
- * different applications.
- *
- * This particular one was designed for a data capture application where it was
- * particularly important that no userspace reads would interrupt the capture
- * process. To this end the ring is not locked during a read.
- *
- * Comments on this buffer design welcomed. It's far from efficient and some of
- * my understanding of the effects of scheduling on this are somewhat limited.
- * Frankly, to my mind, this is the current weak point in the industrial I/O
- * patch set.
- */
-
-#ifndef _IIO_RING_SW_H_
-#define _IIO_RING_SW_H_
-#include <linux/iio/buffer.h>
-
-struct iio_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev);
-void iio_sw_rb_free(struct iio_buffer *ring);
-#endif /* _IIO_RING_SW_H_ */
Signature · 1 line
1.8.0.1
author maintainer
#8 lore raw
In reply to Jonathan Cameron

Added all but patch 4 to the togreg branch of
iio.git given the only reason this was held was the just merged series cleaning up the adis16400 driver (which included as a side effect removing the code patch 4 dealt with).

Quoted 44 lines · Jonathan Cameron

sw_ring was the original buffer implementation for IIO. It kind of evolved over a couple of late nights and even though I wrote it I was never convinced it was right. Then a nice kfifo implementation came along and in the vast majority of IIO use cases whether we have a kfifo or a ring buffer is not as it turns out that important.

We have been telling people not to use this for quite some time now. Lets make that finally a really hard rule by dropping it. There are 4 remaining users. This patch drops support form lis3l02dq which had support for both this and kfifo. For the other 3 users it simply switches over to kfifo. We haven't seen any real problems doing this with any other driver so I can't see why these would cause trouble!

Note my aim for this cycle ist to greatly cut down what we have left in staging by removing legacy cruft and getting other stuff cleaned up and out!

Jonathan

Jonathan Cameron (5):
staging:iio:accel:lis3l02dq remove sw_ring support. staging:iio:impedance-analyzer switch from sw_ring to kfifo. staging:iio:meter:ade7758 switch from sw_ring to kfifo staging:iio:imu: adis16400 switch from sw_ring to kfifo staging:iio: drop sw_ring buffer implementation.

 drivers/staging/iio/Kconfig                     |  13 -
 drivers/staging/iio/Makefile                    |   2 -
 drivers/staging/iio/accel/Kconfig               |  23 +-
 drivers/staging/iio/accel/lis3l02dq.h           |   8 -
 drivers/staging/iio/accel/lis3l02dq_ring.c      |   7 +-
 drivers/staging/iio/impedance-analyzer/Kconfig  |   2 +-
 drivers/staging/iio/impedance-analyzer/ad5933.c |   8 +-
 drivers/staging/iio/imu/Kconfig                 |   2 +-
 drivers/staging/iio/imu/adis16400_ring.c        |  12 +-
 drivers/staging/iio/meter/Kconfig               |   2 +-
 drivers/staging/iio/meter/ade7758_ring.c        |  12 +-
 drivers/staging/iio/ring_sw.c                   | 366 ------------------------
 drivers/staging/iio/ring_sw.h                   |  30 --
 13 files changed, 23 insertions(+), 464 deletions(-)
 delete mode 100644 drivers/staging/iio/ring_sw.c
 delete mode 100644 drivers/staging/iio/ring_sw.h