1 /******************************************************************************/ 2 #ifdef JEMALLOC_H_TYPES 3 4 typedef struct spin_s spin_t; 5 6 #endif /* JEMALLOC_H_TYPES */ 7 /******************************************************************************/ 8 #ifdef JEMALLOC_H_STRUCTS 9 10 struct spin_s { 11 unsigned iteration; 12 }; 13 14 #endif /* JEMALLOC_H_STRUCTS */ 15 /******************************************************************************/ 16 #ifdef JEMALLOC_H_EXTERNS 17 18 #endif /* JEMALLOC_H_EXTERNS */ 19 /******************************************************************************/ 20 #ifdef JEMALLOC_H_INLINES 21 22 #ifndef JEMALLOC_ENABLE_INLINE 23 void spin_init(spin_t *spin); 24 void spin_adaptive(spin_t *spin); 25 #endif 26 27 #if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_SPIN_C_)) 28 JEMALLOC_INLINE void spin_init(spin_t * spin)29spin_init(spin_t *spin) 30 { 31 32 spin->iteration = 0; 33 } 34 35 JEMALLOC_INLINE void spin_adaptive(spin_t * spin)36spin_adaptive(spin_t *spin) 37 { 38 volatile uint64_t i; 39 40 for (i = 0; i < (KQU(1) << spin->iteration); i++) 41 CPU_SPINWAIT; 42 43 if (spin->iteration < 63) 44 spin->iteration++; 45 } 46 47 #endif 48 49 #endif /* JEMALLOC_H_INLINES */ 50 /******************************************************************************/ 51 52