From patchwork Wed Jul 17 07:11:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Yang X-Patchwork-Id: 11047359 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CCEFF138D for ; Wed, 17 Jul 2019 07:12:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BB7AA28450 for ; Wed, 17 Jul 2019 07:12:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AFF7828686; Wed, 17 Jul 2019 07:12:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id A307228694 for ; Wed, 17 Jul 2019 07:12:12 +0000 (UTC) Received: from localhost ([::1]:54624 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hne6l-0005vp-RN for patchwork-qemu-devel@patchwork.kernel.org; Wed, 17 Jul 2019 03:12:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51593) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hne6Y-00050f-1S for qemu-devel@nongnu.org; Wed, 17 Jul 2019 03:11:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hne6W-0003uX-UY for qemu-devel@nongnu.org; Wed, 17 Jul 2019 03:11:57 -0400 Received: from mga05.intel.com ([192.55.52.43]:60321) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hne6W-0003sM-L7 for qemu-devel@nongnu.org; Wed, 17 Jul 2019 03:11:56 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Jul 2019 00:11:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,273,1559545200"; d="scan'208";a="161670181" Received: from richard.sh.intel.com (HELO localhost) ([10.239.159.54]) by orsmga008.jf.intel.com with ESMTP; 17 Jul 2019 00:11:53 -0700 From: Wei Yang To: qemu-devel@nongnu.org Date: Wed, 17 Jul 2019 15:11:13 +0800 Message-Id: <20190717071114.14772-2-richardw.yang@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190717071114.14772-1-richardw.yang@linux.intel.com> References: <20190717071114.14772-1-richardw.yang@linux.intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.43 Subject: [Qemu-devel] [PATCH v2 1/2] bitmap: get last word mask from nr directly X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: quintela@redhat.com, corentincj@iksaif.net, pl@kamp.de, peterx@redhat.com, kraxel@redhat.com, pbonzini@redhat.com, Wei Yang Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP The value left in nr is the number of bits for the last word, which could be calculate the last word mask directly. Remove the unnecessary size. Signed-off-by: Wei Yang --- v2: refine bitmap_set_atomic too, suggested from Peter --- util/bitmap.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/util/bitmap.c b/util/bitmap.c index 1753ff7f5b..5b15249796 100644 --- a/util/bitmap.c +++ b/util/bitmap.c @@ -160,7 +160,6 @@ int slow_bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, void bitmap_set(unsigned long *map, long start, long nr) { unsigned long *p = map + BIT_WORD(start); - const long size = start + nr; int bits_to_set = BITS_PER_LONG - (start % BITS_PER_LONG); unsigned long mask_to_set = BITMAP_FIRST_WORD_MASK(start); @@ -174,7 +173,7 @@ void bitmap_set(unsigned long *map, long start, long nr) p++; } if (nr) { - mask_to_set &= BITMAP_LAST_WORD_MASK(size); + mask_to_set &= BITMAP_LAST_WORD_MASK(nr); *p |= mask_to_set; } } @@ -182,7 +181,6 @@ void bitmap_set(unsigned long *map, long start, long nr) void bitmap_set_atomic(unsigned long *map, long start, long nr) { unsigned long *p = map + BIT_WORD(start); - const long size = start + nr; int bits_to_set = BITS_PER_LONG - (start % BITS_PER_LONG); unsigned long mask_to_set = BITMAP_FIRST_WORD_MASK(start); @@ -208,7 +206,7 @@ void bitmap_set_atomic(unsigned long *map, long start, long nr) /* Last word */ if (nr) { - mask_to_set &= BITMAP_LAST_WORD_MASK(size); + mask_to_set &= BITMAP_LAST_WORD_MASK(nr); atomic_or(p, mask_to_set); } else { /* If we avoided the full barrier in atomic_or(), issue a @@ -221,7 +219,6 @@ void bitmap_set_atomic(unsigned long *map, long start, long nr) void bitmap_clear(unsigned long *map, long start, long nr) { unsigned long *p = map + BIT_WORD(start); - const long size = start + nr; int bits_to_clear = BITS_PER_LONG - (start % BITS_PER_LONG); unsigned long mask_to_clear = BITMAP_FIRST_WORD_MASK(start); @@ -235,7 +232,7 @@ void bitmap_clear(unsigned long *map, long start, long nr) p++; } if (nr) { - mask_to_clear &= BITMAP_LAST_WORD_MASK(size); + mask_to_clear &= BITMAP_LAST_WORD_MASK(nr); *p &= ~mask_to_clear; } } From patchwork Wed Jul 17 07:11:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Yang X-Patchwork-Id: 11047361 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 58081112C for ; Wed, 17 Jul 2019 07:12:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 44975285E8 for ; Wed, 17 Jul 2019 07:12:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 387F2286A2; Wed, 17 Jul 2019 07:12:29 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id DAC7628694 for ; Wed, 17 Jul 2019 07:12:28 +0000 (UTC) Received: from localhost ([::1]:54632 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hne71-00075b-SA for patchwork-qemu-devel@patchwork.kernel.org; Wed, 17 Jul 2019 03:12:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51625) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hne6Z-000567-PP for qemu-devel@nongnu.org; Wed, 17 Jul 2019 03:12:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hne6X-0003vN-Mr for qemu-devel@nongnu.org; Wed, 17 Jul 2019 03:11:59 -0400 Received: from mga05.intel.com ([192.55.52.43]:60321) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hne6X-0003sM-Dk for qemu-devel@nongnu.org; Wed, 17 Jul 2019 03:11:57 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Jul 2019 00:11:57 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,273,1559545200"; d="scan'208";a="161670201" Received: from richard.sh.intel.com (HELO localhost) ([10.239.159.54]) by orsmga008.jf.intel.com with ESMTP; 17 Jul 2019 00:11:55 -0700 From: Wei Yang To: qemu-devel@nongnu.org Date: Wed, 17 Jul 2019 15:11:14 +0800 Message-Id: <20190717071114.14772-3-richardw.yang@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190717071114.14772-1-richardw.yang@linux.intel.com> References: <20190717071114.14772-1-richardw.yang@linux.intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.43 Subject: [Qemu-devel] [PATCH v2 2/2] test-bitmap: add test for bitmap_set X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: quintela@redhat.com, corentincj@iksaif.net, pl@kamp.de, peterx@redhat.com, kraxel@redhat.com, pbonzini@redhat.com, Wei Yang Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add a test for bitmap_set. There are three cases: * Both start and end is BITS_PER_LONG aligned * Only start is BITS_PER_LONG aligned * Only end is BITS_PER_LONG aligned Signed-off-by: Wei Yang --- tests/test-bitmap.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/test-bitmap.c b/tests/test-bitmap.c index cb7c5e462d..1f0123f604 100644 --- a/tests/test-bitmap.c +++ b/tests/test-bitmap.c @@ -59,12 +59,45 @@ static void check_bitmap_copy_with_offset(void) g_free(bmap3); } +static void check_bitmap_set(void) +{ + unsigned long *bmap; + + bmap = bitmap_new(BMAP_SIZE); + + /* Both Aligned, set bits [BITS_PER_LONG, 2*BITS_PER_LONG] */ + bitmap_set(bmap, BITS_PER_LONG, BITS_PER_LONG); + g_assert_cmpint(find_first_bit(bmap, BITS_PER_LONG), ==, BITS_PER_LONG); + g_assert_cmpint(find_next_zero_bit(bmap, 2 * BITS_PER_LONG, BITS_PER_LONG), + ==, 2 * BITS_PER_LONG); + + bitmap_clear(bmap, 0, BMAP_SIZE); + /* End Aligned, set bits [BITS_PER_LONG - 5, 2*BITS_PER_LONG] */ + bitmap_set(bmap, BITS_PER_LONG - 5, BITS_PER_LONG + 5); + g_assert_cmpint(find_first_bit(bmap, BITS_PER_LONG), + ==, BITS_PER_LONG - 5); + g_assert_cmpint(find_next_zero_bit(bmap, + 2 * BITS_PER_LONG, BITS_PER_LONG - 5), + ==, 2 * BITS_PER_LONG); + + bitmap_clear(bmap, 0, BMAP_SIZE); + /* Start Aligned, set bits [BITS_PER_LONG, 2*BITS_PER_LONG + 5] */ + bitmap_set(bmap, BITS_PER_LONG, BITS_PER_LONG + 5); + g_assert_cmpint(find_first_bit(bmap, BITS_PER_LONG), + ==, BITS_PER_LONG); + g_assert_cmpint(find_next_zero_bit(bmap, + 2 * BITS_PER_LONG + 5, BITS_PER_LONG), + ==, 2 * BITS_PER_LONG + 5); +} + int main(int argc, char **argv) { g_test_init(&argc, &argv, NULL); g_test_add_func("/bitmap/bitmap_copy_with_offset", check_bitmap_copy_with_offset); + g_test_add_func("/bitmap/bitmap_set", + check_bitmap_set); g_test_run();