From: Ming Lei <ming.lei@canonical.com>
To: Linus Torvalds <torvalds@linux-foundation.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>,
Borislav Petkov <borislav.petkov@amd.com>,
linux-kernel@vger.kernel.org, Ming Lei <ming.lei@canonical.com>
Subject: [RFC PATCH 10/13] driver core: devres: introduce devres_for_each_res
Date: Wed, 25 Jul 2012 01:00:10 +0800 [thread overview]
Message-ID: <1343149213-10160-11-git-send-email-ming.lei@canonical.com> (raw)
In-Reply-To: <1343149213-10160-1-git-send-email-ming.lei@canonical.com>
This patch introduces one devres API of devres_for_each_res
so that the device's driver can iterate each resource it has
interest in.
The firmware loader will use the API to get each firmware name
from the device instance.
Signed-off-by: Ming Lei <ming.lei@canonical.com>
---
drivers/base/devres.c | 42 ++++++++++++++++++++++++++++++++++++++++++
include/linux/device.h | 3 +++
2 files changed, 45 insertions(+)
diff --git a/drivers/base/devres.c b/drivers/base/devres.c
index 2360adb..8273ba5 100644
--- a/drivers/base/devres.c
+++ b/drivers/base/devres.c
@@ -144,6 +144,48 @@ EXPORT_SYMBOL_GPL(devres_alloc);
#endif
/**
+ * devres_for_each_res - Resource iterator
+ * @dev: Device to iterate resource from
+ * @release: Look for resources associated with this release function
+ * @match: Match function (optional)
+ * @match_data: Data for the match function
+ * @fn: function to be called for each matched resource.
+ *
+ * Call @fn for each devres of @dev which is associated with @release
+ * and for which @match returns 1.
+ *
+ * RETURNS:
+ * void
+ */
+void devres_for_each_res(struct device *dev, dr_release_t release,
+ dr_match_t match, void *match_data,
+ void (*fn)(struct device *, void *))
+{
+ struct devres_node *node;
+ struct devres_node *tmp;
+ unsigned long flags;
+
+ if (!fn)
+ return;
+
+ spin_lock_irqsave(&dev->devres_lock, flags);
+ list_for_each_entry_safe_reverse(node, tmp,
+ &dev->devres_head, entry) {
+ struct devres *dr = container_of(node, struct devres, node);
+
+ if (node->release != release)
+ continue;
+ if (match && !match(dev, dr->data, match_data))
+ continue;
+ spin_unlock_irqrestore(&dev->devres_lock, flags);
+ fn(dev, dr->data);
+ spin_lock_irqsave(&dev->devres_lock, flags);
+ }
+ spin_unlock_irqrestore(&dev->devres_lock, flags);
+}
+EXPORT_SYMBOL_GPL(devres_for_each_res);
+
+/**
* devres_free - Free device resource data
* @res: Pointer to devres data to free
*
diff --git a/include/linux/device.h b/include/linux/device.h
index 52a5f15..34dc1f8 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -536,6 +536,9 @@ extern void *__devres_alloc(dr_release_t release, size_t size, gfp_t gfp,
#else
extern void *devres_alloc(dr_release_t release, size_t size, gfp_t gfp);
#endif
+extern void devres_for_each_res(struct device *dev, dr_release_t release,
+ dr_match_t match, void *match_data,
+ void (*fn)(struct device *, void *));
extern void devres_free(void *res);
extern void devres_add(struct device *dev, void *res);
extern void *devres_find(struct device *dev, dr_release_t release,
--
1.7.9.5
next prev parent reply other threads:[~2012-07-24 17:01 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-24 17:00 [RFC PATCH 00/13] firmware loader: introduce cache/uncache firmware Ming Lei
2012-07-24 17:00 ` [RFC PATCH 01/13] driver core: firmware loader: simplify pages ownership transfer Ming Lei
2012-07-24 18:10 ` Borislav Petkov
2012-07-25 2:49 ` Ming Lei
2012-07-24 17:00 ` [RFC PATCH 02/13] driver core: firmware loader: fix races during loading firmware Ming Lei
2012-07-24 17:00 ` [RFC PATCH 03/13] driver core: firmware loader: remove unnecessary wmb() Ming Lei
2012-07-24 17:00 ` [RFC PATCH 04/13] driver core: firmware loader: fix creation failure of fw loader device Ming Lei
2012-07-24 17:00 ` [RFC PATCH 05/13] driver core: firmware loader: introduce firmware_buf Ming Lei
2012-07-25 13:59 ` Borislav Petkov
2012-07-26 2:51 ` Ming Lei
2012-07-26 10:08 ` Borislav Petkov
2012-07-24 17:00 ` [RFC PATCH 06/13] driver core: firmware loader: always let firmware_buf own the pages buffer Ming Lei
2012-07-25 7:55 ` Stephen Boyd
2012-07-25 14:37 ` Borislav Petkov
2012-08-03 8:34 ` Ming Lei
2012-07-25 16:02 ` Borislav Petkov
2012-07-25 16:13 ` Borislav Petkov
2012-07-24 17:00 ` [RFC PATCH 07/13] driver core: firmware loader: introduce cache_firmware and uncache_firmware Ming Lei
2012-07-25 7:54 ` Stephen Boyd
2012-07-26 2:34 ` Ming Lei
2012-07-25 15:52 ` Borislav Petkov
2012-07-26 2:40 ` Ming Lei
2012-07-24 17:00 ` [RFC PATCH 08/13] driver core: firmware loader: fix device lifetime Ming Lei
2012-07-25 16:04 ` Borislav Petkov
2012-07-26 2:59 ` Ming Lei
2012-07-26 12:20 ` Borislav Petkov
2012-07-26 15:44 ` Ming Lei
2012-07-26 17:46 ` Borislav Petkov
2012-07-27 1:30 ` Ming Lei
2012-07-27 10:32 ` Borislav Petkov
2012-07-28 14:04 ` Ming Lei
2012-07-24 17:00 ` [RFC PATCH 09/13] driver core: firmware loader: store firmware name into devres list Ming Lei
2012-07-25 16:15 ` Borislav Petkov
2012-07-26 15:15 ` Ming Lei
2012-07-24 17:00 ` Ming Lei [this message]
2012-07-25 16:25 ` [RFC PATCH 10/13] driver core: devres: introduce devres_for_each_res Borislav Petkov
2012-07-26 16:51 ` Ming Lei
2012-07-24 17:00 ` [RFC PATCH 11/13] driver core: firmware: introduce devices_cache/uncache_firmwares Ming Lei
2012-07-25 16:52 ` Borislav Petkov
2012-07-26 15:36 ` Ming Lei
2012-07-24 17:00 ` [RFC PATCH 12/13] driver core: firmware loader: use small timeout for cache device firmware Ming Lei
2012-07-26 12:36 ` Borislav Petkov
2012-07-26 15:48 ` Ming Lei
2012-07-26 17:54 ` Borislav Petkov
2012-07-27 1:54 ` Ming Lei
2012-07-27 10:35 ` Borislav Petkov
2012-07-28 13:58 ` Ming Lei
2012-07-24 17:00 ` [RFC PATCH 13/13] driver core: firmware loader: cache devices firmware during suspend/resume cycle Ming Lei
2012-07-26 12:43 ` Borislav Petkov
2012-07-26 15:49 ` Ming Lei
2012-07-24 17:08 ` [RFC PATCH 00/13] firmware loader: introduce cache/uncache firmware Ming Lei
2012-07-24 17:16 ` Linus Torvalds
2012-07-24 17:47 ` Ming Lei
2012-07-24 17:53 ` Linus Torvalds
2012-07-24 17:54 ` Linus Torvalds
2012-07-25 12:35 ` Ming Lei
2012-07-25 12:43 ` Oliver Neukum
2012-07-25 12:50 ` Ming Lei
2012-07-25 12:59 ` Ming Lei
2012-07-25 17:23 ` Linus Torvalds
2012-07-25 19:02 ` Rafael J. Wysocki
2012-07-26 2:29 ` Ming Lei
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=1343149213-10160-11-git-send-email-ming.lei@canonical.com \
--to=ming.lei@canonical.com \
--cc=borislav.petkov@amd.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rjw@sisk.pl \
--cc=torvalds@linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).