Lines Matching full:element
25 static void poison_error(mempool_t *pool, void *element, size_t size, in poison_error() argument
33 pr_err("BUG: mempool element poison mismatch\n"); in poison_error()
35 pr_err(" nr=%d @ %p: %s0x", nr, element, start > 0 ? "... " : ""); in poison_error()
37 pr_cont("%x ", *(u8 *)(element + i)); in poison_error()
42 static void __check_element(mempool_t *pool, void *element, size_t size) in __check_element() argument
44 u8 *obj = element; in __check_element()
51 poison_error(pool, element, size, i); in __check_element()
58 static void check_element(mempool_t *pool, void *element) in check_element() argument
62 __check_element(pool, element, ksize(element)); in check_element()
66 void *addr = kmap_atomic((struct page *)element); in check_element()
73 static void __poison_element(void *element, size_t size) in __poison_element() argument
75 u8 *obj = element; in __poison_element()
81 static void poison_element(mempool_t *pool, void *element) in poison_element() argument
85 __poison_element(element, ksize(element)); in poison_element()
89 void *addr = kmap_atomic((struct page *)element); in poison_element()
96 static inline void check_element(mempool_t *pool, void *element) in check_element() argument
99 static inline void poison_element(mempool_t *pool, void *element) in poison_element() argument
104 static __always_inline void kasan_poison_element(mempool_t *pool, void *element) in kasan_poison_element() argument
107 kasan_slab_free_mempool(element); in kasan_poison_element()
109 kasan_poison_pages(element, (unsigned long)pool->pool_data, in kasan_poison_element()
113 static void kasan_unpoison_element(mempool_t *pool, void *element) in kasan_unpoison_element() argument
116 kasan_unpoison_range(element, __ksize(element)); in kasan_unpoison_element()
118 kasan_unpoison_pages(element, (unsigned long)pool->pool_data, in kasan_unpoison_element()
122 static __always_inline void add_element(mempool_t *pool, void *element) in add_element() argument
125 poison_element(pool, element); in add_element()
126 kasan_poison_element(pool, element); in add_element()
127 pool->elements[pool->curr_nr++] = element; in add_element()
132 void *element = pool->elements[--pool->curr_nr]; in remove_element() local
135 kasan_unpoison_element(pool, element); in remove_element()
136 check_element(pool, element); in remove_element()
137 return element; in remove_element()
154 void *element = remove_element(pool); in mempool_exit() local
155 pool->free(element, pool->pool_data); in mempool_exit()
200 void *element; in mempool_init_node() local
202 element = pool->alloc(gfp_mask, pool->pool_data); in mempool_init_node()
203 if (unlikely(!element)) { in mempool_init_node()
207 add_element(pool, element); in mempool_init_node()
219 * @alloc_fn: user-defined element-allocation function.
220 * @free_fn: user-defined element-freeing function.
241 * @alloc_fn: user-defined element-allocation function.
242 * @free_fn: user-defined element-freeing function.
301 void *element; in mempool_resize() local
311 element = remove_element(pool); in mempool_resize()
313 pool->free(element, pool->pool_data); in mempool_resize()
342 element = pool->alloc(GFP_KERNEL, pool->pool_data); in mempool_resize()
343 if (!element) in mempool_resize()
347 add_element(pool, element); in mempool_resize()
350 pool->free(element, pool->pool_data); /* Raced */ in mempool_resize()
362 * mempool_alloc - allocate an element from a specific memory pool
373 * Return: pointer to the allocated element or %NULL on error.
377 void *element; in mempool_alloc() local
393 element = pool->alloc(gfp_temp, pool->pool_data); in mempool_alloc()
394 if (likely(element != NULL)) in mempool_alloc()
395 return element; in mempool_alloc()
399 element = remove_element(pool); in mempool_alloc()
407 kmemleak_update_trace(element); in mempool_alloc()
408 return element; in mempool_alloc()
427 /* Let's wait for someone else to return an element to @pool */ in mempool_alloc()
445 * mempool_free - return an element to the pool.
446 * @element: pool element pointer.
452 void mempool_free(void *element, mempool_t *pool) in mempool_free() argument
456 if (unlikely(element == NULL)) in mempool_free()
461 * for @element and the following @pool->curr_nr. This ensures in mempool_free()
463 * allocation of @element. This is necessary for fringe cases in mempool_free()
464 * where @element was passed to this task without going through in mempool_free()
482 * allocation of @element, any task which decremented curr_nr below in mempool_free()
485 * to min_nr after the allocation of @element, the elements in mempool_free()
495 add_element(pool, element); in mempool_free()
502 pool->free(element, pool->pool_data); in mempool_free()
517 void mempool_free_slab(void *element, void *pool_data) in mempool_free_slab() argument
520 kmem_cache_free(mem, element); in mempool_free_slab()
535 void mempool_kfree(void *element, void *pool_data) in mempool_kfree() argument
537 kfree(element); in mempool_kfree()
552 void mempool_free_pages(void *element, void *pool_data) in mempool_free_pages() argument
555 __free_pages(element, order); in mempool_free_pages()