199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause 299a2dd95SBruce Richardson * Copyright(c) 2019 Intel Corporation 399a2dd95SBruce Richardson */ 499a2dd95SBruce Richardson 599a2dd95SBruce Richardson #ifndef _SCHED_H_ 699a2dd95SBruce Richardson #define _SCHED_H_ 799a2dd95SBruce Richardson 899a2dd95SBruce Richardson /** 999a2dd95SBruce Richardson * This file is added to support the common code in eal_common_thread.c 1099a2dd95SBruce Richardson * as Microsoft libc does not contain sched.h. This may be removed 1199a2dd95SBruce Richardson * in future releases. 1299a2dd95SBruce Richardson */ 1399a2dd95SBruce Richardson #ifdef __cplusplus 1499a2dd95SBruce Richardson extern "C" { 1599a2dd95SBruce Richardson #endif 1699a2dd95SBruce Richardson 1799a2dd95SBruce Richardson #ifndef CPU_SETSIZE 1899a2dd95SBruce Richardson #define CPU_SETSIZE RTE_MAX_LCORE 1999a2dd95SBruce Richardson #endif 2099a2dd95SBruce Richardson 2199a2dd95SBruce Richardson #define _BITS_PER_SET (sizeof(long long) * 8) 2299a2dd95SBruce Richardson #define _BIT_SET_MASK (_BITS_PER_SET - 1) 2399a2dd95SBruce Richardson 2499a2dd95SBruce Richardson #define _NUM_SETS(b) (((b) + _BIT_SET_MASK) / _BITS_PER_SET) 2599a2dd95SBruce Richardson #define _WHICH_SET(b) ((b) / _BITS_PER_SET) 2699a2dd95SBruce Richardson #define _WHICH_BIT(b) ((b) & (_BITS_PER_SET - 1)) 2799a2dd95SBruce Richardson 2899a2dd95SBruce Richardson typedef struct _rte_cpuset_s { 2999a2dd95SBruce Richardson long long _bits[_NUM_SETS(CPU_SETSIZE)]; 3099a2dd95SBruce Richardson } rte_cpuset_t; 3199a2dd95SBruce Richardson #define RTE_HAS_CPUSET 3299a2dd95SBruce Richardson 3399a2dd95SBruce Richardson #define CPU_SET(b, s) ((s)->_bits[_WHICH_SET(b)] |= (1LL << _WHICH_BIT(b))) 3499a2dd95SBruce Richardson 3599a2dd95SBruce Richardson #define CPU_ZERO(s) \ 3699a2dd95SBruce Richardson do { \ 3799a2dd95SBruce Richardson unsigned int _i; \ 3899a2dd95SBruce Richardson \ 3999a2dd95SBruce Richardson for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \ 4099a2dd95SBruce Richardson (s)->_bits[_i] = 0LL; \ 4199a2dd95SBruce Richardson } while (0) 4299a2dd95SBruce Richardson 4399a2dd95SBruce Richardson #define CPU_ISSET(b, s) (((s)->_bits[_WHICH_SET(b)] & \ 4499a2dd95SBruce Richardson (1LL << _WHICH_BIT(b))) != 0LL) 4599a2dd95SBruce Richardson 4699a2dd95SBruce Richardson static inline int count_cpu(const rte_cpuset_t * s)47*ce6e911dSTyler Retzlaffcount_cpu(const rte_cpuset_t *s) 4899a2dd95SBruce Richardson { 4999a2dd95SBruce Richardson unsigned int _i; 5099a2dd95SBruce Richardson int count = 0; 5199a2dd95SBruce Richardson 52694c8172SNarcisa Vasile for (_i = 0; _i < CPU_SETSIZE; _i++) 5399a2dd95SBruce Richardson if (CPU_ISSET(_i, s) != 0LL) 5499a2dd95SBruce Richardson count++; 5599a2dd95SBruce Richardson return count; 5699a2dd95SBruce Richardson } 5799a2dd95SBruce Richardson #define CPU_COUNT(s) count_cpu(s) 5899a2dd95SBruce Richardson 5999a2dd95SBruce Richardson #define CPU_AND(dst, src1, src2) \ 6099a2dd95SBruce Richardson do { \ 6199a2dd95SBruce Richardson unsigned int _i; \ 6299a2dd95SBruce Richardson \ 6399a2dd95SBruce Richardson for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \ 6499a2dd95SBruce Richardson (dst)->_bits[_i] = (src1)->_bits[_i] & (src2)->_bits[_i]; \ 6599a2dd95SBruce Richardson } while (0) 6699a2dd95SBruce Richardson 6799a2dd95SBruce Richardson #define CPU_OR(dst, src1, src2) \ 6899a2dd95SBruce Richardson do { \ 6999a2dd95SBruce Richardson unsigned int _i; \ 7099a2dd95SBruce Richardson \ 7199a2dd95SBruce Richardson for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \ 7299a2dd95SBruce Richardson (dst)->_bits[_i] = (src1)->_bits[_i] | (src2)->_bits[_i]; \ 7399a2dd95SBruce Richardson } while (0) 7499a2dd95SBruce Richardson 7599a2dd95SBruce Richardson #define CPU_FILL(s) \ 7699a2dd95SBruce Richardson do { \ 7799a2dd95SBruce Richardson unsigned int _i; \ 7899a2dd95SBruce Richardson for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \ 7999a2dd95SBruce Richardson (s)->_bits[_i] = -1LL; \ 8099a2dd95SBruce Richardson } while (0) 8199a2dd95SBruce Richardson 8299a2dd95SBruce Richardson #define CPU_NOT(dst, src) \ 8399a2dd95SBruce Richardson do { \ 8499a2dd95SBruce Richardson unsigned int _i; \ 8599a2dd95SBruce Richardson for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \ 8699a2dd95SBruce Richardson (dst)->_bits[_i] = (src)->_bits[_i] ^ -1LL; \ 8799a2dd95SBruce Richardson } while (0) 8899a2dd95SBruce Richardson 8999a2dd95SBruce Richardson #ifdef __cplusplus 9099a2dd95SBruce Richardson } 9199a2dd95SBruce Richardson #endif 9299a2dd95SBruce Richardson 9399a2dd95SBruce Richardson #endif /* _SCHED_H_ */ 94