DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH 1/3] bitops: promote bit manipulation API to stable
@ 2025-05-18  8:05 Mattias Rönnblom
  2025-05-18  8:05 ` [PATCH 2/3] bitset: remove experimental bitops workaround Mattias Rönnblom
  2025-05-18  8:05 ` [PATCH 3/3] bitset: promote API stable Mattias Rönnblom
  0 siblings, 2 replies; 3+ messages in thread
From: Mattias Rönnblom @ 2025-05-18  8:05 UTC (permalink / raw)
  To: dev
  Cc: Mattias Rönnblom, David Marchand, Thomas Monjalon,
	Morten Brørup, Mattias Rönnblom

Remove experimental tag from generic selection-based APIs to test and
modify individual bits in 32- or 64-bit words.

Signed-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
---
 lib/eal/include/rte_bitops.h | 58 ------------------------------------
 1 file changed, 58 deletions(-)

diff --git a/lib/eal/include/rte_bitops.h b/lib/eal/include/rte_bitops.h
index b9a6af381b..77d6ce9d63 100644
--- a/lib/eal/include/rte_bitops.h
+++ b/lib/eal/include/rte_bitops.h
@@ -110,9 +110,6 @@ extern "C" {
 		((typeof(mask))(((reg) & (mask)) >> rte_ctz64(mask)))
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Test bit in word.
  *
  * Generic selection macro to test the value of a bit in a 32-bit or
@@ -140,9 +137,6 @@ extern "C" {
 			(addr, nr)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Set bit in word.
  *
  * Generic selection macro to set a bit in a 32-bit or 64-bit
@@ -166,9 +160,6 @@ extern "C" {
 			(addr, nr)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Clear bit in word.
  *
  * Generic selection macro to clear a bit in a 32-bit or 64-bit
@@ -192,9 +183,6 @@ extern "C" {
 			(addr, nr)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Assign a value to a bit in word.
  *
  * Generic selection macro to assign a value to a bit in a 32-bit or 64-bit
@@ -219,9 +207,6 @@ extern "C" {
 			(addr, nr, value)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Flip a bit in word.
  *
  * Generic selection macro to change the value of a bit to '0' if '1'
@@ -245,9 +230,6 @@ extern "C" {
 			(addr, nr)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Test if a particular bit in a word is set with a particular memory
  * order.
  *
@@ -276,9 +258,6 @@ extern "C" {
 			(addr, nr, memory_order)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Atomically set bit in word.
  *
  * Generic selection macro to atomically set bit specified by @c nr in
@@ -301,9 +280,6 @@ extern "C" {
 			(addr, nr, memory_order)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Atomically clear bit in word.
  *
  * Generic selection macro to atomically set bit specified by @c nr in
@@ -326,9 +302,6 @@ extern "C" {
 			(addr, nr, memory_order)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Atomically assign a value to bit in word.
  *
  * Generic selection macro to atomically set bit specified by @c nr in the
@@ -353,9 +326,6 @@ extern "C" {
 			(addr, nr, value, memory_order)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Atomically flip bit in word.
  *
  * Generic selection macro to atomically negate the value of the bit
@@ -379,9 +349,6 @@ extern "C" {
 			(addr, nr, memory_order)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Atomically test and set a bit in word.
  *
  * Generic selection macro to atomically test and set bit specified by
@@ -406,9 +373,6 @@ extern "C" {
 			(addr, nr, memory_order)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Atomically test and clear a bit in word.
  *
  * Generic selection macro to atomically test and clear bit specified
@@ -433,9 +397,6 @@ extern "C" {
 			(addr, nr, memory_order)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Atomically test and assign a bit in word.
  *
  * Generic selection macro to atomically test and assign bit specified
@@ -463,7 +424,6 @@ extern "C" {
 			(addr, nr, value, memory_order)
 
 #define __RTE_GEN_BIT_TEST(variant, qualifier, size) \
-__rte_experimental \
 static inline bool \
 __rte_bit_ ## variant ## test ## size(const qualifier uint ## size ## _t *addr, unsigned int nr) \
 { \
@@ -473,7 +433,6 @@ __rte_bit_ ## variant ## test ## size(const qualifier uint ## size ## _t *addr,
 }
 
 #define __RTE_GEN_BIT_SET(variant, qualifier, size) \
-__rte_experimental \
 static inline void \
 __rte_bit_ ## variant ## set ## size(qualifier uint ## size ## _t *addr, unsigned int nr) \
 { \
@@ -483,7 +442,6 @@ __rte_bit_ ## variant ## set ## size(qualifier uint ## size ## _t *addr, unsigne
 }
 
 #define __RTE_GEN_BIT_CLEAR(variant, qualifier, size) \
-__rte_experimental \
 static inline void \
 __rte_bit_ ## variant ## clear ## size(qualifier uint ## size ## _t *addr, unsigned int nr) \
 { \
@@ -493,7 +451,6 @@ __rte_bit_ ## variant ## clear ## size(qualifier uint ## size ## _t *addr, unsig
 }
 
 #define __RTE_GEN_BIT_ASSIGN(variant, qualifier, size) \
-__rte_experimental \
 static inline void \
 __rte_bit_ ## variant ## assign ## size(qualifier uint ## size ## _t *addr, unsigned int nr, \
 		bool value) \
@@ -505,7 +462,6 @@ __rte_bit_ ## variant ## assign ## size(qualifier uint ## size ## _t *addr, unsi
 }
 
 #define __RTE_GEN_BIT_FLIP(variant, qualifier, size) \
-__rte_experimental \
 static inline void \
 __rte_bit_ ## variant ## flip ## size(qualifier uint ## size ## _t *addr, unsigned int nr) \
 { \
@@ -525,13 +481,10 @@ __rte_bit_ ## variant ## flip ## size(qualifier uint ## size ## _t *addr, unsign
 	__RTE_GEN_BIT_OPS(,, size) \
 	__RTE_GEN_BIT_OPS(v_, volatile, size)
 
-#ifdef ALLOW_EXPERIMENTAL_API
 __RTE_GEN_BIT_OPS_SIZE(32)
 __RTE_GEN_BIT_OPS_SIZE(64)
-#endif
 
 #define __RTE_GEN_BIT_ATOMIC_TEST(variant, qualifier, size) \
-__rte_experimental \
 static inline bool \
 __rte_bit_atomic_ ## variant ## test ## size(const qualifier uint ## size ## _t *addr, \
 		unsigned int nr, int memory_order) \
@@ -544,7 +497,6 @@ __rte_bit_atomic_ ## variant ## test ## size(const qualifier uint ## size ## _t
 }
 
 #define __RTE_GEN_BIT_ATOMIC_SET(variant, qualifier, size) \
-__rte_experimental \
 static inline void \
 __rte_bit_atomic_ ## variant ## set ## size(qualifier uint ## size ## _t *addr, \
 		unsigned int nr, int memory_order) \
@@ -557,7 +509,6 @@ __rte_bit_atomic_ ## variant ## set ## size(qualifier uint ## size ## _t *addr,
 }
 
 #define __RTE_GEN_BIT_ATOMIC_CLEAR(variant, qualifier, size) \
-__rte_experimental \
 static inline void \
 __rte_bit_atomic_ ## variant ## clear ## size(qualifier uint ## size ## _t *addr, \
 		unsigned int nr, int memory_order) \
@@ -570,7 +521,6 @@ __rte_bit_atomic_ ## variant ## clear ## size(qualifier uint ## size ## _t *addr
 }
 
 #define __RTE_GEN_BIT_ATOMIC_FLIP(variant, qualifier, size) \
-__rte_experimental \
 static inline void \
 __rte_bit_atomic_ ## variant ## flip ## size(qualifier uint ## size ## _t *addr, \
 		unsigned int nr, int memory_order) \
@@ -583,7 +533,6 @@ __rte_bit_atomic_ ## variant ## flip ## size(qualifier uint ## size ## _t *addr,
 }
 
 #define __RTE_GEN_BIT_ATOMIC_ASSIGN(variant, qualifier, size) \
-__rte_experimental \
 static inline void \
 __rte_bit_atomic_## variant ## assign ## size(qualifier uint ## size ## _t *addr, \
 		unsigned int nr, bool value, int memory_order) \
@@ -595,7 +544,6 @@ __rte_bit_atomic_## variant ## assign ## size(qualifier uint ## size ## _t *addr
 }
 
 #define __RTE_GEN_BIT_ATOMIC_TEST_AND_SET(variant, qualifier, size) \
-__rte_experimental \
 static inline bool \
 __rte_bit_atomic_ ## variant ## test_and_set ## size(qualifier uint ## size ## _t *addr, \
 		unsigned int nr, int memory_order) \
@@ -610,7 +558,6 @@ __rte_bit_atomic_ ## variant ## test_and_set ## size(qualifier uint ## size ## _
 }
 
 #define __RTE_GEN_BIT_ATOMIC_TEST_AND_CLEAR(variant, qualifier, size) \
-__rte_experimental \
 static inline bool \
 __rte_bit_atomic_ ## variant ## test_and_clear ## size(qualifier uint ## size ## _t *addr, \
 		unsigned int nr, int memory_order) \
