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*4418919fSjohnjiangrte_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*4418919fSjohnjiangrte_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