From patchwork Sat Aug 28 05:08:13 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akinobu Mita X-Patchwork-Id: 62890 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.180.67]) by ozlabs.org (Postfix) with ESMTP id 6850AB7119 for ; Sat, 28 Aug 2010 15:15:16 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750878Ab0H1FPK (ORCPT ); Sat, 28 Aug 2010 01:15:10 -0400 Received: from mail-pw0-f46.google.com ([209.85.160.46]:45962 "EHLO mail-pw0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750733Ab0H1FPJ (ORCPT ); Sat, 28 Aug 2010 01:15:09 -0400 Received: by pwi7 with SMTP id 7so1423243pwi.19 for ; Fri, 27 Aug 2010 22:15:04 -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; bh=Qs/2QBEhaXcDMBm9zEka2K2s9Mba7wJaQcitX8mzwI4=; b=TOWFeE2qe+ztE4r6IC2KiB36Qo8nYFj1DhDGlAKVraRKSa5YYlMF2zWrkVFW87a5Ur psLoCch48S/Cunry0X/5HSCysCJIQaUFZa1u7LW+XDnrBqBbzSrv6PTe7qlpjMf1MGdY IQR5xX232Nypbu1pTCgR6LAMP7WQ4uRytu+y8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; b=utkDt8N5VsPb8U7l2JPUs8ri877zuguFKMms4yh10jD7OTV9OaomNBbngHM1ggFk5j STBLWqy0mqBfKgsZp4j0rbT2QA8V+Jn19Inq379ULGEdtwlPO41773aQOqk3fAFb3hGZ 5yPxIHVpVO+R0nhI5jYWRZg10/DN6E9fcSqpg= Received: by 10.114.75.14 with SMTP id x14mr1598791waa.189.1282972504728; Fri, 27 Aug 2010 22:15:04 -0700 (PDT) Received: from localhost (p17219-adsau04yokonib3-acca.kanagawa.ocn.ne.jp [60.43.121.219]) by mx.google.com with ESMTPS id 33sm8128471wad.18.2010.08.27.22.15.02 (version=TLSv1/SSLv3 cipher=RC4-MD5); Fri, 27 Aug 2010 22:15:03 -0700 (PDT) From: Akinobu Mita To: netdev@vger.kernel.org Cc: Akinobu Mita , Roland Dreier , "David S. Miller" Subject: [PATCH v2] mlx4: use bitmap library Date: Sat, 28 Aug 2010 14:08:13 +0900 Message-Id: <1282972093-9885-1-git-send-email-akinobu.mita@gmail.com> X-Mailer: git-send-email 1.6.0.6 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Replace loops calling set_bit() and clear_bit() with bitmap_set() and bitmap_clear(). Unlike loops calling set_bit() and clear_bit(), bitmap_set() and bitmap_clear() are not atomic. But this is ok. Because the bitmap operations are protected by bitmap->lock except for initialization of the bitmap in mlx4_bitmap_init(). Signed-off-by: Akinobu Mita Cc: Roland Dreier Cc: netdev@vger.kernel.org Cc: "David S. Miller" --- v2: * Update patch description (No change in the patch) drivers/net/mlx4/alloc.c | 15 ++++----------- 1 files changed, 4 insertions(+), 11 deletions(-) diff --git a/drivers/net/mlx4/alloc.c b/drivers/net/mlx4/alloc.c index 8c85156..76595bd 100644 --- a/drivers/net/mlx4/alloc.c +++ b/drivers/net/mlx4/alloc.c @@ -74,7 +74,7 @@ void mlx4_bitmap_free(struct mlx4_bitmap *bitmap, u32 obj) u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align) { - u32 obj, i; + u32 obj; if (likely(cnt == 1 && align == 1)) return mlx4_bitmap_alloc(bitmap); @@ -91,8 +91,7 @@ u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align) } if (obj < bitmap->max) { - for (i = 0; i < cnt; i++) - set_bit(obj + i, bitmap->table); + bitmap_set(bitmap->table, obj, cnt); if (obj == bitmap->last) { bitmap->last = (obj + cnt); if (bitmap->last >= bitmap->max) @@ -109,13 +108,10 @@ u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align) void mlx4_bitmap_free_range(struct mlx4_bitmap *bitmap, u32 obj, int cnt) { - u32 i; - obj &= bitmap->max + bitmap->reserved_top - 1; spin_lock(&bitmap->lock); - for (i = 0; i < cnt; i++) - clear_bit(obj + i, bitmap->table); + bitmap_clear(bitmap->table, obj, cnt); bitmap->last = min(bitmap->last, obj); bitmap->top = (bitmap->top + bitmap->max + bitmap->reserved_top) & bitmap->mask; @@ -125,8 +121,6 @@ void mlx4_bitmap_free_range(struct mlx4_bitmap *bitmap, u32 obj, int cnt) int mlx4_bitmap_init(struct mlx4_bitmap *bitmap, u32 num, u32 mask, u32 reserved_bot, u32 reserved_top) { - int i; - /* num must be a power of 2 */ if (num != roundup_pow_of_two(num)) return -EINVAL; @@ -142,8 +136,7 @@ int mlx4_bitmap_init(struct mlx4_bitmap *bitmap, u32 num, u32 mask, if (!bitmap->table) return -ENOMEM; - for (i = 0; i < reserved_bot; ++i) - set_bit(i, bitmap->table); + bitmap_set(bitmap->table, 0, reserved_bot); return 0; }