@@ -625,7 +572,6 @@ __rte_bit_atomic_ ## variant ## test_and_clear ## size(qualifier uint ## size ##
 }
 
 #define __RTE_GEN_BIT_ATOMIC_TEST_AND_ASSIGN(variant, qualifier, size) \
-__rte_experimental \
 static inline bool \
 __rte_bit_atomic_ ## variant ## test_and_assign ## size( \
 		qualifier uint ## size ## _t *addr, unsigned int nr, bool value, \
@@ -653,10 +599,8 @@ __rte_bit_atomic_ ## variant ## test_and_assign ## size( \
 	__RTE_GEN_BIT_ATOMIC_OPS(,, size) \
 	__RTE_GEN_BIT_ATOMIC_OPS(v_, volatile, size)
 
-#ifdef ALLOW_EXPERIMENTAL_API
 __RTE_GEN_BIT_ATOMIC_OPS_SIZE(32)
 __RTE_GEN_BIT_ATOMIC_OPS_SIZE(64)
-#endif
 
 /*------------------------ 32-bit relaxed operations ------------------------*/
 
@@ -1571,7 +1515,6 @@ rte_bit_ ## family ## fun(qualifier uint ## size ## _t *addr, arg1_type arg1_nam
 	__RTE_BIT_OVERLOAD_SZ_4R(family, fun, qualifier, 64, ret_type, arg1_type, arg1_name, \
 		arg2_type, arg2_name, arg3_type, arg3_name)
 
