From: Jonathan Cameron <jic23@kernel.org>
To: "Ardelean, Alexandru" <alexandru.Ardelean@analog.com>
Cc: "devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-iio@vger.kernel.org" <linux-iio@vger.kernel.org>,
"robh+dt@kernel.org" <robh+dt@kernel.org>
Subject: Re: [PATCH 1/5] iio: buffer-dmaengine: add dev-managed calls for buffer alloc/free
Date: Sun, 1 Mar 2020 16:02:06 +0000 [thread overview]
Message-ID: <20200301160206.501d18e2@archlinux> (raw)
In-Reply-To: <142a971a778bd8e8ad0bc830390d36e2ac10a5c6.camel@analog.com>
On Tue, 25 Feb 2020 13:33:59 +0000
"Ardelean, Alexandru" <alexandru.Ardelean@analog.com> wrote:
> On Fri, 2020-02-21 at 12:21 +0000, Jonathan Cameron wrote:
> > [External]
> >
> > On Thu, 20 Feb 2020 17:03:13 +0200
> > Alexandru Ardelean <alexandru.ardelean@analog.com> wrote:
> >
> > > Currently, when using a 'iio_dmaengine_buffer_alloc()', an matching call to
> > > 'iio_dmaengine_buffer_free()' must be made.
> > >
> > > With this change, this can be avoided by using
> > > 'devm_iio_dmaengine_buffer_alloc()'. The buffer will get free'd via the
> > > device's devres handling.
> > >
> > > Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
> > > ---
> > > .../buffer/industrialio-buffer-dmaengine.c | 70 +++++++++++++++++++
> > > include/linux/iio/buffer-dmaengine.h | 5 ++
> > > 2 files changed, 75 insertions(+)
> > >
> > > diff --git a/drivers/iio/buffer/industrialio-buffer-dmaengine.c
> > > b/drivers/iio/buffer/industrialio-buffer-dmaengine.c
> > > index b129693af0fd..eff89037e3f5 100644
> > > --- a/drivers/iio/buffer/industrialio-buffer-dmaengine.c
> > > +++ b/drivers/iio/buffer/industrialio-buffer-dmaengine.c
> > > @@ -229,6 +229,76 @@ void iio_dmaengine_buffer_free(struct iio_buffer
> > > *buffer)
> > > }
> > > EXPORT_SYMBOL_GPL(iio_dmaengine_buffer_free);
> > >
> > > +static void __devm_iio_dmaengine_buffer_free(struct device *dev, void *res)
> > > +{
> > > + iio_dmaengine_buffer_free(*(struct iio_buffer **)res);
> > > +}
> > > +
> > > +/**
> > > + * devm_iio_dmaengine_buffer_alloc() - Resource-managed
> > > iio_dmaengine_buffer_alloc()
> > > + * @dev: Parent device for the buffer
> > > + * @channel: DMA channel name, typically "rx".
> > > + *
> > > + * This allocates a new IIO buffer which internally uses the DMAengine
> > > framework
> > > + * to perform its transfers. The parent device will be used to request the
> > > DMA
> > > + * channel.
> > > + *
> > > + * Once done using the buffer iio_dmaengine_buffer_free() should be used to
> > > + * release it.
> >
> > Umm. It really shouldn't!
>
> Yeah.
> Copy+paste.
> My bad.
>
>
> > > + */
> > > +struct iio_buffer *devm_iio_dmaengine_buffer_alloc(struct device *dev,
> > > + const char *channel)
> > > +{
> > > + struct iio_buffer **bufferp, *buffer;
> > > +
> > > + bufferp = devres_alloc(__devm_iio_dmaengine_buffer_free,
> > > + sizeof(*bufferp), GFP_KERNEL);
> > > + if (!bufferp)
> > > + return ERR_PTR(-ENOMEM);
> > > +
> > > + buffer = iio_dmaengine_buffer_alloc(dev, channel);
> > > + if (!IS_ERR(buffer)) {
> > > + *bufferp = buffer;
> > > + devres_add(dev, bufferp);
> >
> > From a flow point of view I'd prefer.
> >
> > if (IS_ERR(buffer) {
> > devres_free(buferp)
> > return buffer;
> > }
> >
> > *bufferp = buffer;
> > devres_add(dev, bufferp);
> >
> > return buffer;
> >
> >
> > > + } else {
> > > + devres_free(bufferp);
> > > + }
> > > +
> > > + return buffer;
> > > +}
> > > +EXPORT_SYMBOL_GPL(devm_iio_dmaengine_buffer_alloc);
> > > +
> > > +static int devm_iio_dmaengine_buffer_match(struct device *dev, void *res,
> > > + void *data)
> > > +{
> > > + struct iio_buffer **r = res;
> > > +
> > > + if (!r || !*r) {
> > > + WARN_ON(!r || !*r);
> > > + return 0;
> > > + }
> > > +
> > > + return *r == data;
> > > +}
> > > +
> > > +/**
> > > + * devm_iio_dmaengine_buffer_free - iio_dmaengine_buffer_free
> > > + * @dev: Device this iio_buffer belongs to
> > > + * @buffer: The iio_buffer associated with the device
> > > + *
> > > + * Free buffer allocated with devm_iio_dmaengine_buffer_alloc().
> > > + */
> > > +void devm_iio_dmaengine_buffer_free(struct device *dev,
> > > + struct iio_buffer *buffer)
> > > +{
> > > + int rc;
> > > +
> > > + rc = devres_release(dev, __devm_iio_dmaengine_buffer_free,
> > > + devm_iio_dmaengine_buffer_match, buffer);
> > > + WARN_ON(rc);
> > > +}
> > > +EXPORT_SYMBOL_GPL(devm_iio_dmaengine_buffer_free);
>
> Should I remove devm_iio_dmaengine_buffer_free() ?
> There was a comment on the AXI ADC that may apply here as well, about maybe
> removing it.
yup. Drop it.
>
> > > +
> > > MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
> > > MODULE_DESCRIPTION("DMA buffer for the IIO framework");
> > > MODULE_LICENSE("GPL");
> > > diff --git a/include/linux/iio/buffer-dmaengine.h
> > > b/include/linux/iio/buffer-dmaengine.h
> > > index b3a57444a886..8dcd973d76c1 100644
> > > --- a/include/linux/iio/buffer-dmaengine.h
> > > +++ b/include/linux/iio/buffer-dmaengine.h
> > > @@ -14,4 +14,9 @@ struct iio_buffer *iio_dmaengine_buffer_alloc(struct
> > > device *dev,
> > > const char *channel);
> > > void iio_dmaengine_buffer_free(struct iio_buffer *buffer);
> > >
> > > +struct iio_buffer *devm_iio_dmaengine_buffer_alloc(struct device *dev,
> > > + const char *channel);
> > > +void devm_iio_dmaengine_buffer_free(struct device *dev,
> > > + struct iio_buffer *buffer);
> > Please align parameters with opening bracket where possible.
> >
>
> ack
>
> > Thanks,
> >
> > Jonathan
> >
> > > +
> > > #endif
prev parent reply other threads:[~2020-03-01 16:02 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-20 15:03 [PATCH 1/5] iio: buffer-dmaengine: add dev-managed calls for buffer alloc/free Alexandru Ardelean
2020-02-20 15:03 ` [PATCH 2/5] iio: adc: axi-adc: add support for AXI ADC IP core Alexandru Ardelean
2020-02-21 12:44 ` Jonathan Cameron
2020-02-25 13:51 ` Ardelean, Alexandru
2020-02-20 15:03 ` [PATCH 3/5] dt-bindings: iio: adc: add bindings doc for AXI ADC driver Alexandru Ardelean
2020-02-20 20:35 ` Rob Herring
2020-02-20 15:03 ` [PATCH 4/5] iio: adc: ad9467: add support AD9467 ADC Alexandru Ardelean
2020-02-21 12:57 ` Jonathan Cameron
2020-02-25 15:21 ` Ardelean, Alexandru
2020-02-26 11:30 ` Ardelean, Alexandru
2020-03-01 16:03 ` Jonathan Cameron
2020-02-20 15:03 ` [PATCH 5/5] dt-bindings: iio: adc: add bindings doc for " Alexandru Ardelean
2020-02-20 20:36 ` Rob Herring
2020-02-21 12:21 ` [PATCH 1/5] iio: buffer-dmaengine: add dev-managed calls for buffer alloc/free Jonathan Cameron
2020-02-25 13:33 ` Ardelean, Alexandru
2020-03-01 16:02 ` Jonathan Cameron [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200301160206.501d18e2@archlinux \
--to=jic23@kernel.org \
--cc=alexandru.Ardelean@analog.com \
--cc=devicetree@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robh+dt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.