On 08/10/2015 09:36 AM, Tejun Heo wrote:
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.
Yes, your are right, the find next functions in unicore32 are wrong.
Sorry for the noise - I should have checked more closely. Copying the maintainer.
Thanks,
Guenter
--
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>