-#ifdef ALLOW_EXPERIMENTAL_API
 __RTE_BIT_OVERLOAD_2R(, test, const, bool, unsigned int, nr)
 __RTE_BIT_OVERLOAD_2(, set,, unsigned int, nr)
 __RTE_BIT_OVERLOAD_2(, clear,, unsigned int, nr)
@@ -1587,7 +1530,6 @@ __RTE_BIT_OVERLOAD_3R(atomic_, test_and_set,, bool, unsigned int, nr, int, memor
 __RTE_BIT_OVERLOAD_3R(atomic_, test_and_clear,, bool, unsigned int, nr, int, memory_order)
 __RTE_BIT_OVERLOAD_4R(atomic_, test_and_assign,, bool, unsigned int, nr, bool, value,
 	int, memory_order)
-#endif
 
 #endif
 
-- 
2.43.0


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH 2/3] bitset: remove experimental bitops workaround
  2025-05-18  8:05 [PATCH 1/3] bitops: promote bit manipulation API to stable Mattias Rönnblom
@ 2025-05-18  8:05 ` Mattias Rönnblom
  2025-05-18  8:05 ` [PATCH 3/3] bitset: promote API stable Mattias Rönnblom
  1 sibling, 0 replies; 3+ messages in thread
From: Mattias Rönnblom @ 2025-05-18  8:05 UTC (permalink / raw)
  To: dev
  Cc: Mattias Rönnblom, David Marchand, Thomas Monjalon,
	Morten Brørup, Mattias Rönnblom

With bitops APIs used by bitset stable, the workaround required to fix
build for GCC without experimental API is no longer needed.

Signed-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
---
 lib/eal/include/rte_bitset.h | 132 -----------------------------------
 1 file changed, 132 deletions(-)

diff --git a/lib/eal/include/rte_bitset.h b/lib/eal/include/rte_bitset.h
index 116121eec4..27b7a2e34d 100644
--- a/lib/eal/include/rte_bitset.h
+++ b/lib/eal/include/rte_bitset.h
@@ -255,13 +255,7 @@ __rte_experimental
 static inline bool
 rte_bitset_test(const uint64_t *bitset, size_t bit_num)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	return __RTE_BITSET_DELEGATE(rte_bit_test, bitset, bit_num);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(bit_num);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -283,13 +277,7 @@ __rte_experimental
 static inline void
 rte_bitset_set(uint64_t *bitset, size_t bit_num)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	__RTE_BITSET_DELEGATE(rte_bit_set, bitset, bit_num);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(bit_num);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -311,13 +299,7 @@ __rte_experimental
 static inline void
 rte_bitset_clear(uint64_t *bitset, size_t bit_num)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	__RTE_BITSET_DELEGATE(rte_bit_clear, bitset, bit_num);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(bit_num);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -341,14 +323,7 @@ __rte_experimental
 static inline void
 rte_bitset_assign(uint64_t *bitset, size_t bit_num, bool bit_value)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	__RTE_BITSET_DELEGATE_N(rte_bit_assign, bitset, bit_num, bit_value);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(bit_num);
-	RTE_SET_USED(bit_value);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -370,13 +345,7 @@ __rte_experimental
 static inline void
 rte_bitset_flip(uint64_t *bitset, size_t bit_num)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	__RTE_BITSET_DELEGATE(rte_bit_flip, bitset, bit_num);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(bit_num);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -401,14 +370,7 @@ __rte_experimental
 static inline bool
 rte_bitset_atomic_test(const uint64_t *bitset, size_t bit_num, int memory_order)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	return __RTE_BITSET_DELEGATE_N(rte_bit_atomic_test, bitset, bit_num, memory_order);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(bit_num);
-	RTE_SET_USED(memory_order);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -437,14 +399,7 @@ __rte_experimental
 static inline void
 rte_bitset_atomic_set(uint64_t *bitset, size_t bit_num, int memory_order)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	__RTE_BITSET_DELEGATE_N(rte_bit_atomic_set, bitset, bit_num, memory_order);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(bit_num);
-	RTE_SET_USED(memory_order);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -473,14 +428,7 @@ __rte_experimental
 static inline void
 rte_bitset_atomic_clear(uint64_t *bitset, size_t bit_num, int memory_order)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	__RTE_BITSET_DELEGATE_N(rte_bit_atomic_clear, bitset, bit_num, memory_order);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(bit_num);
-	RTE_SET_USED(memory_order);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -511,15 +459,7 @@ __rte_experimental
 static inline void
 rte_bitset_atomic_assign(uint64_t *bitset, size_t bit_num, bool bit_value, int memory_order)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	__RTE_BITSET_DELEGATE_N(rte_bit_atomic_assign, bitset, bit_num, bit_value, memory_order);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(bit_num);
