linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Matthew Wilcox <willy@infradead.org>
To: linux-kernel@vger.kernel.org
Cc: Matthew Wilcox <willy@infradead.org>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: [PATCH 23/26] test_ida: Convert check_ida_conv to new API
Date: Thu, 21 Jun 2018 14:28:32 -0700	[thread overview]
Message-ID: <20180621212835.5636-24-willy@infradead.org> (raw)
In-Reply-To: <20180621212835.5636-1-willy@infradead.org>

Move as much as possible to kernel space; leave the parts in user space
that rely on checking memory allocation failures to detect the
transition between an exceptional entry and a bitmap.

Signed-off-by: Matthew Wilcox <willy@infradead.org>
---
 lib/test_ida.c                      | 31 ++++++++++++++++
 tools/testing/radix-tree/idr-test.c | 56 ++++++-----------------------
 2 files changed, 41 insertions(+), 46 deletions(-)

diff --git a/lib/test_ida.c b/lib/test_ida.c
index e8ab544032f9..15e013800171 100644
--- a/lib/test_ida.c
+++ b/lib/test_ida.c
@@ -65,6 +65,36 @@ static void ida_check_max(struct ida *ida)
 	}
 }
 
+/*
+ * Check handling of conversions between exceptional entries and full bitmaps.
+ */
+static void ida_check_conv(struct ida *ida)
+{
+	unsigned long i;
+	int id;
+
+	for (i = 0; i < IDA_BITMAP_BITS * 2; i += IDA_BITMAP_BITS) {
+		IDA_BUG_ON(ida, ida_alloc_min(ida, i + 1, GFP_KERNEL) != i + 1);
+		IDA_BUG_ON(ida, ida_alloc_min(ida, i + BITS_PER_LONG,
+					GFP_KERNEL) != i + BITS_PER_LONG);
+		ida_free(ida, i + 1);
+		ida_free(ida, i + BITS_PER_LONG);
+		IDA_BUG_ON(ida, !ida_is_empty(ida));
+	}
+
+	for (i = 0; i < IDA_BITMAP_BITS * 2; i++)
+		IDA_BUG_ON(ida, ida_alloc(ida, GFP_KERNEL) != i);
+	for (i = IDA_BITMAP_BITS * 2; i > 0; i--)
+		ida_free(ida, i - 1);
+	IDA_BUG_ON(ida, !ida_is_empty(ida));
+
+	for (i = 0; i < IDA_BITMAP_BITS + BITS_PER_LONG - 4; i++)
+		IDA_BUG_ON(ida, ida_alloc(ida, GFP_KERNEL) != i);
+	for (i = IDA_BITMAP_BITS + BITS_PER_LONG - 4; i > 0; i--)
+		ida_free(ida, i - 1);
+	IDA_BUG_ON(ida, !ida_is_empty(ida));
+}
+
 static int ida_checks(void)
 {
 	DEFINE_IDA(ida);
@@ -74,6 +104,7 @@ static int ida_checks(void)
 	ida_check_leaf(&ida, 1024);
 	ida_check_leaf(&ida, 1024 * 64);
 	ida_check_max(&ida);
+	ida_check_conv(&ida);
 
 	printk("IDA: %u of %u tests passed\n", tests_passed, tests_run);
 	return (tests_run != tests_passed) ? 0 : -EINVAL;
diff --git a/tools/testing/radix-tree/idr-test.c b/tools/testing/radix-tree/idr-test.c
index bd9699327f95..f948e38b9a6b 100644
--- a/tools/testing/radix-tree/idr-test.c
+++ b/tools/testing/radix-tree/idr-test.c
@@ -339,59 +339,23 @@ void ida_check_nomem(void)
 /*
  * Check handling of conversions between exceptional entries and full bitmaps.
  */
-void ida_check_conv(void)
+void ida_check_conv_user(void)
 {
 	DEFINE_IDA(ida);
-	int id;
 	unsigned long i;
 
-	for (i = 0; i < IDA_BITMAP_BITS * 2; i += IDA_BITMAP_BITS) {
-		assert(ida_pre_get(&ida, GFP_KERNEL));
-		assert(!ida_get_new_above(&ida, i + 1, &id));
-		assert(id == i + 1);
-		assert(!ida_get_new_above(&ida, i + BITS_PER_LONG, &id));
-		assert(id == i + BITS_PER_LONG);
-		ida_remove(&ida, i + 1);
-		ida_remove(&ida, i + BITS_PER_LONG);
-		assert(ida_is_empty(&ida));
-	}
-
-	assert(ida_pre_get(&ida, GFP_KERNEL));
-
-	for (i = 0; i < IDA_BITMAP_BITS * 2; i++) {
-		assert(ida_pre_get(&ida, GFP_KERNEL));
-		assert(!ida_get_new(&ida, &id));
-		assert(id == i);
-	}
-
-	for (i = IDA_BITMAP_BITS * 2; i > 0; i--) {
-		ida_remove(&ida, i - 1);
-	}
-	assert(ida_is_empty(&ida));
-
-	for (i = 0; i < IDA_BITMAP_BITS + BITS_PER_LONG - 4; i++) {
-		assert(ida_pre_get(&ida, GFP_KERNEL));
-		assert(!ida_get_new(&ida, &id));
-		assert(id == i);
-	}
-
-	for (i = IDA_BITMAP_BITS + BITS_PER_LONG - 4; i > 0; i--) {
-		ida_remove(&ida, i - 1);
-	}
-	assert(ida_is_empty(&ida));
-
 	radix_tree_cpu_dead(1);
 	for (i = 0; i < 1000000; i++) {
-		int err = ida_get_new(&ida, &id);
-		if (err == -EAGAIN) {
-			assert((i % IDA_BITMAP_BITS) == (BITS_PER_LONG - 2));
-			assert(ida_pre_get(&ida, GFP_KERNEL));
-			err = ida_get_new(&ida, &id);
+		int id = ida_alloc(&ida, GFP_NOWAIT);
+		if (id == -ENOMEM) {
+			IDA_BUG_ON(&ida, (i % IDA_BITMAP_BITS) !=
+					(BITS_PER_LONG - 2));
+			id = ida_alloc(&ida, GFP_KERNEL);
 		} else {
-			assert((i % IDA_BITMAP_BITS) != (BITS_PER_LONG - 2));
+			IDA_BUG_ON(&ida, (i % IDA_BITMAP_BITS) ==
+					(BITS_PER_LONG - 2));
 		}
-		assert(!err);
-		assert(id == i);
+		IDA_BUG_ON(&ida, id != i);
 	}
 	ida_destroy(&ida);
 }
@@ -507,7 +471,7 @@ void user_ida_checks(void)
 	ida_destroy(&ida);
 	assert(ida_is_empty(&ida));
 
-	ida_check_conv();
+	ida_check_conv_user();
 	ida_check_random();
 	ida_simple_get_remove_test();
 
-- 
2.17.1


  parent reply	other threads:[~2018-06-21 21:31 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-21 21:28 [PATCH 00/26] New IDA API Matthew Wilcox
2018-06-21 21:28 ` [PATCH 01/26] radix tree test suite: fix build Matthew Wilcox
2018-06-21 21:28 ` [PATCH 02/26] ida: Lock the IDA in ida_destroy Matthew Wilcox
2018-06-21 21:28 ` [PATCH 03/26] ida: Add new API Matthew Wilcox
2018-06-21 21:28 ` [PATCH 04/26] mtip32xx: Convert to new IDA API Matthew Wilcox
2018-06-25  8:20   ` Johannes Thumshirn
2018-06-21 21:28 ` [PATCH 05/26] fs: Convert unnamed_dev_ida to new API Matthew Wilcox
2018-06-22 19:45   ` Randy Dunlap
2018-06-22 21:12     ` Matthew Wilcox
2018-06-21 21:28 ` [PATCH 06/26] fs: Convert namespace IDAs " Matthew Wilcox
2018-06-21 21:28 ` [PATCH 07/26] devpts: Convert to new IDA API Matthew Wilcox
2018-06-21 21:28 ` [PATCH 08/26] sd: Convert to new IDA interface Matthew Wilcox
2018-06-21 21:28 ` [PATCH 09/26] osd: Convert to new IDA API Matthew Wilcox
2018-06-21 21:28 ` [PATCH 10/26] rsxx: " Matthew Wilcox
2018-06-21 21:28 ` [PATCH 11/26] cb710: " Matthew Wilcox
2018-06-21 21:33   ` Michał Mirosław
2018-06-21 21:28 ` [PATCH 12/26] Convert net_namespace " Matthew Wilcox
2018-06-21 21:28 ` [PATCH 13/26] ppc: Convert mmu context allocation " Matthew Wilcox
2018-06-22  2:15   ` Nicholas Piggin
2018-06-22  4:38     ` Matthew Wilcox
2018-06-22  4:53       ` Nicholas Piggin
2018-06-22  5:47       ` Aneesh Kumar K.V
2018-06-22  5:47     ` Aneesh Kumar K.V
2018-06-21 21:28 ` [PATCH 14/26] media: Convert entity ID " Matthew Wilcox
2018-07-24 11:05   ` Sakari Ailus
2018-07-30 14:55     ` Mauro Carvalho Chehab
2018-07-31 18:16       ` Matthew Wilcox
2018-06-21 21:28 ` [PATCH 15/26] ppc: Convert vas " Matthew Wilcox
2018-07-05 12:17   ` Matthew Wilcox
2018-06-21 21:28 ` [PATCH 16/26] dmaengine: Convert " Matthew Wilcox
2018-06-23 12:30   ` Vinod
2018-06-23 23:06     ` Matthew Wilcox
2018-06-24  7:57   ` Lars-Peter Clausen
2018-06-26 23:00     ` Matthew Wilcox
2018-06-21 21:28 ` [PATCH 17/26] drm/vmwgfx: " Matthew Wilcox
2018-06-21 21:28 ` [PATCH 18/26] target/iscsi: Allocate session IDs from an IDA Matthew Wilcox
2018-07-26 16:48   ` Mike Christie
2018-07-26 16:50     ` Mike Christie
2018-07-26 17:13     ` Mike Christie
2018-07-27 19:38       ` Matthew Wilcox
2018-07-27 21:05         ` Mike Christie
2018-07-31  2:03           ` Martin K. Petersen
2018-07-31 18:15             ` Matthew Wilcox
2018-07-31 18:55               ` Mike Christie
2018-06-21 21:28 ` [PATCH 19/26] ida: Start new test_ida module Matthew Wilcox
2018-06-21 21:28 ` [PATCH 20/26] idr-test: Convert ida_check_nomem to new API Matthew Wilcox
2018-06-21 21:28 ` [PATCH 21/26] test_ida: Move ida_check_leaf Matthew Wilcox
2018-06-21 21:28 ` [PATCH 22/26] test_ida: Move ida_check_max Matthew Wilcox
2018-06-21 21:28 ` Matthew Wilcox [this message]
2018-06-21 21:28 ` [PATCH 24/26] test_ida: check_ida_destroy and check_ida_alloc Matthew Wilcox
2018-06-21 21:28 ` [PATCH 25/26] ida: Remove old API Matthew Wilcox
2018-06-21 21:28 ` [PATCH 26/26] ida: Change ida_get_new_above to return the id Matthew Wilcox

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180621212835.5636-24-willy@infradead.org \
    --to=willy@infradead.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).