Thread (22 messages) 22 messages, 5 authors, 2004-08-24

Re: [Lhms-devel] [RFC] free_area[] bitmap elimination [0/3]

From: Dave Hansen <hidden>
Date: 2004-08-24 02:49:23

On Mon, 2004-08-23 at 17:00, Hiroyuki KAMEZAWA wrote:
In this patch, "whether a page is free and in buddy allocator ?" is confirmed by
page_count(page) == 0 and  page_order(page) == valid_order.
A valid_order is a value between (unsigned long)~0 - (unsigned long)~(MAX_ORDER)

But there may be pages which have vague page->private and conflict with my
buddy page checking.
I'd like to read free_pages_check() more and take page->flags into account.
I'm not saying that there *is* a bug with your code, just that
page->private has no *guarantees* about its contents, and there *can* be
a bug under certain conditions.  You rely on it not having particular
values but, since there are no checks and no zeroing, you really can't
assume anything.  Try setting page->private to random values just before
the free pages check, and I bet you'll eventually get some oopses.  

So, either don't rely on page->private for page_order(), or zero out
page->private before you zero the count.  Also, since you might
effectively be using one of these fields as a pseudo lock, make sure to
take memory ordering into account.  Unless it's an atomic function with
a test, things can get reordered quite easily.  

-- Dave

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"aart@kvack.org"> aart@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help