Merged to master at 5e76ce76868c..b6ae093be2b6 (from, to]

You can see the entire diff with 'git diff' or at
https://github.com/brho/akaros/compare/5e76ce76868c...b6ae093be2b6



On 2016-05-04 at 18:02 Barret Rhoden <[email protected]> wrote:
> 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 <[email protected]>
> ---
>  kern/src/page_alloc.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/kern/src/page_alloc.c b/kern/src/page_alloc.c
> index 535d16e40f2d..ac3b1ce92413 100644
> --- a/kern/src/page_alloc.c
> +++ b/kern/src/page_alloc.c
> @@ -196,10 +196,14 @@ void *get_cont_pages(size_t order, int flags)
>               int j;
>               for(j=i; j>=(i-(npages-1)); j--) {
>                       if( !page_is_free(j) ) {
> -                             i = j - 1;
> +                             /* i will be j - 1 next time around
> the outer loop */
> +                             i = j;
>                               break;
>                       }
>               }
> +             /* careful: if we change the allocator and allow
> npages = 0, then this
> +              * will trip when we set i = j.  then we'll be
> handing out in-use
> +              * memory. */
>               if( j == (i-(npages-1)-1)) {
>                       first = j+1;
>                       break;

-- 
You received this message because you are subscribed to the Google Groups 
"Akaros" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to