lkml.org 
[lkml]   [2009]   [Apr]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: device_for_each_child() before device_add() doesn't work
On Tue, Apr 14, 2009 at 07:16:31PM +0100, David Vrabel wrote:
> Greg KH wrote:
> > On Tue, Apr 14, 2009 at 05:54:40PM +0100, David Vrabel wrote:
> >> Calling device_for_each_child() on a device that has yet to be added
> >> (with device_add()) used to work. UWB subsystem currently tries to do this.
> >>
> >> Since "driver core: move klist_children into private structure"[1] this
> >> no longer works (an oops occurs in device_for_each_chid()). Is it
> >> something that ought to work? Or should the UWB subsystem be changed to
> >> not do this?
> >
> > Why would you call device_for_each_child() if you have never added it to
> > the bus? How would you expect that to work, as there will never be any
> > children for it?
>
> The children of a UWB radio controller (RC) are it's neighbors. When
> assigning a random DevAddr to an RC we need to check that the address is
> unique within the beacon group. We use device_for_each_child() here
> to check that the generated DevAddr is not used by any of its neighbors.

So the problem is for the first device being added, right? Can't you
just have a flag for this?

> This address must be assigned during initialization and during normal
> operation and in the past we didn't need to special case the address
> assignment during initialization.

Does the patch below fix the problem for you?

thanks,

greg k-h

---------------

drivers/base/core.c | 3 +++
1 file changed, 3 insertions(+)

--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -1142,6 +1142,9 @@ int device_for_each_child(struct device
struct device *child;
int error = 0;

+ if (!parent->p)
+ return 0;
+
klist_iter_init(&parent->p->klist_children, &i);
while ((child = next_device(&i)) && !error)
error = fn(child, data);

\
 
 \ /
  Last update: 2009-04-15 07:21    [W:0.074 / U:1.064 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site