On Tue, Jun 03, 2014 at 09:06:53AM -0400, Vivek Goyal wrote: > @@ -322,7 +327,71 @@ int release_resource(struct resource *old) > > EXPORT_SYMBOL(release_resource); > > -#if !defined(CONFIG_ARCH_HAS_WALK_MEMORY) > +/* > + * Finds the lowest iomem reosurce exists with-in [res->start.res->end) > + * the caller must specify res->start, res->end, res->flags and "name". > + * If found, returns 0, res is overwritten, if not found, returns -1. > + * This walks through whole tree and not just first level children. > + */ > +static int find_next_iomem_res(struct resource *res, char *name) > +{ > + resource_size_t start, end; > + struct resource *p; > + > + BUG_ON(!res); > + > + start = res->start; > + end = res->end; > + BUG_ON(start >= end); > + > + read_lock(&resource_lock); > + p = &iomem_resource; > + while ((p = next_resource(p))) { Just a thought - this function differs from find_next_system_ram() only in the traversal mode through resources. I wonder if next_resource() could be given a flag, say TRAVERSE_SIBLINGS_ONLY or so and be called from both, once with the flag set and once without and thus save us the code duplication. > + if (p->flags != res->flags) > + continue; > + if (name && strcmp(p->name, name)) > + continue; > + if (p->start > end) { > + p = NULL; > + break; > + } > + if ((p->end >= start) && (p->start < end)) > + break; > + } > + > + read_unlock(&resource_lock); > + if (!p) > + return -1; > + /* copy data */ > + if (res->start < p->start) > + res->start = p->start; > + if (res->end > p->end) > + res->end = p->end; > + return 0; > +} -- Regards/Gruss, Boris. Sent from a fat crate under my desk. Formatting is fine. --