From patchwork Fri Sep 11 22:47:25 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Stringer X-Patchwork-Id: 517041 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (li376-54.members.linode.com [96.126.127.54]) by ozlabs.org (Postfix) with ESMTP id 5893D140772 for ; Sat, 12 Sep 2015 08:47:39 +1000 (AEST) Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id 34BEC10D70; Fri, 11 Sep 2015 15:47:38 -0700 (PDT) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx1e4.cudamail.com (mx1.cudamail.com [69.90.118.67]) by archives.nicira.com (Postfix) with ESMTPS id 707DC10D68 for ; Fri, 11 Sep 2015 15:47:37 -0700 (PDT) Received: from bar2.cudamail.com (unknown [192.168.21.12]) by mx1e4.cudamail.com (Postfix) with ESMTPS id 00BD31E02B4 for ; Fri, 11 Sep 2015 16:47:37 -0600 (MDT) X-ASG-Debug-ID: 1442011656-03dc5353b80bb10001-byXFYA Received: from mx1-pf1.cudamail.com ([192.168.24.1]) by bar2.cudamail.com with ESMTP id xt4B2DTRvUc9DCKI (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Fri, 11 Sep 2015 16:47:36 -0600 (MDT) X-Barracuda-Envelope-From: joestringer@nicira.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.24.1 Received: from unknown (HELO mail-pa0-f54.google.com) (209.85.220.54) by mx1-pf1.cudamail.com with ESMTPS (RC4-SHA encrypted); 11 Sep 2015 22:47:35 -0000 Received-SPF: unknown (mx1-pf1.cudamail.com: Multiple SPF records returned) X-Barracuda-RBL-Trusted-Forwarder: 209.85.220.54 Received: by padhk3 with SMTP id hk3so86355781pad.3 for ; Fri, 11 Sep 2015 15:47:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=rpbD5xTvsGtvEz/1oeoEy49JHQi1Y1egDbES/bSCub0=; b=Kx9jlRH3I/9itpfR095wi6S2nzl42ffLdZOY8F2EWCakAYgJFNxuxHZbVSNZXrkRB0 nTQE8XSJsk8o3l/O5F5JYxhUAlaY9zbeSKTHusZHUQiCGHsnKOuxS6t8AaX5Arxj+x/w kxBKWgtvwzt2A/GURLk77XEIQjODYIOqMFiEVTpWEyd9OkksF/e7WMhDd7U36uixf+GF 9KvIoHvHbsx5cPIA/MHkcZPIu8KNNCylSCRjwyxBDYqflChKZnRf1HTqcZ9d+8G3Mnid oufZVyZLaKGjVlk9iLDanbquwRxguT0XzEk4ueUdxb7BqDV3NJtqa4smFguAbHqLNErV l+5w== X-Gm-Message-State: ALoCoQm9YktUecsA3/h6mHGYilGq/87XL+Lri91Q07BaXLsdGZGfPANDLknOrM38j2uOq5qQ4mep X-Received: by 10.68.220.199 with SMTP id py7mr2623223pbc.150.1442011655007; Fri, 11 Sep 2015 15:47:35 -0700 (PDT) Received: from localhost.localdomain ([208.91.2.4]) by smtp.gmail.com with ESMTPSA id ns3sm2274432pbc.77.2015.09.11.15.47.34 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 11 Sep 2015 15:47:34 -0700 (PDT) X-CudaMail-Envelope-Sender: joestringer@nicira.com X-Barracuda-Apparent-Source-IP: 208.91.2.4 From: Joe Stringer To: dev@openvswitch.org X-CudaMail-Whitelist-To: dev@openvswitch.org X-CudaMail-MID: CM-E1-910084072 X-CudaMail-DTE: 091115 X-CudaMail-Originating-IP: 209.85.220.54 Date: Fri, 11 Sep 2015 15:47:25 -0700 X-ASG-Orig-Subj: [##CM-E1-910084072##][branch-2.3 1/2] bitmap: Add new functions. Message-Id: <1442011646-50005-1-git-send-email-joestringer@nicira.com> X-Mailer: git-send-email 2.1.4 X-Barracuda-Connect: UNKNOWN[192.168.24.1] X-Barracuda-Start-Time: 1442011656 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-ASG-Whitelist: Header =?UTF-8?B?eFwtY3VkYW1haWxcLXdoaXRlbGlzdFwtdG8=?= X-Virus-Scanned: by bsmtpd at cudamail.com X-Barracuda-BRTS-Status: 1 Subject: [ovs-dev] [branch-2.3 1/2] bitmap: Add new functions. X-BeenThere: dev@openvswitch.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dev-bounces@openvswitch.org Sender: "dev" From: Ben Pfaff These will be used in an upcoming commit. This is a backport of master commit c1a29506e854. Signed-off-by: Ben Pfaff Acked-by: Jarno Rajahalme Signed-off-by: Joe Stringer --- lib/bitmap.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ lib/bitmap.h | 6 ++++++ 2 files changed, 50 insertions(+) diff --git a/lib/bitmap.c b/lib/bitmap.c index 4b4e13e..7889aa1 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c @@ -109,3 +109,47 @@ bitmap_count1(const unsigned long int *bitmap, size_t n) return count; } + +/* "dst &= arg;" for n-bit dst and arg. */ +void +bitmap_and(unsigned long *dst, const unsigned long *arg, size_t n) +{ + size_t i; + + for (i = 0; i < BITMAP_N_LONGS(n); i++) { + dst[i] &= arg[i]; + } +} + +/* "dst |= arg;" for n-bit dst and arg. */ +void +bitmap_or(unsigned long *dst, const unsigned long *arg, size_t n) +{ + size_t i; + + for (i = 0; i < BITMAP_N_LONGS(n); i++) { + dst[i] |= arg[i]; + } +} + +/* "dst = ~dst;" for n-bit dst. */ +void +bitmap_not(unsigned long *dst, size_t n) +{ + size_t i; + + for (i = 0; i < n / BITMAP_ULONG_BITS; i++) { + dst[i] = ~dst[i]; + } + if (n % BITMAP_ULONG_BITS) { + dst[i] ^= (1u << (n % BITMAP_ULONG_BITS)) - 1; + } +} + +/* Returns true if all of the 'n' bits in 'bitmap' are 0, + * false if at least one bit is a 1.*/ +bool +bitmap_is_all_zeros(const unsigned long *bitmap, size_t n) +{ + return bitmap_scan(bitmap, true, 0, n) == n; +} diff --git a/lib/bitmap.h b/lib/bitmap.h index afe6151..ace091f 100644 --- a/lib/bitmap.h +++ b/lib/bitmap.h @@ -104,6 +104,12 @@ size_t bitmap_scan(const unsigned long int *, bool target, size_t start, size_t end); size_t bitmap_count1(const unsigned long *, size_t n); +void bitmap_and(unsigned long *dst, const unsigned long *arg, size_t n); +void bitmap_or(unsigned long *dst, const unsigned long *arg, size_t n); +void bitmap_not(unsigned long *dst, size_t n); + +bool bitmap_is_all_zeros(const unsigned long *, size_t n); + #define BITMAP_FOR_EACH_1(IDX, SIZE, BITMAP) \ for ((IDX) = bitmap_scan(BITMAP, 1, 0, SIZE); (IDX) < (SIZE); \ (IDX) = bitmap_scan(BITMAP, 1, (IDX) + 1, SIZE))