On Sun, 2 Oct 2011 21:57:07 +0800 Wei Yang <weiyang.kernel@xxxxxxxxx> wrote: > Dear experts, > > I am viewing the source code of __release_region() in kernel/resource.c. > And I have one comment for the performance issue. > > For example, we have a resource tree like this. > 10-89 > 20-79 > 30-49 > 55-59 > 60-64 > 65-69 > 80-89 > 100-279 > > If the caller wants to release a region of [50,59], the original code will > execute four times in the for loop in the subtree of 20-79. > > After changing the code below, it will execute two times instead. > > By using the "git annotate", I see this code is committed by Linus as the > initial version. So don't get more information about why this code is > written > in this way. > > Maybe the case I thought will not happen in the real world? > > Your comment is warmly welcome. :) > > diff --git a/kernel/resource.c b/kernel/resource.c > index 8461aea..81525b4 100644 > --- a/kernel/resource.c > +++ b/kernel/resource.c > @@ -931,7 +931,7 @@ void __release_region(struct resource *parent, > resource_size_t start, > for (;;) { > struct resource *res = *p; > > - if (!res) > + if (!res || res->start > start) Hmm ? res->start > end ? Thanks, -Kame -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>