All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tomeu Vizoso <tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>,
	Javier Martinez Canillas
	<javier-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org>,
	Greg Kroah-Hartman
	<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
	Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Thierry Reding
	<thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Alan Stern
	<stern-nwvwT67g6+6dFdvTe/nMLpVzexx5G7lz@public.gmane.org>,
	"Rafael J. Wysocki" <rjw-LthD3rsA81gm4RdzfppkhA@public.gmane.org>,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	Dmitry Torokhov
	<dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Russell King <rmk+kernel-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org>,
	Linus Walleij
	<linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	Ulf Hansson <ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
	Tomeu Vizoso
	<tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
Subject: [PATCH v7 03/20] of/platform: Point to struct device from device node
Date: Tue, 29 Sep 2015 11:10:41 +0200	[thread overview]
Message-ID: <1443517859-30376-4-git-send-email-tomeu.vizoso@collabora.com> (raw)
In-Reply-To: <1443517859-30376-1-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>

When adding platform and AMBA devices, set the device node's device
member to point to it.

This speeds lookups considerably and is safe because we only create one
of these devices for any given device node.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
---

Changes in v5:
- Set the pointer to struct device also for AMBA devices
- Unset the pointer to struct device when the platform device is about
  to be unregistered
- Increase the reference count of the device before returning from
  of_find_device_by_node()

 drivers/of/platform.c | 19 ++++++++++---------
 include/linux/of.h    |  1 +
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index 1001efaedcb8..408d89f1d124 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -32,11 +32,6 @@ const struct of_device_id of_default_bus_match_table[] = {
 	{} /* Empty terminated list */
 };
 
-static int of_dev_node_match(struct device *dev, void *data)
-{
-	return dev->of_node == data;
-}
-
 /**
  * of_find_device_by_node - Find the platform_device associated with a node
  * @np: Pointer to device tree node
@@ -45,10 +40,10 @@ static int of_dev_node_match(struct device *dev, void *data)
  */
 struct platform_device *of_find_device_by_node(struct device_node *np)
 {
-	struct device *dev;
-
-	dev = bus_find_device(&platform_bus_type, NULL, np, of_dev_node_match);
-	return dev ? to_platform_device(dev) : NULL;
+	if (np->device && np->device->bus == &platform_bus_type &&
+	    get_device(np->device))
+		return to_platform_device(np->device);
+	return NULL;
 }
 EXPORT_SYMBOL(of_find_device_by_node);
 
@@ -192,6 +187,8 @@ static struct platform_device *of_platform_device_create_pdata(
 		goto err_clear_flag;
 	}
 
+	np->device = &dev->dev;
+
 	return dev;
 
 err_clear_flag:
@@ -272,6 +269,8 @@ static struct amba_device *of_amba_device_create(struct device_node *node,
 		goto err_free;
 	}
 
+	node->device = &dev->dev;
+
 	return dev;
 
 err_free:
@@ -476,6 +475,8 @@ static int of_platform_device_destroy(struct device *dev, void *data)
 	if (of_node_check_flag(dev->of_node, OF_POPULATED_BUS))
 		device_for_each_child(dev, NULL, of_platform_device_destroy);
 
+	dev->of_node->device = NULL;
+
 	if (dev->bus == &platform_bus_type)
 		platform_device_unregister(to_platform_device(dev));
 #ifdef CONFIG_ARM_AMBA
