From: Greg KH <greg@kroah.com>
To: linux-kernel@vger.kernel.org
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>,
Greg Kroah-Hartman <gregkh@suse.de>
Subject: [PATCH 30/36] driver core: Introduce device_find_child().
Date: Fri, 1 Dec 2006 15:22:00 -0800 [thread overview]
Message-ID: <11650154251022-git-send-email-greg@kroah.com> (raw)
In-Reply-To: <11650154221716-git-send-email-greg@kroah.com>
From: Cornelia Huck <cornelia.huck@de.ibm.com>
Introduce device_find_child() to match device_for_each_child().
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/base/core.c | 33 +++++++++++++++++++++++++++++++++
include/linux/device.h | 2 ++
2 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 5d11bbd..a29e685 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -750,12 +750,45 @@ int device_for_each_child(struct device
return error;
}
+/**
+ * device_find_child - device iterator for locating a particular device.
+ * @parent: parent struct device
+ * @data: Data to pass to match function
+ * @match: Callback function to check device
+ *
+ * This is similar to the device_for_each_child() function above, but it
+ * returns a reference to a device that is 'found' for later use, as
+ * determined by the @match callback.
+ *
+ * The callback should return 0 if the device doesn't match and non-zero
+ * if it does. If the callback returns non-zero and a reference to the
+ * current device can be obtained, this function will return to the caller
+ * and not iterate over any more devices.
+ */
+struct device * device_find_child(struct device *parent, void *data,
+ int (*match)(struct device *, void *))
+{
+ struct klist_iter i;
+ struct device *child;
+
+ if (!parent)
+ return NULL;
+
+ klist_iter_init(&parent->klist_children, &i);
+ while ((child = next_device(&i)))
+ if (match(child, data) && get_device(child))
+ break;
+ klist_iter_exit(&i);
+ return child;
+}
+
int __init devices_init(void)
{
return subsystem_register(&devices_subsys);
}
EXPORT_SYMBOL_GPL(device_for_each_child);
+EXPORT_SYMBOL_GPL(device_find_child);
EXPORT_SYMBOL_GPL(device_initialize);
EXPORT_SYMBOL_GPL(device_add);
diff --git a/include/linux/device.h b/include/linux/device.h
index 2d9dc35..0a0370c 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -421,6 +421,8 @@ extern int __must_check device_add(struc
extern void device_del(struct device * dev);
extern int device_for_each_child(struct device *, void *,
int (*fn)(struct device *, void *));
+extern struct device *device_find_child(struct device *, void *data,
+ int (*match)(struct device *, void *));
extern int device_rename(struct device *dev, char *new_name);
/*
--
1.4.4.1
next prev parent reply other threads:[~2006-12-01 23:24 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-01 23:16 [GIT PATCH] Driver core patches for 2.6.19 Greg KH
2006-12-01 23:21 ` [PATCH 1/36] Driver core: add notification of bus events Greg KH
2006-12-01 23:21 ` [PATCH 2/36] Driver core: fix "driver" symlink timing Greg KH
2006-12-01 23:21 ` [PATCH 3/36] Driver Core: Move virtual_device_parent() to core.c Greg KH
2006-12-01 23:21 ` [PATCH 4/36] CONFIG_SYSFS_DEPRECATED Greg KH
2006-12-01 23:21 ` [PATCH 5/36] Driver core: make old versions of udev work properly Greg KH
2006-12-01 23:21 ` [PATCH 6/36] CONFIG_SYSFS_DEPRECATED - bus symlinks Greg KH
2006-12-01 23:21 ` [PATCH 7/36] CONFIG_SYSFS_DEPRECATED - device symlinks Greg KH
2006-12-01 23:21 ` [PATCH 8/36] CONFIG_SYSFS_DEPRECATED - PHYSDEV* uevent variables Greg KH
2006-12-01 23:21 ` [PATCH 9/36] CONFIG_SYSFS_DEPRECATED - class symlinks Greg KH
2006-12-01 23:21 ` [PATCH 10/36] Driver core: convert vt code to use struct device Greg KH
2006-12-01 23:21 ` [PATCH 11/36] Driver core: convert vc " Greg KH
2006-12-01 23:21 ` [PATCH 12/36] Driver core: change misc class_devices to be real devices Greg KH
2006-12-01 23:21 ` [PATCH 13/36] Driver core: convert tty core to use struct device Greg KH
2006-12-01 23:21 ` [PATCH 14/36] Driver core: convert raw device code " Greg KH
2006-12-01 23:21 ` [PATCH 15/36] I2C: convert i2c-dev to use struct device instead of struct class_device Greg KH
2006-12-01 23:21 ` [PATCH 16/36] Driver core: convert msr code to use struct device Greg KH
2006-12-01 23:21 ` [PATCH 17/36] Driver core: convert cpuid " Greg KH
2006-12-01 23:21 ` [PATCH 18/36] Driver core: convert PPP " Greg KH
2006-12-01 23:21 ` [PATCH 19/36] Driver core: convert ppdev " Greg KH
2006-12-01 23:21 ` [PATCH 20/36] Driver core: convert mmc " Greg KH
2006-12-01 23:21 ` [PATCH 21/36] Driver core: convert firmware " Greg KH
2006-12-01 23:21 ` [PATCH 22/36] Driver core: convert fb " Greg KH
2006-12-01 23:21 ` [PATCH 23/36] Driver core: change mem class_devices to be real devices Greg KH
2006-12-01 23:21 ` [PATCH 24/36] Driver core: convert sound core to use struct device Greg KH
2006-12-01 23:21 ` [PATCH 25/36] Driver core: add dev_archdata to " Greg KH
2006-12-01 23:21 ` [PATCH 26/36] ACPI: Change ACPI to use dev_archdata instead of firmware_data Greg KH
2006-12-01 23:21 ` [PATCH 27/36] Driver core: Call platform_notify_remove later Greg KH
2006-12-01 23:21 ` [PATCH 28/36] cpu topology: consider sysfs_create_group return value Greg KH
2006-12-01 23:21 ` [PATCH 29/36] sysfs: sysfs_write_file() writes zero terminated data Greg KH
2006-12-01 23:22 ` Greg KH [this message]
2006-12-01 23:22 ` [PATCH 31/36] Driver core: make drivers/base/core.c:setup_parent() static Greg KH
2006-12-01 23:22 ` [PATCH 32/36] driver core: Introduce device_move(): move a device to a new parent Greg KH
2006-12-01 23:22 ` [PATCH 33/36] driver core: Use klist_remove() in device_move() Greg KH
2006-12-01 23:22 ` [PATCH 34/36] Driver core: platform_driver_probe(), can save codespace Greg KH
2006-12-01 23:22 ` [PATCH 35/36] Documentation/driver-model/platform.txt update/rewrite Greg KH
2006-12-01 23:22 ` [PATCH 36/36] Driver core: show drivers in /sys/module/ Greg KH
2006-12-03 16:26 ` [PATCH 32/36] driver core: Introduce device_move(): move a device to a new parent Marcel Holtmann
2006-12-04 19:58 ` Greg KH
2006-12-04 21:15 ` Marcel Holtmann
2006-12-04 23:05 ` Greg KH
2006-12-05 15:26 ` Marcel Holtmann
2006-12-06 5:58 ` Greg KH
2006-12-06 8:29 ` Marcel Holtmann
2006-12-06 9:03 ` Martin Schwidefsky
2007-01-08 13:21 ` Cornelia Huck
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=11650154251022-git-send-email-greg@kroah.com \
--to=greg@kroah.com \
--cc=cornelia.huck@de.ibm.com \
--cc=gregkh@suse.de \
--cc=linux-kernel@vger.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.