diff options
-rw-r--r-- | src/vppinfra/bitmap.h | 8 | ||||
-rw-r--r-- | src/vppinfra/pool.h | 19 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/vppinfra/bitmap.h b/src/vppinfra/bitmap.h index af651ef0b7e..3c95bfb4b43 100644 --- a/src/vppinfra/bitmap.h +++ b/src/vppinfra/bitmap.h @@ -206,6 +206,14 @@ clib_bitmap_set (uword * ai, uword i, uword value) return ai; } +always_inline u8 +clib_bitmap_will_expand (uword *ai, uword i) +{ + uword i0 = i / BITS (ai[0]); + return _vec_resize_will_expand (ai, 1, i0 * sizeof (ai[0]), 0, + sizeof (uword)); +} + /** Gets the ith bit value from a bitmap @param ai - pointer to the bitmap @param i - the bit position to interrogate diff --git a/src/vppinfra/pool.h b/src/vppinfra/pool.h index 68a859edc8f..3b5a9007f4f 100644 --- a/src/vppinfra/pool.h +++ b/src/vppinfra/pool.h @@ -287,6 +287,25 @@ do { \ } \ } while (0) +/** See if pool_put will expand free_bitmap or free_indices or not */ +#define pool_put_will_expand(P, E, YESNO) \ + do \ + { \ + pool_header_t *_pool_var (p) = pool_header (P); \ + \ + uword _pool_var (i) = (E) - (P); \ + /* free_bitmap or free_indices may expand. */ \ + YESNO = \ + clib_bitmap_will_expand (_pool_var (p)->free_bitmap, _pool_var (i)); \ + \ + YESNO += _vec_resize_will_expand ( \ + _pool_var (p)->free_indices, 1, \ + (vec_len (_pool_var (p)->free_indices) + 1) * \ + sizeof (_pool_var (p)->free_indices[0]), \ + 0, 0); \ + } \ + while (0) + /** Tell the caller if pool get will expand the pool */ #define pool_get_will_expand(P,YESNO) pool_get_aligned_will_expand(P,YESNO,0) |