All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Oleksandr Kravchenko
	<x0199363@ti.com>,linux-iio@vger.kernel.org,linux-kernel@vger.kernel.org,linux-doc@vger.kernel.org
Cc: grant.likely@linaro.org,rob.herring@calxeda.com,rob@landley.net,jic23@cam.ac.uk,pmeerw@pmeerw.net,holler@ahsoftware.de,srinivas.pandruvada@intel.com,devicetree-discuss@lists.ozlabs.org,grygorii.strashko@ti.com,Oleksandr
	Kravchenko <o.v.kravchenko@globallogic.com>
Subject: Re: [PATCH 1/3] iio: core: implement devm_iio_device_alloc/devm_iio_device_free
Date: Mon, 22 Jul 2013 17:27:05 +0100	[thread overview]
Message-ID: <35a5c862-d56d-4230-a193-d19610c70dda@email.android.com> (raw)
In-Reply-To: <1374142766-29736-1-git-send-email-x0199363@ti.com>

[-- Attachment #1: Type: text/plain, Size: 4184 bytes --]

Just noticed that we need do document this in devres.txt....

Oleksandr Kravchenko <x0199363@ti.com> wrote:
>From: Grygorii Strashko <grygorii.strashko@ti.com>
>
>Add a resource managed devm_iio_device_alloc()/devm_iio_device_free()
>to automatically clean up any allocations made by IIO drivers,
>thus leading to simplified IIO drivers code.
>
>In addition, this will allow IIO drivers to use other devm_*() API
>(like devm_request_irq) and don't care about the race between
>iio_device_free() and the release of resources by Device core
>during driver removing.
>
>Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
>[o.v.kravchenko@globallogic.com: fix return value ib
>devm_iio_device_alloc
>in case if devres_alloc failed, remove unused variable "rc"]
>Signed-off-by: Oleksandr Kravchenko <o.v.kravchenko@globallogic.com>
>Tested-by: Oleksandr Kravchenko <o.v.kravchenko@globallogic.com>
>---
>drivers/iio/industrialio-core.c |   47
>+++++++++++++++++++++++++++++++++++++++
> include/linux/iio/iio.h         |   25 +++++++++++++++++++++
> 2 files changed, 72 insertions(+)
>
>diff --git a/drivers/iio/industrialio-core.c
>b/drivers/iio/industrialio-core.c
>index e145931..d56d122 100644
>--- a/drivers/iio/industrialio-core.c
>+++ b/drivers/iio/industrialio-core.c
>@@ -912,6 +912,53 @@ void iio_device_free(struct iio_dev *dev)
> }
> EXPORT_SYMBOL(iio_device_free);
> 
>+static void devm_iio_device_release(struct device *dev, void *res)
>+{
>+	iio_device_free(*(struct iio_dev **)res);
>+}
>+
>+static int devm_iio_device_match(struct device *dev, void *res, void
>*data)
>+{
>+	struct iio_dev **r = res;
>+	if (!r || !*r) {
>+		WARN_ON(!r || !*r);
>+		return 0;
>+	}
>+	return *r == data;
>+}
>+
>+struct iio_dev *devm_iio_device_alloc(struct device *dev, int
>sizeof_priv)
>+{
>+	struct iio_dev **ptr, *iio_dev;
>+
>+	ptr = devres_alloc(devm_iio_device_release, sizeof(*ptr),
>+			   GFP_KERNEL);
>+	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;
>+		devres_add(dev, ptr);
>+	} else {
>+		devres_free(ptr);
>+	}
>+
>+	return iio_dev;
>+}
>+EXPORT_SYMBOL_GPL(devm_iio_device_alloc);
>+
>+void devm_iio_device_free(struct device *dev, struct iio_dev *iio_dev)
>+{
>+	int rc;
>+
>+	rc = devres_release(dev, devm_iio_device_release,
>+			    devm_iio_device_match, iio_dev);
>+	WARN_ON(rc);
>+}
>+EXPORT_SYMBOL_GPL(devm_iio_device_free);
>+
> /**
>  * iio_chrdev_open() - chrdev file open for buffer access and ioctls
>  **/
>diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
>index 8d171f4..f1d99f6 100644
>--- a/include/linux/iio/iio.h
>+++ b/include/linux/iio/iio.h
>@@ -532,6 +532,31 @@ static inline struct iio_dev *iio_priv_to_dev(void
>*priv)
> void iio_device_free(struct iio_dev *indio_dev);
> 
> /**
>+ * devm_iio_device_alloc - Resource-managed iio_device_alloc()
>+ * @dev: 		Device to allocate iio_dev for
>+ * @sizeof_priv: 	Space to allocate for private structure.
>+ *
>+ * Managed iio_device_alloc.  iio_dev allocated with this function is
>+ * automatically freed on driver detach.
>+ *
>+ * If an iio_dev allocated with this function needs to be freed
>separately,
>+ * devm_iio_device_free() must be used.
>+ *
>+ * RETURNS:
>+ * Pointer to allocated iio_dev on success, NULL on failure.
>+ */
>+struct iio_dev *devm_iio_device_alloc(struct device *dev, int
>sizeof_priv);
>+
>+/**
>+ * devm_iio_device_free - Resource-managed iio_device_free()
>+ * @dev:		Device this iio_dev belongs to
>+ * @indio_dev: 		the iio_dev associated with the device
>+ *
>+ * Free indio_dev allocated with devm_iio_device_alloc().
>+ */
>+void devm_iio_device_free(struct device *dev, struct iio_dev
>*iio_dev);
>+
>+/**
>* iio_buffer_enabled() - helper function to test if the buffer is
>enabled
>  * @indio_dev:		IIO device structure for device
>  **/
>-- 
>1.7.9.5
>
>--
>To unsubscribe from this list: send the line "unsubscribe linux-iio" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
Sent from my Android phone with K-9 Mail. Please excuse my brevity.