-	RTE_SET_USED(bit_value);
-	RTE_SET_USED(memory_order);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -548,14 +488,7 @@ __rte_experimental
 static inline void
 rte_bitset_atomic_flip(uint64_t *bitset, size_t bit_num, int memory_order)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	__RTE_BITSET_DELEGATE_N(rte_bit_atomic_flip, bitset, bit_num, memory_order);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(bit_num);
-	RTE_SET_USED(memory_order);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -591,13 +524,7 @@ __rte_experimental
 static inline void
 rte_bitset_clear_all(uint64_t *bitset, size_t size)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	rte_bitset_init(bitset, size);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(size);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -649,13 +576,7 @@ __rte_experimental
 static inline size_t
 rte_bitset_count_clear(const uint64_t *bitset, size_t size)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	return size - rte_bitset_count_set(bitset, size);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(size);
-	RTE_VERIFY(false);
-#endif
 }
 
 #define __RTE_BITSET_FIND_FLAG_FIND_CLEAR (1U << 0)
@@ -714,7 +635,6 @@ static inline ssize_t
 __rte_bitset_find(const uint64_t *bitset, size_t size, size_t start_bit, size_t len,
 		unsigned int flags)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	bool find_clear = flags & __RTE_BITSET_FIND_FLAG_FIND_CLEAR;
 	bool may_wrap = flags & __RTE_BITSET_FIND_FLAG_WRAP;
 	bool does_wrap = (start_bit + len) > size;
