From adb5bbd9f4e289ea6605f1161369f7c8e3a86957 Mon Sep 17 00:00:00 2001 From: Akinobu Mita Date: Tue, 15 Dec 2009 16:48:29 -0800 Subject: [PATCH] --- yaml --- r: 176759 b: refs/heads/master c: 43ff8b60853793fb0155b3e465739d2170c3aa2f h: refs/heads/master i: 176757: 619be2ce38d64b867e75c43ed8028a54de8d43b2 176755: f410510cc9700a0e8fa83cf0a6cec5073c6f3c31 176751: 985e91ae4544d8bfe56f826584d63488c72c318f v: v3 --- [refs] | 2 +- trunk/drivers/net/mlx4/alloc.c | 37 ++++------------------------------ 2 files changed, 5 insertions(+), 34 deletions(-) diff --git a/[refs] b/[refs] index 8387aff10215..e366bc4a751f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 735e1b9aded4934da2c743560acd771ca38e04e6 +refs/heads/master: 43ff8b60853793fb0155b3e465739d2170c3aa2f diff --git a/trunk/drivers/net/mlx4/alloc.c b/trunk/drivers/net/mlx4/alloc.c index ad95d5f7b630..8c8515619b8e 100644 --- a/trunk/drivers/net/mlx4/alloc.c +++ b/trunk/drivers/net/mlx4/alloc.c @@ -72,35 +72,6 @@ void mlx4_bitmap_free(struct mlx4_bitmap *bitmap, u32 obj) mlx4_bitmap_free_range(bitmap, obj, 1); } -static unsigned long find_aligned_range(unsigned long *bitmap, - u32 start, u32 nbits, - int len, int align) -{ - unsigned long end, i; - -again: - start = ALIGN(start, align); - - while ((start < nbits) && test_bit(start, bitmap)) - start += align; - - if (start >= nbits) - return -1; - - end = start+len; - if (end > nbits) - return -1; - - for (i = start + 1; i < end; i++) { - if (test_bit(i, bitmap)) { - start = i + 1; - goto again; - } - } - - return start; -} - u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align) { u32 obj, i; @@ -110,13 +81,13 @@ u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align) spin_lock(&bitmap->lock); - obj = find_aligned_range(bitmap->table, bitmap->last, - bitmap->max, cnt, align); + obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max, + bitmap->last, cnt, align - 1); if (obj >= bitmap->max) { bitmap->top = (bitmap->top + bitmap->max + bitmap->reserved_top) & bitmap->mask; - obj = find_aligned_range(bitmap->table, 0, bitmap->max, - cnt, align); + obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max, + 0, cnt, align - 1); } if (obj < bitmap->max) {