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

Jia Hongtao-B38951 B38951 at freescale.com
Fri Jul 6 16:07:43 EST 2012


> -----Original Message-----
> From: Greg KH [mailto:greg at kroah.com]
> Sent: Friday, July 06, 2012 12:26 PM
> To: Jia Hongtao-B38951
> Cc: Rob Herring; devicetree-discuss at lists.ozlabs.org; linux-
> kernel at 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:
> > 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.
> 
> > > On 06/08/2012 04:43 AM, Jia Hongtao wrote:
> > > > We changed the pcie controller driver to platform driver so that
> the
> > > PCI
> > > > of platform devices need to be created earlier in the arch_initcall
> > > stage
> > > > according to the original timing of calling fsl_add_bridge(). So we
> do
> > > PCI
> > > > probing separately from other devices. But probing more than once
> could
> > > > cause duplication warning. We add check if the devices have already
> > > probed
> > > > 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?
> 
> > > > Signed-off-by: Jia Hongtao <B38951 at freescale.com>
> > > > Signed-off-by: Li Yang <leoli at freescale.com>
> > > > ---
> > >
> > > Where's v1 and v2 history?
> > >
> > > >  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,
> > > >  	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.

Two ways to solve this problem:
1. All the nodes that need to be probed should just under root.
2. Avoid duplication probe at runtime like this patch did.

I do like the first one but it's hard to changing the traditional way that
exist for a long time.

Also, I think this patch as a workaround is not a perfect way to solve this
problem. So I wonder if you or others have any better solutions.

Thanks.
-Jia Hongtao. 




More information about the devicetree-discuss mailing list