I am hitting a memory management bug and I would love some hints as to
how to track down the bug and fix it.
The bug hit is line 423 of page_alloc.c which is:
BUG_ON(page_count(buddy) != 0);
The function it is part of is:
static inline int page_is_buddy(struct page *page, struct page *buddy,
int order)
{
if (!pfn_valid_within(page_to_pfn(buddy)))
return 0;
if (page_zone_id(page) != page_zone_id(buddy))
return 0;
if (PageBuddy(buddy) && page_order(buddy) == order) {
BUG_ON(page_count(buddy) != 0);
return 1;
}
return 0;
}
I am seeing this both with 2.6.29.1 and 2.6.30 so far. I unfortunately
haven't poked much at the memory management code, so I am not even sure
what this is supposed to be doing. The cpu us a coldfire 5271.
I also see crashes causing the kernel to dump lots of hex values.
Building the kernel with debug enabled unfortunately seems to move things
around enough to make it just lock up instead without any output.