vppinfra: fix pool_free_elts

Type: fix
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I3425350f5e874df79716bd726900540629793beb
diff --git a/src/vppinfra/pool.h b/src/vppinfra/pool.h
index 3b5a900..9dd05a3 100644
--- a/src/vppinfra/pool.h
+++ b/src/vppinfra/pool.h
@@ -162,27 +162,26 @@
 /** Local variable naming macro. */
 #define _pool_var(v) _pool_##v
 
-/** Queries whether pool has at least N_FREE free elements. */
-always_inline uword
-pool_free_elts (void *v)
-{
-  pool_header_t *p = pool_header (v);
-  uword n_free = 0;
+/** Number of bytes that can fit into pool with current allocation */
+#define pool_capacity(P) vec_capacity (P, pool_aligned_header_bytes)
 
-  if (v)
-    {
-      n_free += vec_len (p->free_indices);
+/** Number of elements that can fit into pool with current allocation */
+#define pool_max_len(P) (pool_capacity (P) / sizeof (P[0]))
 
-      /*
-       * Space left at end of vector?
-       * Fixed-size pools have max_elts set non-zero,
-       */
-      if (p->max_elts == 0)
-	n_free += vec_capacity (v, sizeof (p[0])) - vec_len (v);
-    }
-
-  return n_free;
-}
+/** Number of free elements in pool */
+#define pool_free_elts(P)                                                     \
+  ({                                                                          \
+    pool_header_t *_pool_var (p) = pool_header (P);                           \
+    uword n_free = 0;                                                         \
+    if (P)                                                                    \
+      {                                                                       \
+	n_free += vec_len (_pool_var (p)->free_indices);                      \
+	/* Fixed-size pools have max_elts set non-zero */                     \
+	if (_pool_var (p)->max_elts == 0)                                     \
+	  n_free += pool_max_len (P) - vec_len (P);                           \
+      }                                                                       \
+    n_free;                                                                   \
+  })
 
 /** Allocate an object E from a pool P (general version).