]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
lib/rbtree: add random seed
authorWei Yang <richard.weiyang@gmail.com>
Mon, 10 Mar 2025 07:49:34 +0000 (07:49 +0000)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 17 Mar 2025 19:17:00 +0000 (12:17 -0700)
Current test use pseudo rand function with fixed seed, which means the
test data is the same pattern each time.

Add random seed parameter to randomize the test.

Link: https://lkml.kernel.org/r/20250310074938.26756-4-richard.weiyang@gmail.com
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Michel Lespinasse <michel@lespinasse.org>
Cc: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/types.h
lib/interval_tree_test.c
lib/rbtree_test.c
tools/include/linux/types.h
tools/testing/rbtree/interval_tree_test.c
tools/testing/rbtree/rbtree_test.c

index 1c509ce8f7f616e1a7100554f2c296a9b263d08e..864ab701f297b29990c94a2be05c25cc983b9fa4 100644 (file)
@@ -92,6 +92,7 @@ typedef unsigned char         unchar;
 typedef unsigned short         ushort;
 typedef unsigned int           uint;
 typedef unsigned long          ulong;
+typedef unsigned long long     ullong;
 
 #ifndef __BIT_TYPES_DEFINED__
 #define __BIT_TYPES_DEFINED__
index 12880d772945539ee8203c9a0ae59c48a920d529..51863077d4ecf7633a649da6140d507ec14661cd 100644 (file)
@@ -19,6 +19,7 @@ __param(int, search_loops, 1000, "Number of iterations searching the tree");
 __param(bool, search_all, false, "Searches will iterate all nodes in the tree");
 
 __param(uint, max_endpoint, ~0, "Largest value for the interval's endpoint");
+__param(ullong, seed, 3141592653589793238ULL, "Random seed");
 
 static struct rb_root_cached root = RB_ROOT_CACHED;
 static struct interval_tree_node *nodes = NULL;
@@ -137,7 +138,7 @@ static int interval_tree_test_init(void)
                return -ENOMEM;
        }
 
-       prandom_seed_state(&rnd, 3141592653589793238ULL);
+       prandom_seed_state(&rnd, seed);
 
        basic_check();
        search_check();
index b0e0b26506cbc0dcb5329f106f1bf5c2aeb8e92c..690cede46ac2dfec05874f5898a5a89e08cbd0f0 100644 (file)
@@ -14,6 +14,7 @@
 __param(int, nnodes, 100, "Number of nodes in the rb-tree");
 __param(int, perf_loops, 1000, "Number of iterations modifying the rb-tree");
 __param(int, check_loops, 100, "Number of iterations modifying and verifying the rb-tree");
+__param(ullong, seed, 3141592653589793238ULL, "Random seed");
 
 struct test_node {
        u32 key;
@@ -402,7 +403,7 @@ static int __init rbtree_test_init(void)
        if (!nodes)
                return -ENOMEM;
 
-       prandom_seed_state(&rnd, 3141592653589793238ULL);
+       prandom_seed_state(&rnd, seed);
 
        basic_check();
        augmented_check();
index 8519386acd2391e6a1cfbb7c731515d10c997c0e..4928e33d44ac4162703396df9dca62b4a86f0dec 100644 (file)
@@ -42,6 +42,8 @@ typedef __s16 s16;
 typedef __u8  u8;
 typedef __s8  s8;
 
+typedef unsigned long long     ullong;
+
 #ifdef __CHECKER__
 #define __bitwise      __attribute__((bitwise))
 #else
index f1c41f5e28ba108b631a6baf332fca289420590c..63775b831c1c4faa328dfe8d1c03926c6cc37de9 100644 (file)
@@ -18,6 +18,7 @@ int usage(void)
        fprintf(stderr, "  -s: Number of iterations searching the tree\n");
        fprintf(stderr, "  -a: Searches will iterate all nodes in the tree\n");
        fprintf(stderr, "  -m: Largest value for the interval's endpoint\n");
+       fprintf(stderr, "  -r: Random seed\n");
        exit(-1);
 }
 
@@ -31,7 +32,7 @@ int main(int argc, char **argv)
 {
        int opt;
 
-       while ((opt = getopt(argc, argv, "n:p:q:s:am:")) != -1) {
+       while ((opt = getopt(argc, argv, "n:p:q:s:am:r:")) != -1) {
                if (opt == 'n')
                        nnodes = strtoul(optarg, NULL, 0);
                else if (opt == 'p')
@@ -44,6 +45,8 @@ int main(int argc, char **argv)
                        search_all = true;
                else if (opt == 'm')
                        max_endpoint = strtoul(optarg, NULL, 0);
+               else if (opt == 'r')
+                       seed = strtoul(optarg, NULL, 0);
                else
                        usage();
        }
index c723e751b9a919b919167359b85f3c407f026e1c..585c970f679e37300c1f43e9b37cc8b4ce967aa4 100644 (file)
@@ -16,6 +16,7 @@ int usage(void)
        fprintf(stderr, "  -n: Number of nodes in the rb-tree\n");
        fprintf(stderr, "  -p: Number of iterations modifying the rb-tree\n");
        fprintf(stderr, "  -c: Number of iterations modifying and verifying the rb-tree\n");
+       fprintf(stderr, "  -r: Random seed\n");
        exit(-1);
 }
 
@@ -29,13 +30,15 @@ int main(int argc, char **argv)
 {
        int opt;
 
-       while ((opt = getopt(argc, argv, "n:p:c:")) != -1) {
+       while ((opt = getopt(argc, argv, "n:p:c:r:")) != -1) {
                if (opt == 'n')
                        nnodes = strtoul(optarg, NULL, 0);
                else if (opt == 'p')
                        perf_loops = strtoul(optarg, NULL, 0);
                else if (opt == 'c')
                        check_loops = strtoul(optarg, NULL, 0);
+               else if (opt == 'r')
+                       seed = strtoul(optarg, NULL, 0);
                else
                        usage();
        }