xref: /dpdk/drivers/net/mlx5/linux/mlx5_flow_os.c (revision 5d55a494f4e62f29d945cf6c9ec1d0980a72642f)
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