[-- Attachment #2: Type: text/html, Size: 4680 bytes --]

  parent reply	other threads:[~2013-07-22 16:27 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-18 10:19 [PATCH 1/3] iio: core: implement devm_iio_device_alloc/devm_iio_device_free Oleksandr Kravchenko
2013-07-18 10:19 ` Oleksandr Kravchenko
2013-07-18 10:19 ` [PATCH 2/3] of: Add Avago Technologies vendor prefix Oleksandr Kravchenko
2013-07-18 10:19   ` Oleksandr Kravchenko
2013-07-18 10:19 ` [PATCH 3/3] iio: add APDS9300 ambilent light sensor driver Oleksandr Kravchenko
2013-07-18 10:19   ` Oleksandr Kravchenko
2013-07-21 17:24   ` Jonathan Cameron
2013-07-20 13:05 ` [PATCH 1/3] iio: core: implement devm_iio_device_alloc/devm_iio_device_free Lars-Peter Clausen
2013-07-21 16:54   ` Jonathan Cameron
2013-07-21 16:54     ` Jonathan Cameron
2013-07-22 16:27 ` Jonathan Cameron [this message]
  -- strict thread matches above, loose matches on Subject: below --
2013-07-18  9:44 Oleksandr Kravchenko
2013-07-18  9:44 ` Oleksandr Kravchenko

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=35a5c862-d56d-4230-a193-d19610c70dda@email.android.com \
    --to=jic23@kernel.org \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=grant.likely@linaro.org \
    --cc=grygorii.strashko@ti.com \
    --cc=holler@ahsoftware.de \
    --cc=jic23@cam.ac.uk \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=o.v.kravchenko@globallogic.com \
    --cc=pmeerw@pmeerw.net \
    --cc=rob.herring@calxeda.com \
    --cc=rob@landley.net \
    --cc=srinivas.pandruvada@intel.com \
    --cc=x0199363@ti.com \
    /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.