1*4418919fSjohnjiang /* SPDX-License-Identifier: BSD-3-Clause
2*4418919fSjohnjiang  * Copyright(c) 2019 Intel Corporation
3*4418919fSjohnjiang  */
4*4418919fSjohnjiang 
5*4418919fSjohnjiang #include "rte_stack.h"
6*4418919fSjohnjiang 
7*4418919fSjohnjiang void
rte_stack_lf_init(struct rte_stack * s,unsigned int count)8*4418919fSjohnjiang rte_stack_lf_init(struct rte_stack *s, unsigned int count)
9*4418919fSjohnjiang {
10*4418919fSjohnjiang 	struct rte_stack_lf_elem *elems = s->stack_lf.elems;
11*4418919fSjohnjiang 	unsigned int i;
12*4418919fSjohnjiang 
13*4418919fSjohnjiang 	for (i = 0; i < count; i++)
14*4418919fSjohnjiang 		__rte_stack_lf_push_elems(&s->stack_lf.free,
15*4418919fSjohnjiang 					  &elems[i], &elems[i], 1);
16*4418919fSjohnjiang }
17*4418919fSjohnjiang 
18*4418919fSjohnjiang ssize_t
rte_stack_lf_get_memsize(unsigned int count)19*4418919fSjohnjiang rte_stack_lf_get_memsize(unsigned int count)
20*4418919fSjohnjiang {
21*4418919fSjohnjiang 	ssize_t sz = sizeof(struct rte_stack);
22*4418919fSjohnjiang 
23*4418919fSjohnjiang 	sz += RTE_CACHE_LINE_ROUNDUP(count * sizeof(struct rte_stack_lf_elem));
24*4418919fSjohnjiang 
25*4418919fSjohnjiang 	/* Add padding to avoid false sharing conflicts caused by
26*4418919fSjohnjiang 	 * next-line hardware prefetchers.
27*4418919fSjohnjiang 	 */
28*4418919fSjohnjiang 	sz += 2 * RTE_CACHE_LINE_SIZE;
29*4418919fSjohnjiang 
30*4418919fSjohnjiang 	return sz;
31*4418919fSjohnjiang }
32