> -----Original Message-----
> From: Wood Scott-B07421
> Sent: Thursday, July 26, 2012 1:26 AM
> To: Jia Hongtao-B38951
> Cc: Wood Scott-B07421; linuxppc-dev@lists.ozlabs.org;
> ga...@kernel.crashing.org; Li Yang-R58472
> Subject: Re: [PATCH 3/6] powerpc/fsl-pci: Determine primary bus by looking
> for ISA node
> 
> >>> +/*
> >>> + * Recursively scan all the children nodes of parent and find out if
> >> there
> >>> + * is "isa" node. Return 1 if parent has isa node otherwise return 0.
> >>> + */
> >>> +int has_isa_node(struct device_node *parent)
> >>> +{
> >>> + static int result;
> >>> + struct device_node *cur_child;
> >>> +
> >>> + cur_child = NULL;
> >>> + result = 0;
> >>> + while (!result && (cur_child = of_get_next_child(parent,
> >> cur_child))) {
> >>> +         /* Get "isa" node and return 1 */
> >>> +         if (of_node_cmp(cur_child->type, "isa") == 0)
> >>> +                 return result = 1;
> >>> +         has_isa_node(cur_child);
> >>> + }
> >>> +
> >>> + return result;
> >>> +}
> >>
> >> Why are you reimplementing this?  It's already in Linus's tree.  See
> >> fsl_pci_init().
> >>
> >> Plus, your version is recursive which is unacceptable in kernel code
> >> with a small stack (outside of a few rare examples where the depth has
> a
> >> small fixed upper bound), and once it finds an ISA node, it returns 1
> >> forever, regardless of what node you pass in in the future.
> >>
> >> -Scott
> >
> > About recursion I will do some more investigation.
> > If it finds ISA it returns 1. But for next PCI node it will return 0 if
> > no ISA is found (note that I set result to 0 at the beginning).
> 
> Sorry, I misread that as an initializer.  Still, it's awkward (why not
> just use a return value?) and non-thread-safe (may not matter here, but
> it's a bad habit), and it's still an unacceptable use of recursion, and
> still a reimplementation of functionality that already exists. :-)
> 
> -Scott

All this recursion thing I will try another way.

But this is not the same as you did. If we use platform driver probe function
will be called more than once. Your function is to find ISA node and check if
the parent equal to this PCI controller. My function is to search ISA under
each PCI controller. If the platform driver mechanism is used I think this
function is necessary and reasonable.

-Hongtao.

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to