- File:
-
- 1 edited
-
src/libcfa/concurrency/kernel_private.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/concurrency/kernel_private.h
r4aa2fb2 r1c273d0 27 27 //----------------------------------------------------------------------------- 28 28 // Scheduler 29 30 extern "C" { 31 void disable_interrupts(); 32 void enable_interrupts_noRF(); 33 void enable_interrupts( const char * ); 34 } 35 29 36 void ScheduleThread( thread_desc * ); 37 static inline void WakeThread( thread_desc * thrd ) { 38 if( !thrd ) return; 39 40 disable_interrupts(); 41 ScheduleThread( thrd ); 42 enable_interrupts( __PRETTY_FUNCTION__ ); 43 } 30 44 thread_desc * nextThread(cluster * this); 31 45 32 void ScheduleInternal(void);33 void ScheduleInternal(spinlock * lock);34 void ScheduleInternal(thread_desc * thrd);35 void ScheduleInternal(spinlock * lock, thread_desc * thrd);36 void ScheduleInternal(spinlock ** locks, unsigned short count);37 void ScheduleInternal(spinlock ** locks, unsigned short count, thread_desc ** thrds, unsigned short thrd_count);46 void BlockInternal(void); 47 void BlockInternal(spinlock * lock); 48 void BlockInternal(thread_desc * thrd); 49 void BlockInternal(spinlock * lock, thread_desc * thrd); 50 void BlockInternal(spinlock ** locks, unsigned short count); 51 void BlockInternal(spinlock ** locks, unsigned short count, thread_desc ** thrds, unsigned short thrd_count); 38 52 39 53 //----------------------------------------------------------------------------- … … 60 74 extern cluster * systemCluster; 61 75 extern system_proc_t * systemProcessor; 62 extern thread_local processor * this_processor; 63 64 static inline void disable_interrupts() { 65 __attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, 1, __ATOMIC_SEQ_CST ); 66 assert( prev != (unsigned short) -1 ); 67 } 68 69 static inline void enable_interrupts_noRF() { 70 __attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, -1, __ATOMIC_SEQ_CST ); 71 verify( prev != (unsigned short) 0 ); 72 } 73 74 static inline void enable_interrupts() { 75 __attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, -1, __ATOMIC_SEQ_CST ); 76 verify( prev != (unsigned short) 0 ); 77 if( prev == 1 && this_processor->pending_preemption ) { 78 ScheduleInternal( this_processor->current_thread ); 79 this_processor->pending_preemption = false; 80 } 81 } 76 extern volatile thread_local processor * this_processor; 77 extern volatile thread_local coroutine_desc * this_coroutine; 78 extern volatile thread_local thread_desc * this_thread; 79 extern volatile thread_local unsigned short disable_preempt_count; 82 80 83 81 //-----------------------------------------------------------------------------
Note:
See TracChangeset
for help on using the changeset viewer.