X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=lib%2Fradix-tree.c;h=48c250fe2233d82c6d8fd563e83c234cdf1109ee;hb=1b310fca30ac9851f79337ca72b1cf6a0f58064a;hp=53fd44d78716cfb3d0b9f77c1372737e49a1a12b;hpb=4ba9b9d0ba0a49d91fa6417c7510ee36f48cf957;p=powerpc.git diff --git a/lib/radix-tree.c b/lib/radix-tree.c index 53fd44d787..48c250fe22 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c @@ -1049,12 +1049,14 @@ radix_tree_node_ctor(struct kmem_cache *cachep, void *node) static __init unsigned long __maxindex(unsigned int height) { - unsigned int tmp = height * RADIX_TREE_MAP_SHIFT; - unsigned long index = (~0UL >> (RADIX_TREE_INDEX_BITS - tmp - 1)) >> 1; - - if (tmp >= RADIX_TREE_INDEX_BITS) - index = ~0UL; - return index; + unsigned int width = height * RADIX_TREE_MAP_SHIFT; + int shift = RADIX_TREE_INDEX_BITS - width; + + if (shift < 0) + return ~0UL; + if (shift >= BITS_PER_LONG) + return 0UL; + return ~0UL >> shift; } static __init void radix_tree_init_maxindex(void)