@@ -200,9 +200,11 @@ int odpdrv_shm_info(odpdrv_shm_t shm, odpdrv_shm_info_t *info);
/**
* Print all shared memory blocks and returns the number of allocated blocks.
+ * Also gives the status of the odpdrv_shm_sreserve() pool allocator.
* This function is meant for debug.
* @param title A string to be printed before the shared memory status
- * @return The total number of allocated blocks
+ * @return The total number of allocated blocks (allocated with
+ * odpdrv_shm_reserve()).
*/
int odpdrv_shm_print_all(const char *title);
@@ -220,6 +222,43 @@ int odpdrv_shm_print_all(const char *title);
uint64_t odpdrv_shm_to_u64(odpdrv_shm_t hdl);
/**
+ * Reserve a small contiguous block of shared memory
+ * odpdrv_shm_sreserve() is meant to reserve small amount of memory from
+ * a preallocated pool. The size of this pool is limited, so
+ * odpdrv_shm_sreserve() should be used for small allocations (e.g. less than
+ * a 1/2 page size).
+ * While odpdrv_shm_reserve() granularity is large (likely the page size),
+ * odpdrv_shm_sreserve() has a much smaller granularity, making it ideal for
+ * small allocations such as those done to populate a linked list.
+ * Addresses returned by odpdrv_shm_sreserve() are sharable between all ODP
+ * threads. Buffer allocated through odpdrv_shm_sreserve() are enonymous and
+ * can therefore not by looked up by name. Neither can they be exported
+ * to other ODP instances.
+ * Buffers allocated with this function should be release with
+ * odpdrv_shm_sfree().
+ *
+ * @param[in] size Block size in bytes
+ *
+ * @return The address of the reserved block.
+ * @retval NULL on failure
+ */
+void *odpdrv_shm_sreserve(uint64_t size);
+
+/**
+ * Free a contiguous block of shared memory previously allocated with
+ * odpdrv_shm_reserve()
+ *
+ * Frees a previously reserved block of shared memory.
+ * @note Freeing memory that is in use will result in UNDEFINED behavior
+ *
+ * @param[in] addr address (as returned by odpdrv_shm_sreserve()).
+ *
+ * @retval 0 on success
+ * @retval <0 on failure
+ */
+int odpdrv_shm_sfree(void *addr);
+
+/**
* @}
*/
The two functions are meant to be used fo small amount of memory allocation. They are quicker, lighter and have a smaller granularity than the odpdrv_shm_reserve() / odpdrv_shm_free_*() sets of function, but also lacks some of their functionality (lookup, export, flags). Signed-off-by: Christophe Milard <christophe.milard@linaro.org> --- include/odp/drv/spec/shm.h | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) -- 2.7.4