* [PATCH v2 0/3] iio: Add resource management kfifo alloc/free
@ 2014-12-19 17:39 Karol Wrona
2014-12-19 17:39 ` [PATCH v2 1/3] iio: kfifo: Remove unused argument in iio_kfifo_allocate Karol Wrona
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Karol Wrona @ 2014-12-19 17:39 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio, Hartmut Knaack, Lars-Peter Clausen,
Peter Meerwald, linux-kernel
Cc: Bartlomiej Zolnierkiewicz, Kyungmin Park, Karol Wrona, Karol Wrona
Hello,
iio kfifo alloc took one argument struct iio_dev * indio_dev which was not used
so it was removed in allocate function and in several drivers which used it.
Second patch adds devm_ alloc/free.
Karol
changes from RFC:
- rebased on next-20141219
- changes in clients
- add minor doc fix to iio core
Karol Wrona (3):
iio: kfifo: Remove unused argument in iio_kfifo_allocate
iio: kfifo: Add resource management devm_iio_kfifo_allocate/free
iio: core: Get rid of misleading comment
drivers/iio/adc/ti_am335x_adc.c | 2 +-
drivers/iio/industrialio-core.c | 1 -
drivers/iio/industrialio-triggered-buffer.c | 2 +-
drivers/iio/kfifo_buf.c | 60 ++++++++++++++++++++++-
drivers/staging/iio/accel/lis3l02dq_ring.c | 2 +-
drivers/staging/iio/iio_simple_dummy_buffer.c | 2 +-
drivers/staging/iio/impedance-analyzer/ad5933.c | 2 +-
drivers/staging/iio/meter/ade7758_ring.c | 2 +-
include/linux/iio/kfifo_buf.h | 5 +-
9 files changed, 68 insertions(+), 10 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/3] iio: kfifo: Remove unused argument in iio_kfifo_allocate
2014-12-19 17:39 [PATCH v2 0/3] iio: Add resource management kfifo alloc/free Karol Wrona
@ 2014-12-19 17:39 ` Karol Wrona
2014-12-26 11:35 ` Jonathan Cameron
2014-12-19 17:39 ` [PATCH v2 2/3] iio: kfifo: Add resource management devm_iio_kfifo_allocate/free Karol Wrona
2014-12-19 17:39 ` [PATCH v2 3/3] iio: core: Get rid of misleading comment Karol Wrona
2 siblings, 1 reply; 7+ messages in thread
From: Karol Wrona @ 2014-12-19 17:39 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio, Hartmut Knaack, Lars-Peter Clausen,
Peter Meerwald, linux-kernel
Cc: Bartlomiej Zolnierkiewicz, Kyungmin Park, Karol Wrona, Karol Wrona
indio_dev was unused in function body plus some small style fix - add new
lines after "if(sth) return sth" and before the last return statement.
The argument was removed also in its client.
Signed-off-by: Karol Wrona <k.wrona@samsung.com>
---
drivers/iio/adc/ti_am335x_adc.c | 2 +-
drivers/iio/industrialio-triggered-buffer.c | 2 +-
drivers/iio/kfifo_buf.c | 6 ++++--
drivers/staging/iio/accel/lis3l02dq_ring.c | 2 +-
drivers/staging/iio/iio_simple_dummy_buffer.c | 2 +-
drivers/staging/iio/impedance-analyzer/ad5933.c | 2 +-
drivers/staging/iio/meter/ade7758_ring.c | 2 +-
include/linux/iio/kfifo_buf.h | 2 +-
8 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index b730864..bf87993 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -250,7 +250,7 @@ static int tiadc_iio_buffered_hardware_setup(struct iio_dev *indio_dev,
struct iio_buffer *buffer;
int ret;
- buffer = iio_kfifo_allocate(indio_dev);
+ buffer = iio_kfifo_allocate();
if (!buffer)
return -ENOMEM;
diff --git a/drivers/iio/industrialio-triggered-buffer.c b/drivers/iio/industrialio-triggered-buffer.c
index d6f54930..6c6307a 100644
--- a/drivers/iio/industrialio-triggered-buffer.c
+++ b/drivers/iio/industrialio-triggered-buffer.c
@@ -49,7 +49,7 @@ int iio_triggered_buffer_setup(struct iio_dev *indio_dev,
struct iio_buffer *buffer;
int ret;
- buffer = iio_kfifo_allocate(indio_dev);
+ buffer = iio_kfifo_allocate();
if (!buffer) {
ret = -ENOMEM;
goto error_ret;
diff --git a/drivers/iio/kfifo_buf.c b/drivers/iio/kfifo_buf.c
index 7134e8a..a383291 100644
--- a/drivers/iio/kfifo_buf.c
+++ b/drivers/iio/kfifo_buf.c
@@ -166,19 +166,21 @@ static const struct iio_buffer_access_funcs kfifo_access_funcs = {
.release = &iio_kfifo_buffer_release,
};
-struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev)
+struct iio_buffer *iio_kfifo_allocate(void)
{
struct iio_kfifo *kf;
- kf = kzalloc(sizeof *kf, GFP_KERNEL);
+ kf = kzalloc(sizeof(*kf), GFP_KERNEL);
if (!kf)
return NULL;
+
kf->update_needed = true;
iio_buffer_init(&kf->buffer);
kf->buffer.attrs = &iio_kfifo_attribute_group;
kf->buffer.access = &kfifo_access_funcs;
kf->buffer.length = 2;
mutex_init(&kf->user_lock);
+
return &kf->buffer;
}
EXPORT_SYMBOL(iio_kfifo_allocate);
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index 9efc77b..1fd9009 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -393,7 +393,7 @@ int lis3l02dq_configure_buffer(struct iio_dev *indio_dev)
int ret;
struct iio_buffer *buffer;
- buffer = iio_kfifo_allocate(indio_dev);
+ buffer = iio_kfifo_allocate();
if (!buffer)
return -ENOMEM;
diff --git a/drivers/staging/iio/iio_simple_dummy_buffer.c b/drivers/staging/iio/iio_simple_dummy_buffer.c
index fd74f91..df765c9 100644
--- a/drivers/staging/iio/iio_simple_dummy_buffer.c
+++ b/drivers/staging/iio/iio_simple_dummy_buffer.c
@@ -122,7 +122,7 @@ int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev,
struct iio_buffer *buffer;
/* Allocate a buffer to use - here a kfifo */
- buffer = iio_kfifo_allocate(indio_dev);
+ buffer = iio_kfifo_allocate();
if (buffer == NULL) {
ret = -ENOMEM;
goto error_ret;
diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
index b6bd609..ace9ef8 100644
--- a/drivers/staging/iio/impedance-analyzer/ad5933.c
+++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
@@ -626,7 +626,7 @@ static int ad5933_register_ring_funcs_and_init(struct iio_dev *indio_dev)
{
struct iio_buffer *buffer;
- buffer = iio_kfifo_allocate(indio_dev);
+ buffer = iio_kfifo_allocate();
if (!buffer)
return -ENOMEM;
diff --git a/drivers/staging/iio/meter/ade7758_ring.c b/drivers/staging/iio/meter/ade7758_ring.c
index 6e90064..31d2cf3 100644
--- a/drivers/staging/iio/meter/ade7758_ring.c
+++ b/drivers/staging/iio/meter/ade7758_ring.c
@@ -118,7 +118,7 @@ int ade7758_configure_ring(struct iio_dev *indio_dev)
struct iio_buffer *buffer;
int ret = 0;
- buffer = iio_kfifo_allocate(indio_dev);
+ buffer = iio_kfifo_allocate();
if (!buffer) {
ret = -ENOMEM;
return ret;
diff --git a/include/linux/iio/kfifo_buf.h b/include/linux/iio/kfifo_buf.h
index 25eeac7..1a8d57a 100644
--- a/include/linux/iio/kfifo_buf.h
+++ b/include/linux/iio/kfifo_buf.h
@@ -5,7 +5,7 @@
#include <linux/iio/iio.h>
#include <linux/iio/buffer.h>
-struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev);
+struct iio_buffer *iio_kfifo_allocate(void);
void iio_kfifo_free(struct iio_buffer *r);
#endif
--
1.7.9.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/3] iio: kfifo: Add resource management devm_iio_kfifo_allocate/free
2014-12-19 17:39 [PATCH v2 0/3] iio: Add resource management kfifo alloc/free Karol Wrona
2014-12-19 17:39 ` [PATCH v2 1/3] iio: kfifo: Remove unused argument in iio_kfifo_allocate Karol Wrona
@ 2014-12-19 17:39 ` Karol Wrona
2014-12-26 11:40 ` Jonathan Cameron
2014-12-19 17:39 ` [PATCH v2 3/3] iio: core: Get rid of misleading comment Karol Wrona
2 siblings, 1 reply; 7+ messages in thread
From: Karol Wrona @ 2014-12-19 17:39 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio, Hartmut Knaack, Lars-Peter Clausen,
Peter Meerwald, linux-kernel
Cc: Bartlomiej Zolnierkiewicz, Kyungmin Park, Karol Wrona, Karol Wrona
iio kfifo allocate/free gained their devm_ wrappers.
Signed-off-by: Karol Wrona <k.wrona@samsung.com>
Suggested-by: Jonathan Cameron <jic23@kernel.org>
---
drivers/iio/kfifo_buf.c | 54 +++++++++++++++++++++++++++++++++++++++++
include/linux/iio/kfifo_buf.h | 3 +++
2 files changed, 57 insertions(+)
diff --git a/drivers/iio/kfifo_buf.c b/drivers/iio/kfifo_buf.c
index a383291..5d44099 100644
--- a/drivers/iio/kfifo_buf.c
+++ b/drivers/iio/kfifo_buf.c
@@ -191,4 +191,58 @@ void iio_kfifo_free(struct iio_buffer *r)
}
EXPORT_SYMBOL(iio_kfifo_free);
+static void devm_iio_kfifo_release(struct device *dev, void *res)
+{
+ iio_kfifo_free(*(struct iio_buffer **)res);
+}
+
+static int devm_iio_kfifo_match(struct device *dev, void *res, void *data)
+{
+ struct iio_buffer **r = res;
+
+ if (WARN_ON(!r || !*r))
+ return 0;
+
+ return *r == data;
+}
+
+/**
+ * devm_iio_fifo_allocate - Resource-managed iio_kfifo_allocate()
+ * @dev: Device to allocate kfifo buffer for
+ *
+ * RETURNS:
+ * Pointer to allocated iio_buffer on success, NULL on failure.
+ */
+struct iio_buffer *devm_iio_kfifo_allocate(struct device *dev)
+{
+ struct iio_buffer **ptr, *r;
+
+ ptr = devres_alloc(devm_iio_kfifo_release, sizeof(*ptr), GFP_KERNEL);
+ if (!ptr)
+ return NULL;
+
+ r = iio_kfifo_allocate();
+ if (r) {
+ *ptr = r;
+ devres_add(dev, ptr);
+ } else {
+ devres_free(ptr);
+ }
+
+ return r;
+}
+EXPORT_SYMBOL(devm_iio_kfifo_allocate);
+
+/**
+ * devm_iio_fifo_free - Resource-managed iio_kfifo_free()
+ * @dev: Device the buffer belongs to
+ * @r: The buffer associated with the device
+ */
+void devm_iio_kfifo_free(struct device *dev, struct iio_buffer *r)
+{
+ WARN_ON(devres_release(dev, devm_iio_kfifo_release,
+ devm_iio_kfifo_match, r));
+}
+EXPORT_SYMBOL(devm_iio_kfifo_free);
+
MODULE_LICENSE("GPL");
diff --git a/include/linux/iio/kfifo_buf.h b/include/linux/iio/kfifo_buf.h
index 1a8d57a..1683bc7 100644
--- a/include/linux/iio/kfifo_buf.h
+++ b/include/linux/iio/kfifo_buf.h
@@ -8,4 +8,7 @@
struct iio_buffer *iio_kfifo_allocate(void);
void iio_kfifo_free(struct iio_buffer *r);
+struct iio_buffer *devm_iio_kfifo_allocate(struct device *dev);
+void devm_iio_kfifo_free(struct device *dev, struct iio_buffer *r);
+
#endif
--
1.7.9.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 3/3] iio: core: Get rid of misleading comment
2014-12-19 17:39 [PATCH v2 0/3] iio: Add resource management kfifo alloc/free Karol Wrona
2014-12-19 17:39 ` [PATCH v2 1/3] iio: kfifo: Remove unused argument in iio_kfifo_allocate Karol Wrona
2014-12-19 17:39 ` [PATCH v2 2/3] iio: kfifo: Add resource management devm_iio_kfifo_allocate/free Karol Wrona
@ 2014-12-19 17:39 ` Karol Wrona
2014-12-26 11:41 ` Jonathan Cameron
2 siblings, 1 reply; 7+ messages in thread
From: Karol Wrona @ 2014-12-19 17:39 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio, Hartmut Knaack, Lars-Peter Clausen,
Peter Meerwald, linux-kernel
Cc: Bartlomiej Zolnierkiewicz, Kyungmin Park, Karol Wrona, Karol Wrona
This comment did not fit here. It explains why devm_kmalloc
uses dr_alloc. Generally is not needed at all.
Signed-off-by: Karol Wrona <k.wrona@samsung.com>
---
drivers/iio/industrialio-core.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index af3e76d..1d030ae 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -1035,7 +1035,6 @@ struct iio_dev *devm_iio_device_alloc(struct device *dev, int sizeof_priv)
if (!ptr)
return NULL;
- /* use raw alloc_dr for kmalloc caller tracing */
iio_dev = iio_device_alloc(sizeof_priv);
if (iio_dev) {
*ptr = iio_dev;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/3] iio: kfifo: Remove unused argument in iio_kfifo_allocate
2014-12-19 17:39 ` [PATCH v2 1/3] iio: kfifo: Remove unused argument in iio_kfifo_allocate Karol Wrona
@ 2014-12-26 11:35 ` Jonathan Cameron
0 siblings, 0 replies; 7+ messages in thread
From: Jonathan Cameron @ 2014-12-26 11:35 UTC (permalink / raw)
To: Karol Wrona, linux-iio, Hartmut Knaack, Lars-Peter Clausen,
Peter Meerwald, linux-kernel
Cc: Bartlomiej Zolnierkiewicz, Kyungmin Park, Karol Wrona
On 19/12/14 17:39, Karol Wrona wrote:
> indio_dev was unused in function body plus some small style fix - add new
> lines after "if(sth) return sth" and before the last return statement.
>
> The argument was removed also in its client.
>
> Signed-off-by: Karol Wrona <k.wrona@samsung.com>
Good cleanup - some fuzz applying and required a bit of hand editting
in kfifo_buf.c for reasons I couldn't immediately spot. Please sanity
check I haven't messed anything up.
Thanks,
Jonathan
> ---
> drivers/iio/adc/ti_am335x_adc.c | 2 +-
> drivers/iio/industrialio-triggered-buffer.c | 2 +-
> drivers/iio/kfifo_buf.c | 6 ++++--
> drivers/staging/iio/accel/lis3l02dq_ring.c | 2 +-
> drivers/staging/iio/iio_simple_dummy_buffer.c | 2 +-
> drivers/staging/iio/impedance-analyzer/ad5933.c | 2 +-
> drivers/staging/iio/meter/ade7758_ring.c | 2 +-
> include/linux/iio/kfifo_buf.h | 2 +-
> 8 files changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
> index b730864..bf87993 100644
> --- a/drivers/iio/adc/ti_am335x_adc.c
> +++ b/drivers/iio/adc/ti_am335x_adc.c
> @@ -250,7 +250,7 @@ static int tiadc_iio_buffered_hardware_setup(struct iio_dev *indio_dev,
> struct iio_buffer *buffer;
> int ret;
>
> - buffer = iio_kfifo_allocate(indio_dev);
> + buffer = iio_kfifo_allocate();
> if (!buffer)
> return -ENOMEM;
>
> diff --git a/drivers/iio/industrialio-triggered-buffer.c b/drivers/iio/industrialio-triggered-buffer.c
> index d6f54930..6c6307a 100644
> --- a/drivers/iio/industrialio-triggered-buffer.c
> +++ b/drivers/iio/industrialio-triggered-buffer.c
> @@ -49,7 +49,7 @@ int iio_triggered_buffer_setup(struct iio_dev *indio_dev,
> struct iio_buffer *buffer;
> int ret;
>
> - buffer = iio_kfifo_allocate(indio_dev);
> + buffer = iio_kfifo_allocate();
> if (!buffer) {
> ret = -ENOMEM;
> goto error_ret;
> diff --git a/drivers/iio/kfifo_buf.c b/drivers/iio/kfifo_buf.c
> index 7134e8a..a383291 100644
> --- a/drivers/iio/kfifo_buf.c
> +++ b/drivers/iio/kfifo_buf.c
> @@ -166,19 +166,21 @@ static const struct iio_buffer_access_funcs kfifo_access_funcs = {
> .release = &iio_kfifo_buffer_release,
> };
>
> -struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev)
> +struct iio_buffer *iio_kfifo_allocate(void)
> {
> struct iio_kfifo *kf;
>
> - kf = kzalloc(sizeof *kf, GFP_KERNEL);
> + kf = kzalloc(sizeof(*kf), GFP_KERNEL);
> if (!kf)
> return NULL;
> +
> kf->update_needed = true;
> iio_buffer_init(&kf->buffer);
> kf->buffer.attrs = &iio_kfifo_attribute_group;
> kf->buffer.access = &kfifo_access_funcs;
> kf->buffer.length = 2;
> mutex_init(&kf->user_lock);
> +
> return &kf->buffer;
> }
> EXPORT_SYMBOL(iio_kfifo_allocate);
> diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
> index 9efc77b..1fd9009 100644
> --- a/drivers/staging/iio/accel/lis3l02dq_ring.c
> +++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
> @@ -393,7 +393,7 @@ int lis3l02dq_configure_buffer(struct iio_dev *indio_dev)
> int ret;
> struct iio_buffer *buffer;
>
> - buffer = iio_kfifo_allocate(indio_dev);
> + buffer = iio_kfifo_allocate();
> if (!buffer)
> return -ENOMEM;
>
> diff --git a/drivers/staging/iio/iio_simple_dummy_buffer.c b/drivers/staging/iio/iio_simple_dummy_buffer.c
> index fd74f91..df765c9 100644
> --- a/drivers/staging/iio/iio_simple_dummy_buffer.c
> +++ b/drivers/staging/iio/iio_simple_dummy_buffer.c
> @@ -122,7 +122,7 @@ int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev,
> struct iio_buffer *buffer;
>
> /* Allocate a buffer to use - here a kfifo */
> - buffer = iio_kfifo_allocate(indio_dev);
> + buffer = iio_kfifo_allocate();
> if (buffer == NULL) {
> ret = -ENOMEM;
> goto error_ret;
> diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
> index b6bd609..ace9ef8 100644
> --- a/drivers/staging/iio/impedance-analyzer/ad5933.c
> +++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
> @@ -626,7 +626,7 @@ static int ad5933_register_ring_funcs_and_init(struct iio_dev *indio_dev)
> {
> struct iio_buffer *buffer;
>
> - buffer = iio_kfifo_allocate(indio_dev);
> + buffer = iio_kfifo_allocate();
> if (!buffer)
> return -ENOMEM;
>
> diff --git a/drivers/staging/iio/meter/ade7758_ring.c b/drivers/staging/iio/meter/ade7758_ring.c
> index 6e90064..31d2cf3 100644
> --- a/drivers/staging/iio/meter/ade7758_ring.c
> +++ b/drivers/staging/iio/meter/ade7758_ring.c
> @@ -118,7 +118,7 @@ int ade7758_configure_ring(struct iio_dev *indio_dev)
> struct iio_buffer *buffer;
> int ret = 0;
>
> - buffer = iio_kfifo_allocate(indio_dev);
> + buffer = iio_kfifo_allocate();
> if (!buffer) {
> ret = -ENOMEM;
> return ret;
> diff --git a/include/linux/iio/kfifo_buf.h b/include/linux/iio/kfifo_buf.h
> index 25eeac7..1a8d57a 100644
> --- a/include/linux/iio/kfifo_buf.h
> +++ b/include/linux/iio/kfifo_buf.h
> @@ -5,7 +5,7 @@
> #include <linux/iio/iio.h>
> #include <linux/iio/buffer.h>
>
> -struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev);
> +struct iio_buffer *iio_kfifo_allocate(void);
> void iio_kfifo_free(struct iio_buffer *r);
>
> #endif
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/3] iio: kfifo: Add resource management devm_iio_kfifo_allocate/free
2014-12-19 17:39 ` [PATCH v2 2/3] iio: kfifo: Add resource management devm_iio_kfifo_allocate/free Karol Wrona
@ 2014-12-26 11:40 ` Jonathan Cameron
0 siblings, 0 replies; 7+ messages in thread
From: Jonathan Cameron @ 2014-12-26 11:40 UTC (permalink / raw)
To: Karol Wrona, linux-iio, Hartmut Knaack, Lars-Peter Clausen,
Peter Meerwald, linux-kernel
Cc: Bartlomiej Zolnierkiewicz, Kyungmin Park, Karol Wrona
On 19/12/14 17:39, Karol Wrona wrote:
> iio kfifo allocate/free gained their devm_ wrappers.
>
> Signed-off-by: Karol Wrona <k.wrona@samsung.com>
> Suggested-by: Jonathan Cameron <jic23@kernel.org>
Applied to the togreg branch of iio.git.
One addition - added to the list of devm functions in
Documentation/device-model/devres.txt
> ---
> drivers/iio/kfifo_buf.c | 54 +++++++++++++++++++++++++++++++++++++++++
> include/linux/iio/kfifo_buf.h | 3 +++
> 2 files changed, 57 insertions(+)
>
> diff --git a/drivers/iio/kfifo_buf.c b/drivers/iio/kfifo_buf.c
> index a383291..5d44099 100644
> --- a/drivers/iio/kfifo_buf.c
> +++ b/drivers/iio/kfifo_buf.c
> @@ -191,4 +191,58 @@ void iio_kfifo_free(struct iio_buffer *r)
> }
> EXPORT_SYMBOL(iio_kfifo_free);
>
> +static void devm_iio_kfifo_release(struct device *dev, void *res)
> +{
> + iio_kfifo_free(*(struct iio_buffer **)res);
> +}
> +
> +static int devm_iio_kfifo_match(struct device *dev, void *res, void *data)
> +{
> + struct iio_buffer **r = res;
> +
> + if (WARN_ON(!r || !*r))
> + return 0;
> +
> + return *r == data;
> +}
> +
> +/**
> + * devm_iio_fifo_allocate - Resource-managed iio_kfifo_allocate()
> + * @dev: Device to allocate kfifo buffer for
> + *
> + * RETURNS:
> + * Pointer to allocated iio_buffer on success, NULL on failure.
> + */
> +struct iio_buffer *devm_iio_kfifo_allocate(struct device *dev)
> +{
> + struct iio_buffer **ptr, *r;
> +
> + ptr = devres_alloc(devm_iio_kfifo_release, sizeof(*ptr), GFP_KERNEL);
> + if (!ptr)
> + return NULL;
> +
> + r = iio_kfifo_allocate();
> + if (r) {
> + *ptr = r;
> + devres_add(dev, ptr);
> + } else {
> + devres_free(ptr);
> + }
> +
> + return r;
> +}
> +EXPORT_SYMBOL(devm_iio_kfifo_allocate);
> +
> +/**
> + * devm_iio_fifo_free - Resource-managed iio_kfifo_free()
> + * @dev: Device the buffer belongs to
> + * @r: The buffer associated with the device
> + */
> +void devm_iio_kfifo_free(struct device *dev, struct iio_buffer *r)
> +{
> + WARN_ON(devres_release(dev, devm_iio_kfifo_release,
> + devm_iio_kfifo_match, r));
> +}
> +EXPORT_SYMBOL(devm_iio_kfifo_free);
> +
> MODULE_LICENSE("GPL");
> diff --git a/include/linux/iio/kfifo_buf.h b/include/linux/iio/kfifo_buf.h
> index 1a8d57a..1683bc7 100644
> --- a/include/linux/iio/kfifo_buf.h
> +++ b/include/linux/iio/kfifo_buf.h
> @@ -8,4 +8,7 @@
> struct iio_buffer *iio_kfifo_allocate(void);
> void iio_kfifo_free(struct iio_buffer *r);
>
> +struct iio_buffer *devm_iio_kfifo_allocate(struct device *dev);
> +void devm_iio_kfifo_free(struct device *dev, struct iio_buffer *r);
> +
> #endif
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 3/3] iio: core: Get rid of misleading comment
2014-12-19 17:39 ` [PATCH v2 3/3] iio: core: Get rid of misleading comment Karol Wrona
@ 2014-12-26 11:41 ` Jonathan Cameron
0 siblings, 0 replies; 7+ messages in thread
From: Jonathan Cameron @ 2014-12-26 11:41 UTC (permalink / raw)
To: Karol Wrona, linux-iio, Hartmut Knaack, Lars-Peter Clausen,
Peter Meerwald, linux-kernel
Cc: Bartlomiej Zolnierkiewicz, Kyungmin Park, Karol Wrona
On 19/12/14 17:39, Karol Wrona wrote:
> This comment did not fit here. It explains why devm_kmalloc
> uses dr_alloc. Generally is not needed at all.
>
A classic bit of cut and paste I guess. Anyhow, applied.
Jonathan
> Signed-off-by: Karol Wrona <k.wrona@samsung.com>
> ---
> drivers/iio/industrialio-core.c | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
> index af3e76d..1d030ae 100644
> --- a/drivers/iio/industrialio-core.c
> +++ b/drivers/iio/industrialio-core.c
> @@ -1035,7 +1035,6 @@ struct iio_dev *devm_iio_device_alloc(struct device *dev, int sizeof_priv)
> if (!ptr)
> return NULL;
>
> - /* use raw alloc_dr for kmalloc caller tracing */
> iio_dev = iio_device_alloc(sizeof_priv);
> if (iio_dev) {
> *ptr = iio_dev;
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2014-12-26 11:41 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-19 17:39 [PATCH v2 0/3] iio: Add resource management kfifo alloc/free Karol Wrona
2014-12-19 17:39 ` [PATCH v2 1/3] iio: kfifo: Remove unused argument in iio_kfifo_allocate Karol Wrona
2014-12-26 11:35 ` Jonathan Cameron
2014-12-19 17:39 ` [PATCH v2 2/3] iio: kfifo: Add resource management devm_iio_kfifo_allocate/free Karol Wrona
2014-12-26 11:40 ` Jonathan Cameron
2014-12-19 17:39 ` [PATCH v2 3/3] iio: core: Get rid of misleading comment Karol Wrona
2014-12-26 11:41 ` Jonathan Cameron
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.