Fix off-by-one error in the page allocator
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 4 May 2016 21:39:17 +0000 (17:39 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 4 May 2016 22:00:58 +0000 (18:00 -0400)
commit7f8658379777dd52977695944f630c64ce805429
tree1bedb893144301ad02489483515dd8c55e53f3bb
parentb6ae093be2b643ff635584f04a320fe5e3500887
Fix off-by-one error in the page allocator

Trace through the code with order = 0 to convince yourself.  Basically,
anytime we found a non-free page in our scan, we'd run the next loop on the
page *two* pages forward.  If the page we skipped was already busy, then we
got lucky.

If it wasn't, we fragmented our memory slightly.  That could be a problem
if you're doing a lot of higher-order allocations (CONFIG_LARGE_KSTACKS).

There could also be a pathological case where there are many free pages,
you only want a single free page, but we can't find them since we happen to
skip over them.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/page_alloc.c