Thread (13 messages) flat view 13 messages, 6 authors, 2012-07-12

Re: [PATCH V3 5/6] Avoid duplicate probe for of platform devices

From: Greg KH <hidden>
Date: 2012-07-06 16:17:21
Also in: lkml

On Fri, Jul 06, 2012 at 06:07:43AM +0000, Jia Hongtao-B38951 wrote:
quoted
-----Original Message-----
From: Greg KH [mailto:greg@kroah.com]
Sent: Friday, July 06, 2012 12:26 PM
To: Jia Hongtao-B38951
Cc: Rob Herring; devicetree-discuss@lists.ozlabs.org; linux-
kernel@vger.kernel.org; Li Yang-R58472
Subject: Re: [PATCH V3 5/6] Avoid duplicate probe for of platform devices

On Fri, Jul 06, 2012 at 02:05:05AM +0000, Jia Hongtao-B38951 wrote:
quoted
Hi Rob and Greg KH,

Do you have any better idea to avoid duplication probe warning?
I have no idea what the problem is that you are trying to solve.
quoted
quoted
On 06/08/2012 04:43 AM, Jia Hongtao wrote:
quoted
We changed the pcie controller driver to platform driver so that
the
quoted
quoted
PCI
quoted
of platform devices need to be created earlier in the arch_initcall
stage
quoted
according to the original timing of calling fsl_add_bridge(). So we
do
quoted
quoted
PCI
quoted
probing separately from other devices. But probing more than once
could
quoted
quoted
quoted
cause duplication warning. We add check if the devices have already
probed
quoted
before probing any devices to avoid duplication warning.
Ick, something else is going wrong here, how could you ever have the
same device probed more than once?
quoted
quoted
quoted
Signed-off-by: Jia Hongtao <redacted>
Signed-off-by: Li Yang <redacted>
---
Where's v1 and v2 history?
quoted
 drivers/of/platform.c |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index a37330e..3aab01f 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -139,6 +139,18 @@ struct platform_device *of_device_alloc(struct
device_node *np,
quoted
 	if (!dev)
 		return NULL;

+	dev->dev.of_node = of_node_get(np);
+	if (bus_id)
+		dev_set_name(&dev->dev, "%s", bus_id);
+	else
+		of_device_make_bus_id(&dev->dev);
+
+	if (kset_find_obj(dev->dev.kobj.kset, kobject_name(&dev-
dev.kobj)))
Whatever you are trying to do here, odds are, it's wrong :)

What is happening that is causing the problem?  What is causing the
platform core to be calling probe on a device more than once?

greg k-h
This is why in some cases we may probe twice:
Firstly, we need to probe pci controller separately. But in KVM different
topology of device tree is used in which pci nodes are not under root node
but under "simple bus". Unfortunately, of_platform_bus_probe() will probe
all the first level nodes under "simple bus" so pci nodes will probe again.
Sounds like a bug :)
Two ways to solve this problem:
1. All the nodes that need to be probed should just under root.
That seems reasonable.
2. Avoid duplication probe at runtime like this patch did.
No, don't paper over the real problem in the platform core code like
this.  Fix the real issue here instead.
I do like the first one but it's hard to changing the traditional way that
exist for a long time.
I don't understand, why is this just showing up now?  What changed to
cause this?  Couldn't that be the real problem here?

greg k-h
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help