diff --git a/include/linux/of.h b/include/linux/of.h
index 2194b8ca41f9..eb091be0f8ee 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -52,6 +52,7 @@ struct device_node {
 	phandle phandle;
 	const char *full_name;
 	struct fwnode_handle fwnode;
+	struct device *device;
 
 	struct	property *properties;
 	struct	property *deadprops;	/* removed properties */
-- 
2.4.3

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: Tomeu Vizoso <tomeu.vizoso@collabora.com>
To: linux-kernel@vger.kernel.org
Cc: Rob Herring <robh+dt@kernel.org>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Javier Martinez Canillas <javier@osg.samsung.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Mark Brown <broonie@kernel.org>,
	Thierry Reding <thierry.reding@gmail.com>,
	Alan Stern <stern@rowland.harvard.edu>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	linux-arm-kernel@lists.infradead.org,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	devicetree@vger.kernel.org,
	Russell King <rmk+kernel@arm.linux.org.uk>,
	Linus Walleij <linus.walleij@linaro.org>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	linux-acpi@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>,
	Tomeu Vizoso <tomeu.vizoso@collabora.com>
Subject: [PATCH v7 03/20] of/platform: Point to struct device from device node
Date: Tue, 29 Sep 2015 11:10:41 +0200	[thread overview]
Message-ID: <1443517859-30376-4-git-send-email-tomeu.vizoso@collabora.com> (raw)
In-Reply-To: <1443517859-30376-1-git-send-email-tomeu.vizoso@collabora.com>

When adding platform and AMBA devices, set the device node's device
member to point to it.

This speeds lookups considerably and is safe because we only create one
of these devices for any given device node.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
---

Changes in v5:
- Set the pointer to struct device also for AMBA devices
- Unset the pointer to struct device when the platform device is about
  to be unregistered
- Increase the reference count of the device before returning from
  of_find_device_by_node()

 drivers/of/platform.c | 19 ++++++++++---------
 include/linux/of.h    |  1 +
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index 1001efaedcb8..408d89f1d124 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -32,11 +32,6 @@ const struct of_device_id of_default_bus_match_table[] = {
 	{} /* Empty terminated list */
 };
 
-static int of_dev_node_match(struct device *dev, void *data)
-{
-	return dev->of_node == data;
-}
-
 /**
  * of_find_device_by_node - Find the platform_device associated with a node
  * @np: Pointer to device tree node
@@ -45,10 +40,10 @@ static int of_dev_node_match(struct device *dev, void *data)
  */
 struct platform_device *of_find_device_by_node(struct device_node *np)
 {
-	struct device *dev;
-
-	dev = bus_find_device(&platform_bus_type, NULL, np, of_dev_node_match);
-	return dev ? to_platform_device(dev) : NULL;
+	if (np->device && np->device->bus == &platform_bus_type &&
+	    get_device(np->device))
+		return to_platform_device(np->device);
+	return NULL;
 }
 EXPORT_SYMBOL(of_find_device_by_node);
 
@@ -192,6 +187,8 @@ static struct platform_device *of_platform_device_create_pdata(
 		goto err_clear_flag;
 	}
 
+	np->device = &dev->dev;
+
 	return dev;
 
 err_clear_flag:
@@ -272,6 +269,8 @@ static struct amba_device *of_amba_device_create(struct device_node *node,
 		goto err_free;
 	}
 
+	node->device = &dev->dev;
+
 	return dev;
 
 err_free:
@@ -476,6 +475,8 @@ static int of_platform_device_destroy(struct device *dev, void *data)
 	if (of_node_check_flag(dev->of_node, OF_POPULATED_BUS))
 		device_for_each_child(dev, NULL, of_platform_device_destroy);
 
+	dev->of_node->device = NULL;
+
 	if (dev->bus == &platform_bus_type)
 		platform_device_unregister(to_platform_device(dev));
 #ifdef CONFIG_ARM_AMBA
diff --git a/include/linux/of.h b/include/linux/of.h
index 2194b8ca41f9..eb091be0f8ee 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -52,6 +52,7 @@ struct device_node {
 	phandle phandle;
 	const char *full_name;
 	struct fwnode_handle fwnode;
+	struct device *device;
 
 	struct	property *properties;
 	struct	property *deadprops;	/* removed properties */
-- 
2.4.3


WARNING: multiple messages have this Message-ID (diff)
From: tomeu.vizoso@collabora.com (Tomeu Vizoso)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v7 03/20] of/platform: Point to struct device from device node
Date: Tue, 29 Sep 2015 11:10:41 +0200	[thread overview]
Message-ID: <1443517859-30376-4-git-send-email-tomeu.vizoso@collabora.com> (raw)
In-Reply-To: <1443517859-30376-1-git-send-email-tomeu.vizoso@collabora.com>

When adding platform and AMBA devices, set the device node's device
member to point to it.

This speeds lookups considerably and is safe because we only create one
of these devices for any given device node.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
---

Changes in v5:
- Set the pointer to struct device also for AMBA devices
- Unset the pointer to struct device when the platform device is about
  to be unregistered
- Increase the reference count of the device before returning from
  of_find_device_by_node()

 drivers/of/platform.c | 19 ++++++++++---------
 include/linux/of.h    |  1 +
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index 1001efaedcb8..408d89f1d124 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -32,11 +32,6 @@ const struct of_device_id of_default_bus_match_table[] = {
 	{} /* Empty terminated list */
 };
 
-static int of_dev_node_match(struct device *dev, void *data)
-{
-	return dev->of_node == data;
-}
-
 /**
  * of_find_device_by_node - Find the platform_device associated with a node
  * @np: Pointer to device tree node
@@ -45,10 +40,10 @@ static int of_dev_node_match(struct device *dev, void *data)
  */
 struct platform_device *of_find_device_by_node(struct device_node *np)
 {
-	struct device *dev;
-
-	dev = bus_find_device(&platform_bus_type, NULL, np, of_dev_node_match);
-	return dev ? to_platform_device(dev) : NULL;
+	if (np->device && np->device->bus == &platform_bus_type &&
+	    get_device(np->device))
+		return to_platform_device(np->device);
+	return NULL;
 }
 EXPORT_SYMBOL(of_find_device_by_node);
 
@@ -192,6 +187,8 @@ static struct platform_device *of_platform_device_create_pdata(
 		goto err_clear_flag;
 	}
 
+	np->device = &dev->dev;
+
 	return dev;
 
 err_clear_flag:
@@ -272,6 +269,8 @@ static struct amba_device *of_amba_device_create(struct device_node *node,
 		goto err_free;
 	}
 
+	node->device = &dev->dev;
+
 	return dev;
 
 err_free:
@@ -476,6 +475,8 @@ static int of_platform_device_destroy(struct device *dev, void *data)
 	if (of_node_check_flag(dev->of_node, OF_POPULATED_BUS))
 		device_for_each_child(dev, NULL, of_platform_device_destroy);
 
+	dev->of_node->device = NULL;
+
 	if (dev->bus == &platform_bus_type)
 		platform_device_unregister(to_platform_device(dev));
 #ifdef CONFIG_ARM_AMBA
diff --git a/include/linux/of.h b/include/linux/of.h
index 2194b8ca41f9..eb091be0f8ee 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -52,6 +52,7 @@ struct device_node {
 	phandle phandle;
 	const char *full_name;
 	struct fwnode_handle fwnode;
+	struct device *device;
 
 	struct	property *properties;
 	struct	property *deadprops;	/* removed properties */
-- 
2.4.3

  parent reply	other threads:[~2015-09-29  9:10 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-29  9:10 [PATCH v7 0/20] On-demand device probing Tomeu Vizoso
2015-09-29  9:10 ` Tomeu Vizoso
2015-09-29  9:10 ` Tomeu Vizoso
2015-09-29  9:10 ` [PATCH v7 01/20] driver core: handle -EPROBE_DEFER from bus_type.match() Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-10-17  6:51   ` Greg Kroah-Hartman
2015-10-17  6:51     ` Greg Kroah-Hartman
2015-09-29  9:10 ` [PATCH v7 02/20] ARM: amba: Move reading of periphid to amba_match() Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-09-29  9:10 ` [PATCH v7 04/20] of: add function to allow probing a device from a OF node Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-10-17  6:53   ` Greg Kroah-Hartman
2015-10-17  6:53     ` Greg Kroah-Hartman
2015-09-29  9:10 ` [PATCH v7 05/20] gpio: Probe GPIO drivers on demand Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-09-29  9:10 ` [PATCH v7 06/20] pinctrl: Probe pinctrl devices " Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-09-29  9:10 ` [PATCH v7 07/20] regulator: core: Probe regulators " Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-09-29  9:10 ` [PATCH v7 09/20] drm/tegra: Probe dpaux devices " Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-09-29  9:10 ` [PATCH v7 10/20] i2c: core: Probe i2c adapters and " Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
     [not found] ` <1443517859-30376-1-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
2015-09-29  9:10   ` Tomeu Vizoso [this message]
2015-09-29  9:10     ` [PATCH v7 03/20] of/platform: Point to struct device from device node Tomeu Vizoso
2015-09-29  9:10     ` Tomeu Vizoso
2015-09-29  9:10   ` [PATCH v7 08/20] drm: Probe panels on demand Tomeu Vizoso
2015-09-29  9:10     ` Tomeu Vizoso
2015-09-29  9:10     ` Tomeu Vizoso
2015-09-29  9:10   ` [PATCH v7 11/20] pwm: Probe PWM chip devices " Tomeu Vizoso
2015-09-29  9:10     ` Tomeu Vizoso
2015-09-29  9:10     ` Tomeu Vizoso
2015-09-29  9:10   ` [PATCH v7 17/20] dma: of: Probe DMA controllers " Tomeu Vizoso
2015-09-29  9:10     ` Tomeu Vizoso
2015-09-29  9:10     ` Tomeu Vizoso
2015-09-29  9:10 ` [PATCH v7 12/20] backlight: Probe backlight devices " Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-09-29  9:10 ` [PATCH v7 13/20] usb: phy: Probe phy " Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-10-17  6:55   ` Greg Kroah-Hartman
2015-10-17  6:55     ` Greg Kroah-Hartman
2015-09-29  9:10 ` [PATCH v7 14/20] clk: Probe clk providers " Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-09-29  9:10 ` [PATCH v7 15/20] pinctrl: Probe pinctrl devices " Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-09-29  9:10 ` [PATCH v7 16/20] phy: core: Probe phy providers " Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-09-29  9:10 ` [PATCH v7 18/20] power-supply: Probe power supplies " Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-09-29  9:10 ` [PATCH v7 19/20] driver core: Allow deferring probes until late init Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
     [not found]   ` <1443517859-30376-20-git-send-email-tomeu.vizoso-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org>
2015-10-14 23:12     ` Frank Rowand
2015-10-14 23:12       ` Frank Rowand
2015-10-14 23:12       ` Frank Rowand
2015-09-29  9:10 ` [PATCH v7 20/20] of/platform: Defer probes of registered devices Tomeu Vizoso
2015-09-29  9:10   ` Tomeu Vizoso
2015-10-14 23:12   ` Frank Rowand
2015-10-14 23:12     ` Frank Rowand

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=1443517859-30376-4-git-send-email-tomeu.vizoso@collabora.com \
    --to=tomeu.vizoso-zgy8ohtn/8qb+jhodadfcq@public.gmane.org \
    --cc=arnd-r2nGTMty4D4@public.gmane.org \
    --cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
    --cc=javier-JPH+aEBZ4P+UEJcrhfAQsw@public.gmane.org \
    --cc=linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=rjw-LthD3rsA81gm4RdzfppkhA@public.gmane.org \
    --cc=rmk+kernel-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org \
    --cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=stern-nwvwT67g6+6dFdvTe/nMLpVzexx5G7lz@public.gmane.org \
    --cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \
    --cc=thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.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.