@@ -735,14 +655,6 @@ __rte_bitset_find(const uint64_t *bitset, size_t size, size_t start_bit, size_t
 		rc = __rte_bitset_find_nowrap(bitset, size, start_bit, len, find_clear);
 
 	return rc;
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(size);
-	RTE_SET_USED(start_bit);
-	RTE_SET_USED(len);
-	RTE_SET_USED(flags);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -766,13 +678,7 @@ __rte_experimental
 static inline ssize_t
 rte_bitset_find_first_set(const uint64_t *bitset, size_t size)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	return __rte_bitset_find(bitset, size, 0, size, 0);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(size);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -802,15 +708,7 @@ __rte_experimental
 static inline ssize_t
 rte_bitset_find_set(const uint64_t *bitset, size_t size, size_t start_bit, size_t len)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	return __rte_bitset_find(bitset, size, start_bit, len, 0);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(size);
-	RTE_SET_USED(start_bit);
-	RTE_SET_USED(len);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -841,15 +739,7 @@ __rte_experimental
 static inline ssize_t
 rte_bitset_find_set_wrap(const uint64_t *bitset, size_t size, size_t start_bit, size_t len)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	return __rte_bitset_find(bitset, size, start_bit, len, __RTE_BITSET_FIND_FLAG_WRAP);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(size);
-	RTE_SET_USED(start_bit);
-	RTE_SET_USED(len);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -873,13 +763,7 @@ __rte_experimental
 static inline ssize_t
 rte_bitset_find_first_clear(const uint64_t *bitset, size_t size)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	return __rte_bitset_find(bitset, size, 0, size, __RTE_BITSET_FIND_FLAG_FIND_CLEAR);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(size);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -909,15 +793,7 @@ __rte_experimental
 static inline ssize_t
 rte_bitset_find_clear(const uint64_t *bitset, size_t size, size_t start_bit, size_t len)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	return __rte_bitset_find(bitset, size, start_bit, len, __RTE_BITSET_FIND_FLAG_FIND_CLEAR);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(size);
-	RTE_SET_USED(start_bit);
-	RTE_SET_USED(len);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
@@ -948,16 +824,8 @@ __rte_experimental
 static inline ssize_t
 rte_bitset_find_clear_wrap(const uint64_t *bitset, size_t size, size_t start_bit, size_t len)
 {
-#ifdef ALLOW_EXPERIMENTAL_API
 	return __rte_bitset_find(bitset, size, start_bit, len,
 		__RTE_BITSET_FIND_FLAG_FIND_CLEAR | __RTE_BITSET_FIND_FLAG_WRAP);
-#else
-	RTE_SET_USED(bitset);
-	RTE_SET_USED(size);
-	RTE_SET_USED(start_bit);
-	RTE_SET_USED(len);
-	RTE_VERIFY(false);
-#endif
 }
 
 /**
-- 
2.43.0


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH 3/3] bitset: promote API stable
  2025-05-18  8:05 [PATCH 1/3] bitops: promote bit manipulation API to stable Mattias Rönnblom
  2025-05-18  8:05 ` [PATCH 2/3] bitset: remove experimental bitops workaround Mattias Rönnblom
@ 2025-05-18  8:05 ` Mattias Rönnblom
  1 sibling, 0 replies; 3+ messages in thread
From: Mattias Rönnblom @ 2025-05-18  8:05 UTC (permalink / raw)
  To: dev
  Cc: Mattias Rönnblom, David Marchand, Thomas Monjalon,
	Morten Brørup, Mattias Rönnblom

Remove experimental tag on the bitset API.

Signed-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
---
 lib/eal/common/rte_bitset.c  |   2 +-
 lib/eal/include/rte_bitset.h | 137 -----------------------------------
 2 files changed, 1 insertion(+), 138 deletions(-)

diff --git a/lib/eal/common/rte_bitset.c b/lib/eal/common/rte_bitset.c
index 78001b1ee8..0844acffc1 100644
--- a/lib/eal/common/rte_bitset.c
+++ b/lib/eal/common/rte_bitset.c
@@ -10,7 +10,7 @@
 #include <eal_export.h>
 #include "rte_bitset.h"
 
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_bitset_to_str, 24.11)
+RTE_EXPORT_SYMBOL(rte_bitset_to_str)
 ssize_t
 rte_bitset_to_str(const uint64_t *bitset, size_t num_bits, char *buf, size_t capacity)
 {
diff --git a/lib/eal/include/rte_bitset.h b/lib/eal/include/rte_bitset.h
index 27b7a2e34d..c199acc5be 100644
--- a/lib/eal/include/rte_bitset.h
+++ b/lib/eal/include/rte_bitset.h
@@ -87,9 +87,6 @@ extern "C" {
 	fun(&(bitset)[__RTE_BITSET_WORD_IDX(bit_num)], __RTE_BITSET_BIT_OFFSET(bit_num))
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Declare a bitset.
  *
  * Declare (e.g., as a struct field) or define (e.g., as a stack
@@ -115,9 +112,6 @@ extern "C" {
 				__RTE_BITSET_FOREACH_LEFT(var, size, start_bit, len), flags) : -1)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Iterate over all bits set.
  *
  * This macro iterates over all bits set (i.e., all ones) in the
@@ -136,9 +130,6 @@ extern "C" {
 	__RTE_BITSET_FOREACH(var, bitset, size, 0, size, 0)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Iterate over all bits cleared.
  *
  * This macro iterates over all bits cleared in the bitset, in the
@@ -156,9 +147,6 @@ extern "C" {
 	__RTE_BITSET_FOREACH(var, bitset, size, 0, size, __RTE_BITSET_FIND_FLAG_FIND_CLEAR)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Iterate over all bits set within a range.
  *
  * This macro iterates over all bits set (i.e., all ones) in the
@@ -182,9 +170,6 @@ extern "C" {
 	__RTE_BITSET_FOREACH(var, bitset, size, start_bit, len, 0)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Iterate over all cleared bits within a range.
  *
  * This macro iterates over all bits cleared (i.e., all zeroes) in the
@@ -215,9 +200,6 @@ extern "C" {
 		__RTE_BITSET_FIND_FLAG_WRAP | __RTE_BITSET_FIND_FLAG_FIND_CLEAR)
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Initializes a bitset.
  *
  * All bits are cleared.
@@ -231,7 +213,6 @@ extern "C" {
  * @param size
  *   The size of the bitset (in bits).
  */
-__rte_experimental
 static inline void
 rte_bitset_init(uint64_t *bitset, size_t size)
 {
@@ -239,9 +220,6 @@ rte_bitset_init(uint64_t *bitset, size_t size)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Test if a bit is set.
  *
  * @param bitset
@@ -251,7 +229,6 @@ rte_bitset_init(uint64_t *bitset, size_t size)
  * @return
  *   Returns true if the bit is '1', and false if the bit is '0'.
  */
-__rte_experimental
 static inline bool
 rte_bitset_test(const uint64_t *bitset, size_t bit_num)
 {
@@ -259,9 +236,6 @@ rte_bitset_test(const uint64_t *bitset, size_t bit_num)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Set a bit in the bitset.
  *
  * Bits are numbered from 0 to (size - 1) (inclusive).
@@ -273,7 +247,6 @@ rte_bitset_test(const uint64_t *bitset, size_t bit_num)
  * @param bit_num
  *   The index of the bit to be set.
  */
-__rte_experimental
 static inline void
 rte_bitset_set(uint64_t *bitset, size_t bit_num)
 {
@@ -281,9 +254,6 @@ rte_bitset_set(uint64_t *bitset, size_t bit_num)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Clear a bit in the bitset.
  *
  * Bits are numbered 0 to (size - 1) (inclusive).
@@ -295,7 +265,6 @@ rte_bitset_set(uint64_t *bitset, size_t bit_num)
  * @param bit_num
  *   The index of the bit to be cleared.
  */
-__rte_experimental
 static inline void
 rte_bitset_clear(uint64_t *bitset, size_t bit_num)
 {
@@ -303,9 +272,6 @@ rte_bitset_clear(uint64_t *bitset, size_t bit_num)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Set or clear a bit in the bitset.
  *
  * Bits are numbered 0 to (size - 1) (inclusive).
@@ -319,7 +285,6 @@ rte_bitset_clear(uint64_t *bitset, size_t bit_num)
  * @param bit_value
  *   Control if the bit should be set or cleared.
  */
-__rte_experimental
 static inline void
 rte_bitset_assign(uint64_t *bitset, size_t bit_num, bool bit_value)
 {
@@ -327,9 +292,6 @@ rte_bitset_assign(uint64_t *bitset, size_t bit_num, bool bit_value)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Change the value of a bit in the bitset.
  *
  * Bits are numbered 0 to (size - 1) (inclusive).
@@ -341,7 +303,6 @@ rte_bitset_assign(uint64_t *bitset, size_t bit_num, bool bit_value)
  * @param bit_num
  *   The index of the bit to be flipped.
  */
-__rte_experimental
 static inline void
 rte_bitset_flip(uint64_t *bitset, size_t bit_num)
 {
@@ -349,9 +310,6 @@ rte_bitset_flip(uint64_t *bitset, size_t bit_num)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Atomically test if a bit is set.
  *
  * Atomically test if a bit in a bitset is set with the specified
@@ -366,7 +324,6 @@ rte_bitset_flip(uint64_t *bitset, size_t bit_num)
  * @return
  *   Returns true if the bit is '1', and false if the bit is '0'.
  */
-__rte_experimental
 static inline bool
 rte_bitset_atomic_test(const uint64_t *bitset, size_t bit_num, int memory_order)
 {
@@ -374,9 +331,6 @@ rte_bitset_atomic_test(const uint64_t *bitset, size_t bit_num, int memory_order)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Atomically set a bit in the bitset.
  *
  * Set a bit in a bitset as an atomic operation, with the specified
@@ -395,7 +349,6 @@ rte_bitset_atomic_test(const uint64_t *bitset, size_t bit_num, int memory_order)
  * @param memory_order
  *   The memory order to use.
  */
-__rte_experimental
 static inline void
 rte_bitset_atomic_set(uint64_t *bitset, size_t bit_num, int memory_order)
 {
@@ -403,9 +356,6 @@ rte_bitset_atomic_set(uint64_t *bitset, size_t bit_num, int memory_order)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Atomically clear a bit in the bitset.
  *
  * Clear a bit in a bitset as an atomic operation, with the specified
@@ -424,7 +374,6 @@ rte_bitset_atomic_set(uint64_t *bitset, size_t bit_num, int memory_order)
  * @param memory_order
  *   The memory order to use.
  */
-__rte_experimental
 static inline void
 rte_bitset_atomic_clear(uint64_t *bitset, size_t bit_num, int memory_order)
 {
@@ -432,9 +381,6 @@ rte_bitset_atomic_clear(uint64_t *bitset, size_t bit_num, int memory_order)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Atomically set or clear a bit in the bitset.
  *
  * Assign a value to a bit in a bitset as an atomic operation, with
@@ -455,7 +401,6 @@ rte_bitset_atomic_clear(uint64_t *bitset, size_t bit_num, int memory_order)
  * @param memory_order
  *   The memory order to use.
  */
-__rte_experimental
 static inline void
 rte_bitset_atomic_assign(uint64_t *bitset, size_t bit_num, bool bit_value, int memory_order)
 {
@@ -463,9 +408,6 @@ rte_bitset_atomic_assign(uint64_t *bitset, size_t bit_num, bool bit_value, int m
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Atomically change the value of a bit in the bitset.
  *
  * Flip a bit in a bitset as an atomic operation, with the specified
@@ -484,7 +426,6 @@ rte_bitset_atomic_assign(uint64_t *bitset, size_t bit_num, bool bit_value, int m
  * @param memory_order
  *   The memory order to use.
  */
-__rte_experimental
 static inline void
 rte_bitset_atomic_flip(uint64_t *bitset, size_t bit_num, int memory_order)
 {
@@ -492,9 +433,6 @@ rte_bitset_atomic_flip(uint64_t *bitset, size_t bit_num, int memory_order)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Set all bits in the bitset.
  *
  * @param bitset
@@ -502,7 +440,6 @@ rte_bitset_atomic_flip(uint64_t *bitset, size_t bit_num, int memory_order)
  * @param size
  *   The size of the bitset (in bits).
  */
-__rte_experimental
 static inline void
 rte_bitset_set_all(uint64_t *bitset, size_t size)
 {
@@ -510,9 +447,6 @@ rte_bitset_set_all(uint64_t *bitset, size_t size)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Clear all bits in the bitset.
  *
  * @param bitset
@@ -520,7 +454,6 @@ rte_bitset_set_all(uint64_t *bitset, size_t size)
  * @param size
  *   The size of the bitset (in bits).
  */
-__rte_experimental
 static inline void
 rte_bitset_clear_all(uint64_t *bitset, size_t size)
 {
@@ -528,9 +461,6 @@ rte_bitset_clear_all(uint64_t *bitset, size_t size)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Count all set bits (also known as the @e weight).
  *
  * @param bitset
@@ -540,7 +470,6 @@ rte_bitset_clear_all(uint64_t *bitset, size_t size)
  * @return
  *   Returns the number of '1' bits in the bitset.
  */
-__rte_experimental
 static inline size_t
 rte_bitset_count_set(const uint64_t *bitset, size_t size)
 {
@@ -560,9 +489,6 @@ rte_bitset_count_set(const uint64_t *bitset, size_t size)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Count all cleared bits.
  *
  * @param bitset
@@ -572,7 +498,6 @@ rte_bitset_count_set(const uint64_t *bitset, size_t size)
  * @return
  *   Returns the number of '0' bits in the bitset.
  */
-__rte_experimental
 static inline size_t
 rte_bitset_count_clear(const uint64_t *bitset, size_t size)
 {
@@ -582,7 +507,6 @@ rte_bitset_count_clear(const uint64_t *bitset, size_t size)
 #define __RTE_BITSET_FIND_FLAG_FIND_CLEAR (1U << 0)
 #define __RTE_BITSET_FIND_FLAG_WRAP (1U << 1)
 
-__rte_experimental
 static inline ssize_t
 __rte_bitset_find_nowrap(const uint64_t *bitset, size_t __rte_unused size, size_t start_bit,
 		size_t len, bool find_clear)
@@ -630,7 +554,6 @@ __rte_bitset_find_nowrap(const uint64_t *bitset, size_t __rte_unused size, size_
 
 }
 
-__rte_experimental
 static inline ssize_t
 __rte_bitset_find(const uint64_t *bitset, size_t size, size_t start_bit, size_t len,
 		unsigned int flags)
@@ -658,9 +581,6 @@ __rte_bitset_find(const uint64_t *bitset, size_t size, size_t start_bit, size_t
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Find first bit set.
  *
  * Scans the bitset in the forward direction (i.e., starting at the
@@ -674,7 +594,6 @@ __rte_bitset_find(const uint64_t *bitset, size_t size, size_t start_bit, size_t
  *   Returns the index of the least significant '1', or -1 if all
  *   bits are '0'.
  */
-__rte_experimental
 static inline ssize_t
 rte_bitset_find_first_set(const uint64_t *bitset, size_t size)
 {
@@ -682,9 +601,6 @@ rte_bitset_find_first_set(const uint64_t *bitset, size_t size)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Find first bit set at offset.
  *
  * Scans the bitset in the forward direction (i.e., starting at the
@@ -704,7 +620,6 @@ rte_bitset_find_first_set(const uint64_t *bitset, size_t size)
  *   Returns the index of the least significant '1', or -1 if all
  *   bits are '0'.
  */
-__rte_experimental
 static inline ssize_t
 rte_bitset_find_set(const uint64_t *bitset, size_t size, size_t start_bit, size_t len)
 {
@@ -712,9 +627,6 @@ rte_bitset_find_set(const uint64_t *bitset, size_t size, size_t start_bit, size_
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Find first bit set at offset, with wrap-around.
  *
  * Scans the bitset in the forward direction (i.e., starting at the
@@ -735,7 +647,6 @@ rte_bitset_find_set(const uint64_t *bitset, size_t size, size_t start_bit, size_
  *   Returns the index of the least significant '1', or -1 if all
  *   bits are '0'.
  */
-__rte_experimental
 static inline ssize_t
 rte_bitset_find_set_wrap(const uint64_t *bitset, size_t size, size_t start_bit, size_t len)
 {
@@ -743,9 +654,6 @@ rte_bitset_find_set_wrap(const uint64_t *bitset, size_t size, size_t start_bit,
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Find first cleared bit.
  *
  * Scans the bitset in the forward direction (i.e., starting at the
@@ -759,7 +667,6 @@ rte_bitset_find_set_wrap(const uint64_t *bitset, size_t size, size_t start_bit,
  *   Returns the index of the least significant '0', or -1 if all
  *   bits are '1'.
  */
-__rte_experimental
 static inline ssize_t
 rte_bitset_find_first_clear(const uint64_t *bitset, size_t size)
 {
@@ -767,9 +674,6 @@ rte_bitset_find_first_clear(const uint64_t *bitset, size_t size)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Find first cleared bit at offset.
  *
  * Scans the bitset in the forward direction (i.e., starting at the
@@ -789,7 +693,6 @@ rte_bitset_find_first_clear(const uint64_t *bitset, size_t size)
  *   Returns the index of the least significant '0', or -1 if all
  *   bits are '1'.
  */
-__rte_experimental
 static inline ssize_t
 rte_bitset_find_clear(const uint64_t *bitset, size_t size, size_t start_bit, size_t len)
 {
@@ -797,9 +700,6 @@ rte_bitset_find_clear(const uint64_t *bitset, size_t size, size_t start_bit, siz
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Find first cleared bit at offset, with wrap-around.
  *
  * Scans the bitset in the forward direction (i.e., starting at the
@@ -820,7 +720,6 @@ rte_bitset_find_clear(const uint64_t *bitset, size_t size, size_t start_bit, siz
  *   Returns the index of the least significant '0', or -1 if all
  *   bits are '1'.
  */
-__rte_experimental
 static inline ssize_t
 rte_bitset_find_clear_wrap(const uint64_t *bitset, size_t size, size_t start_bit, size_t len)
 {
@@ -829,9 +728,6 @@ rte_bitset_find_clear_wrap(const uint64_t *bitset, size_t size, size_t start_bit
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Copy bitset.
  *
  * Copy the bits of the @c src_bitset to the @c dst_bitset.
@@ -845,7 +741,6 @@ rte_bitset_find_clear_wrap(const uint64_t *bitset, size_t size, size_t start_bit
  * @param size
  *   The size of the bitsets (in bits).
  */
-__rte_experimental
 static inline void
 rte_bitset_copy(uint64_t *__rte_restrict dst_bitset, const uint64_t *__rte_restrict src_bitset,
 		size_t size)
@@ -854,9 +749,6 @@ rte_bitset_copy(uint64_t *__rte_restrict dst_bitset, const uint64_t *__rte_restr
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Bitwise or two bitsets.
  *
  * Perform a bitwise OR operation on all bits in the two equal-size
@@ -872,7 +764,6 @@ rte_bitset_copy(uint64_t *__rte_restrict dst_bitset, const uint64_t *__rte_restr
  * @param size
  *   The size of the bitsets (in bits).
  */
-__rte_experimental
 static inline void
 rte_bitset_or(uint64_t *dst_bitset, const uint64_t *src_bitset0, const uint64_t *src_bitset1,
 		size_t size)
@@ -884,9 +775,6 @@ rte_bitset_or(uint64_t *dst_bitset, const uint64_t *src_bitset0, const uint64_t
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Bitwise and two bitsets.
  *
  * Perform a bitwise AND operation on all bits in the two equal-size
@@ -902,7 +790,6 @@ rte_bitset_or(uint64_t *dst_bitset, const uint64_t *src_bitset0, const uint64_t
  * @param size
  *   The size of the bitsets (in bits).
  */
-__rte_experimental
 static inline void
 rte_bitset_and(uint64_t *dst_bitset, const uint64_t *src_bitset0, const uint64_t *src_bitset1,
 		size_t size)
@@ -914,9 +801,6 @@ rte_bitset_and(uint64_t *dst_bitset, const uint64_t *src_bitset0, const uint64_t
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Bitwise xor two bitsets.
  *
  * Perform a bitwise XOR operation on all bits in the two equal-size
@@ -932,7 +816,6 @@ rte_bitset_and(uint64_t *dst_bitset, const uint64_t *src_bitset0, const uint64_t
  * @param size
  *   The size of the bitsets (in bits).
  */
-__rte_experimental
 static inline void
 rte_bitset_xor(uint64_t *dst_bitset, const uint64_t *src_bitset0, const uint64_t *src_bitset1,
 		size_t size)
@@ -944,9 +827,6 @@ rte_bitset_xor(uint64_t *dst_bitset, const uint64_t *src_bitset0, const uint64_t
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Compute the bitwise complement of a bitset.
  *
  * Flip every bit in the @c src_bitset, and store the result in @c
@@ -959,7 +839,6 @@ rte_bitset_xor(uint64_t *dst_bitset, const uint64_t *src_bitset0, const uint64_t
  * @param size
  *   The size of the bitsets (in bits).
  */
-__rte_experimental
 static inline void
 rte_bitset_complement(uint64_t *dst_bitset, const uint64_t *src_bitset, size_t size)
 {
@@ -970,9 +849,6 @@ rte_bitset_complement(uint64_t *dst_bitset, const uint64_t *src_bitset, size_t s
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Shift bitset left.
  *
  * Perform a logical shift left of (multiply) @c src_bitset, and store
@@ -987,7 +863,6 @@ rte_bitset_complement(uint64_t *dst_bitset, const uint64_t *src_bitset, size_t s
  * @param shift_bits
  *   The number of bits to shift the bitset.
  */
-__rte_experimental
 static inline void
 rte_bitset_shift_left(uint64_t *dst_bitset, const uint64_t *src_bitset, size_t size,
 		size_t shift_bits)
@@ -1015,9 +890,6 @@ rte_bitset_shift_left(uint64_t *dst_bitset, const uint64_t *src_bitset, size_t s
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Shift bitset right.
  *
  * Perform a logical shift right of (divide) @c src_bitset, and store
@@ -1032,7 +904,6 @@ rte_bitset_shift_left(uint64_t *dst_bitset, const uint64_t *src_bitset, size_t s
  * @param shift_bits
  *   The number of bits to shift the bitset.
  */
-__rte_experimental
 static inline void
 rte_bitset_shift_right(uint64_t *dst_bitset, const uint64_t *src_bitset, size_t size,
 		size_t shift_bits)
@@ -1071,9 +942,6 @@ rte_bitset_shift_right(uint64_t *dst_bitset, const uint64_t *src_bitset, size_t
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Compare two bitsets.
  *
  * Compare two bitsets for equality.
@@ -1085,7 +953,6 @@ rte_bitset_shift_right(uint64_t *dst_bitset, const uint64_t *src_bitset, size_t
  * @param size
  *   The size of the bitsets (in bits).
  */
-__rte_experimental
 static inline bool
 rte_bitset_equal(const uint64_t *bitset_a, const uint64_t *bitset_b, size_t size)
 {
@@ -1103,9 +970,6 @@ rte_bitset_equal(const uint64_t *bitset_a, const uint64_t *bitset_b, size_t size
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Converts a bitset to a string.
  *
  * This function prints a string representation of the bitstring to
@@ -1127,7 +991,6 @@ rte_bitset_equal(const uint64_t *bitset_a, const uint64_t *bitset_b, size_t size
  *   Returns the number of bytes written (i.e., @c size + 1), or -EINVAL
  *   in case the buffer capacity was too small.
  */
-__rte_experimental
 ssize_t
 rte_bitset_to_str(const uint64_t *bitset, size_t size, char *buf, size_t capacity);
 
-- 
2.43.0


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-05-18  8:17 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-18  8:05 [PATCH 1/3] bitops: promote bit manipulation API to stable Mattias Rönnblom
2025-05-18  8:05 ` [PATCH 2/3] bitset: remove experimental bitops workaround Mattias Rönnblom
2025-05-18  8:05 ` [PATCH 3/3] bitset: promote API stable Mattias Rönnblom

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).