1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2017 Cavium, Inc
8 #include <rte_common.h>
9 #include <rte_bitmap.h>
10 #include <rte_malloc.h>
17 test_bitmap_scan_operations(struct rte_bitmap *bmp)
20 uint64_t slab1_magic = 0xBADC0FFEEBADF00D;
21 uint64_t slab2_magic = 0xFEEDDEADDEADF00D;
22 uint64_t out_slab = 0;
24 rte_bitmap_reset(bmp);
26 rte_bitmap_set_slab(bmp, pos, slab1_magic);
27 rte_bitmap_set_slab(bmp, pos + RTE_BITMAP_SLAB_BIT_SIZE, slab2_magic);
29 if (!rte_bitmap_scan(bmp, &pos, &out_slab)) {
30 printf("Failed to get slab from bitmap.\n");
34 if (slab1_magic != out_slab) {
35 printf("Scan operation sanity failed.\n");
39 if (!rte_bitmap_scan(bmp, &pos, &out_slab)) {
40 printf("Failed to get slab from bitmap.\n");
44 if (slab2_magic != out_slab) {
45 printf("Scan operation sanity failed.\n");
50 if (!rte_bitmap_scan(bmp, &pos, &out_slab)) {
51 printf("Failed to get slab from bitmap.\n");
55 if (slab1_magic != out_slab) {
56 printf("Scan operation wrap around failed.\n");
60 /* Scan reset check. */
61 __rte_bitmap_scan_init(bmp);
63 if (!rte_bitmap_scan(bmp, &pos, &out_slab)) {
64 printf("Failed to get slab from bitmap.\n");
68 if (slab1_magic != out_slab) {
69 printf("Scan reset operation failed.\n");
77 test_bitmap_slab_set_get(struct rte_bitmap *bmp)
80 uint64_t slab_magic = 0xBADC0FFEEBADF00D;
81 uint64_t out_slab = 0;
83 rte_bitmap_reset(bmp);
84 rte_bitmap_set_slab(bmp, pos, slab_magic);
86 if (!rte_bitmap_scan(bmp, &pos, &out_slab)) {
87 printf("Failed to get slab from bitmap.\n");
92 if (slab_magic != out_slab) {
93 printf("Invalid slab in bitmap.\n");
102 test_bitmap_set_get_clear(struct rte_bitmap *bmp)
106 rte_bitmap_reset(bmp);
107 for (i = 0; i < MAX_BITS; i++)
108 rte_bitmap_set(bmp, i);
110 for (i = 0; i < MAX_BITS; i++) {
111 if (!rte_bitmap_get(bmp, i)) {
112 printf("Failed to get set bit.\n");
117 for (i = 0; i < MAX_BITS; i++)
118 rte_bitmap_clear(bmp, i);
120 for (i = 0; i < MAX_BITS; i++) {
121 if (rte_bitmap_get(bmp, i)) {
122 printf("Failed to clear set bit.\n");
135 struct rte_bitmap *bmp;
138 rte_bitmap_get_memory_footprint(MAX_BITS);
140 mem = rte_zmalloc("test_bmap", bmp_size, RTE_CACHE_LINE_SIZE);
142 printf("Failed to allocate memory for bitmap\n");
146 bmp = rte_bitmap_init(MAX_BITS, mem, bmp_size);
148 printf("Failed to init bitmap\n");
152 if (test_bitmap_set_get_clear(bmp) < 0)
155 if (test_bitmap_slab_set_get(bmp) < 0)
158 if (test_bitmap_scan_operations(bmp) < 0)
164 REGISTER_TEST_COMMAND(bitmap_test, test_bitmap);