1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2019 Intel Corporation 3 */ 4 5 #ifndef _SCHED_H_ 6 #define _SCHED_H_ 7 8 /** 9 * This file is added to support the common code in eal_common_thread.c 10 * as Microsoft libc does not contain sched.h. This may be removed 11 * in future releases. 12 */ 13 #ifdef __cplusplus 14 extern "C" { 15 #endif 16 17 #ifndef CPU_SETSIZE 18 #define CPU_SETSIZE RTE_MAX_LCORE 19 #endif 20 21 #define _BITS_PER_SET (sizeof(long long) * 8) 22 #define _BIT_SET_MASK (_BITS_PER_SET - 1) 23 24 #define _NUM_SETS(b) (((b) + _BIT_SET_MASK) / _BITS_PER_SET) 25 #define _WHICH_SET(b) ((b) / _BITS_PER_SET) 26 #define _WHICH_BIT(b) ((b) & (_BITS_PER_SET - 1)) 27 28 typedef struct _rte_cpuset_s { 29 long long _bits[_NUM_SETS(CPU_SETSIZE)]; 30 } rte_cpuset_t; 31 32 #define CPU_SET(b, s) ((s)->_bits[_WHICH_SET(b)] |= (1LL << _WHICH_BIT(b))) 33 34 #define CPU_ZERO(s) \ 35 do { \ 36 unsigned int _i; \ 37 \ 38 for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \ 39 (s)->_bits[_i] = 0LL; \ 40 } while (0) 41 42 #define CPU_ISSET(b, s) (((s)->_bits[_WHICH_SET(b)] & \ 43 (1LL << _WHICH_BIT(b))) != 0LL) 44 45 static inline int count_cpu(rte_cpuset_t * s)46count_cpu(rte_cpuset_t *s) 47 { 48 unsigned int _i; 49 int count = 0; 50 51 for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) 52 if (CPU_ISSET(_i, s) != 0LL) 53 count++; 54 return count; 55 } 56 #define CPU_COUNT(s) count_cpu(s) 57 58 #define CPU_AND(dst, src1, src2) \ 59 do { \ 60 unsigned int _i; \ 61 \ 62 for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \ 63 (dst)->_bits[_i] = (src1)->_bits[_i] & (src2)->_bits[_i]; \ 64 } while (0) 65 66 #define CPU_OR(dst, src1, src2) \ 67 do { \ 68 unsigned int _i; \ 69 \ 70 for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \ 71 (dst)->_bits[_i] = (src1)->_bits[_i] | (src2)->_bits[_i]; \ 72 } while (0) 73 74 #define CPU_FILL(s) \ 75 do { \ 76 unsigned int _i; \ 77 for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \ 78 (s)->_bits[_i] = -1LL; \ 79 } while (0) 80 81 #define CPU_NOT(dst, src) \ 82 do { \ 83 unsigned int _i; \ 84 for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \ 85 (dst)->_bits[_i] = (src)->_bits[_i] ^ -1LL; \ 86 } while (0) 87 88 #ifdef __cplusplus 89 } 90 #endif 91 92 #endif /* _SCHED_H_ */ 93