Hello, On Sun, Aug 09, 2015 at 05:17:39AM -0700, Guenter Roeck wrote: > Qemu tests with unicore32 show memory management code entering an endless > loop in pcpu_alloc(). Bisect points to commit a93ace487a33 ("percpu: move > region iterations out of pcpu_[de]populate_chunk()"). Code analysis > identifies the following relevant changes. > > - rs = page_start; > - pcpu_next_pop(chunk, &rs, &re, page_end); > - > - if (rs != page_start || re != page_end) { > + pcpu_for_each_unpop_region(chunk, rs, re, page_start, page_end) { > > For unicore32, values were page_start==0, page_end==1, rs==0, re==1. > This worked fine with the old code. With the new code, however, the loop > is always entered. Debugging information added into the loop shows > an endless repetition of > > in loop chunk c5c53100 populated 0xff rs 1 re 2 page start 0 page end 1 > in loop chunk c5c53100 populated 0xff rs 1 re 2 page start 0 page end 1 > in loop chunk c5c53100 populated 0xff rs 1 re 2 page start 0 page end 1 > in loop chunk c5c53100 populated 0xff rs 1 re 2 page start 0 page end 1 That's a bug in the find bit functions in unicore32. If @offset >= @end, it should return @end, not @offset. Thanks. -- tejun -- 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/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>