From patchwork Wed Oct 28 08:43:14 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akinobu Mita X-Patchwork-Id: 37061 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id CB186B7BFA for ; Wed, 28 Oct 2009 19:45:50 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932794AbZJ1Iol (ORCPT ); Wed, 28 Oct 2009 04:44:41 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S932779AbZJ1Iok (ORCPT ); Wed, 28 Oct 2009 04:44:40 -0400 Received: from mail-yw0-f202.google.com ([209.85.211.202]:60692 "EHLO mail-yw0-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932765AbZJ1Inm (ORCPT ); Wed, 28 Oct 2009 04:43:42 -0400 Received: by ywh40 with SMTP id 40so440959ywh.33 for ; Wed, 28 Oct 2009 01:43:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:cc:subject:date :message-id:x-mailer:in-reply-to:references; bh=aXyqJ1YObYQ6PhoRsTCqfPi+8KdPfWM+C1yRsoQNf98=; b=ZKsSOxvhCZgqCOkr2cOupIHFqddM/MaU96z0buR/kqetzXT+9JJ1UTh63tz2TYTTT+ WtekOHU4FHTMKvQPLvJZupcISU5MI8OvIAqXgh/XgjMgcwMETwvQe3I5i3chJt2NVp0d TCTp+qoCgbc8GZ3yF9uDg0rgwLPkltWO+Uy7w= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; b=nNPDH4VSssF6ybQVUiFrEXL80BvmzX0j8ULuZbcyiFQaHNx2GOk4STz5srk3Zyo/aq ZR4L6KPHsg683jJKQ6dRagydefDoxasElRj+XF9Il18yAauKUyMBWMBF2sGaAGrTtFPV FZazjZDffae7zYg02hQ911KekRcrrF+OoLmco= Received: by 10.90.149.6 with SMTP id w6mr501946agd.90.1256719427191; Wed, 28 Oct 2009 01:43:47 -0700 (PDT) Received: from localhost ([220.110.185.192]) by mx.google.com with ESMTPS id 20sm350594yxe.38.2009.10.28.01.43.45 (version=TLSv1/SSLv3 cipher=RC4-MD5); Wed, 28 Oct 2009 01:43:46 -0700 (PDT) From: Akinobu Mita To: linux-kernel@vger.kernel.org, akpm@linux-foundation.org Cc: Akinobu Mita , Yevgeny Petrilin , netdev@vger.kernel.org Subject: [PATCH 4/7] mlx4: Use bitmap_find_next_zero_area Date: Wed, 28 Oct 2009 17:43:14 +0900 Message-Id: <1256719397-4258-4-git-send-email-akinobu.mita@gmail.com> X-Mailer: git-send-email 1.6.5.1 In-Reply-To: <1256719397-4258-1-git-send-email-akinobu.mita@gmail.com> References: <1256719397-4258-1-git-send-email-akinobu.mita@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Signed-off-by: Akinobu Mita Reviewed-by: Roland Dreier Cc: Yevgeny Petrilin Cc: netdev@vger.kernel.org --- drivers/net/mlx4/alloc.c | 37 ++++--------------------------------- 1 files changed, 4 insertions(+), 33 deletions(-) diff --git a/drivers/net/mlx4/alloc.c b/drivers/net/mlx4/alloc.c index ad95d5f..8c85156 100644 --- a/drivers/net/mlx4/alloc.c +++ b/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) {