From owner-svn-src-projects@FreeBSD.ORG Thu Jul 15 01:17:41 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5AC16106566C; Thu, 15 Jul 2010 01:17:41 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 30C3F8FC08; Thu, 15 Jul 2010 01:17:41 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o6F1HfXG036332; Thu, 15 Jul 2010 01:17:41 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o6F1HfIu036330; Thu, 15 Jul 2010 01:17:41 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201007150117.o6F1HfIu036330@svn.freebsd.org> From: Jeff Roberson Date: Thu, 15 Jul 2010 01:17:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r210094 - projects/ofed/head/sys/ofed/include/linux X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Jul 2010 01:17:41 -0000 Author: jeff Date: Thu Jul 15 01:17:40 2010 New Revision: 210094 URL: http://svn.freebsd.org/changeset/base/210094 Log: - Add more bitops for zero, fill, full, etc. Sponsored by: Isilon Systems, iX Systems, and Panasas. Modified: projects/ofed/head/sys/ofed/include/linux/bitops.h Modified: projects/ofed/head/sys/ofed/include/linux/bitops.h ============================================================================== --- projects/ofed/head/sys/ofed/include/linux/bitops.h Thu Jul 15 01:17:07 2010 (r210093) +++ projects/ofed/head/sys/ofed/include/linux/bitops.h Thu Jul 15 01:17:40 2010 (r210094) @@ -153,6 +153,82 @@ find_next_bit(unsigned long *addr, unsig return (bit); } +static inline unsigned long +find_next_zero_bit(unsigned long *addr, unsigned long size, + unsigned long offset) +{ + int mask; + int offs; + int bit; + int pos; + + pos = offset / BITS_PER_LONG; + offs = size % BITS_PER_LONG; + bit = BITS_PER_LONG * pos; + addr += pos; + if (offs) { + mask = ~(*addr) & ~BIT_MASK(offs); + if (mask) + return (bit + __ffsl(mask)); + bit += BITS_PER_LONG; + addr++; + } + for (size -= bit; size >= BITS_PER_LONG; + size -= BITS_PER_LONG, bit += BITS_PER_LONG, addr++) { + if (~(*addr) == 0) + continue; + return (bit + __ffsl(~(*addr))); + } + if (size) { + mask = ~(*addr) & BIT_MASK(size); + if (mask) + bit += __ffsl(mask); + else + bit += size; + } + return (bit); +} + +static inline void +bitmap_zero(unsigned long *addr, int size) +{ + int len; + + len = BITS_TO_LONGS(size) * sizeof(*addr); + memset(addr, 0, len); +} + +static inline void +bitmap_fill(unsigned long *addr, int size) +{ + int tail; + int len; + + len = BITS_TO_LONGS(size) * sizeof(*addr); + memset(addr, 0xff, len); + tail = size & (BITS_PER_LONG - 1); + if (tail) + addr[len - 1] = ((unsigned long)-1) >> (BITS_PER_LONG - tail); +} + +static inline int +bitmap_full(unsigned long *addr, int size) +{ + int tail; + int len; + int i; + + len = size / BITS_PER_LONG; + for (i = 0; i < len; i++) + if (addr[i] != (unsigned long)-1) + return (0); + tail = size & (BITS_PER_LONG - 1); + if (tail) + if (addr[i] != ((unsigned long)-1) >> (BITS_PER_LONG - tail)) + return (0); + return (1); +} + #define NBINT (NBBY * sizeof(int)) #define set_bit(i, a) \