1*5d55a494STal Shnaiderman /* SPDX-License-Identifier: BSD-3-Clause 2*5d55a494STal Shnaiderman * Copyright 2020 Mellanox Technologies, Ltd 3*5d55a494STal Shnaiderman */ 4*5d55a494STal Shnaiderman 5*5d55a494STal Shnaiderman #include "mlx5_flow_os.h" 6*5d55a494STal Shnaiderman 7*5d55a494STal Shnaiderman #include <rte_thread.h> 8*5d55a494STal Shnaiderman 9*5d55a494STal Shnaiderman /* Key of thread specific flow workspace data. */ 10*5d55a494STal Shnaiderman static rte_tls_key key_workspace; 11*5d55a494STal Shnaiderman 12*5d55a494STal Shnaiderman int 13*5d55a494STal Shnaiderman mlx5_flow_os_init_workspace_once(void) 14*5d55a494STal Shnaiderman { 15*5d55a494STal Shnaiderman if (rte_thread_tls_key_create(&key_workspace, flow_release_workspace)) { 16*5d55a494STal Shnaiderman DRV_LOG(ERR, "Can't create flow workspace data thread key."); 17*5d55a494STal Shnaiderman return -ENOMEM; 18*5d55a494STal Shnaiderman } 19*5d55a494STal Shnaiderman return 0; 20*5d55a494STal Shnaiderman } 21*5d55a494STal Shnaiderman 22*5d55a494STal Shnaiderman void * 23*5d55a494STal Shnaiderman mlx5_flow_os_get_specific_workspace(void) 24*5d55a494STal Shnaiderman { 25*5d55a494STal Shnaiderman return rte_thread_tls_value_get(key_workspace); 26*5d55a494STal Shnaiderman } 27*5d55a494STal Shnaiderman 28*5d55a494STal Shnaiderman int 29*5d55a494STal Shnaiderman mlx5_flow_os_set_specific_workspace(struct mlx5_flow_workspace *data) 30*5d55a494STal Shnaiderman { 31*5d55a494STal Shnaiderman return rte_thread_tls_value_set(key_workspace, data); 32*5d55a494STal Shnaiderman } 33*5d55a494STal Shnaiderman 34*5d55a494STal Shnaiderman void 35*5d55a494STal Shnaiderman mlx5_flow_os_release_workspace(void) 36*5d55a494STal Shnaiderman { 37*5d55a494STal Shnaiderman rte_thread_tls_key_delete(key_workspace); 38*5d55a494STal Shnaiderman } 39