X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=lib%2Fgenalloc.c;h=9ce0a6a3b85ac49d2f160dda9c732ec65698f078;hb=1e03ce74496b1229c5e8d582963379013726e421;hp=d6d30d2e71664629304bc4795b533fbb89914e11;hpb=1bdf7a78c2b21fb94dfe7994dbe89310b18479d2;p=linux-2.6-omap-h63xx.git diff --git a/lib/genalloc.c b/lib/genalloc.c index d6d30d2e716..9ce0a6a3b85 100644 --- a/lib/genalloc.c +++ b/lib/genalloc.c @@ -95,12 +95,10 @@ unsigned long gen_pool_alloc(struct gen_pool *poolp, int size) if (size > max_chunk_size) return 0; - i = 0; - size = max(size, 1 << ALLOC_MIN_SHIFT); - s = roundup_pow_of_two(size); - - j = i; + i = fls(size - 1); + s = 1 << i; + j = i -= ALLOC_MIN_SHIFT; spin_lock_irqsave(&poolp->lock, flags); while (!h[j].next) { @@ -153,10 +151,10 @@ void gen_pool_free(struct gen_pool *poolp, unsigned long ptr, int size) if (size > max_chunk_size) return; - i = 0; - size = max(size, 1 << ALLOC_MIN_SHIFT); - s = roundup_pow_of_two(size); + i = fls(size - 1); + s = 1 << i; + i -= ALLOC_MIN_SHIFT; a = ptr;