Changeset 6a490b2 for libcfa/src/concurrency/kernel_private.hfa
- Timestamp:
- May 11, 2020, 1:53:29 PM (4 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 504a7dc
- Parents:
- b7d6a36 (diff), a7b486b (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/kernel_private.hfa
rb7d6a36 r6a490b2 31 31 } 32 32 33 void ScheduleThread( thread_desc * ); 34 static inline void WakeThread( thread_desc * thrd ) { 35 if( !thrd ) return; 36 37 verify(thrd->state == Inactive); 38 39 disable_interrupts(); 40 ScheduleThread( thrd ); 41 enable_interrupts( __cfaabi_dbg_ctx ); 42 } 43 thread_desc * nextThread(cluster * this); 33 void __schedule_thread( $thread * ) __attribute__((nonnull (1))); 44 34 45 35 //Block current thread and release/wake-up the following resources 46 void BlockInternal(void); 47 void BlockInternal(__spinlock_t * lock); 48 void BlockInternal(thread_desc * thrd); 49 void BlockInternal(__spinlock_t * lock, thread_desc * thrd); 50 void BlockInternal(__spinlock_t * locks [], unsigned short count); 51 void BlockInternal(__spinlock_t * locks [], unsigned short count, thread_desc * thrds [], unsigned short thrd_count); 52 void BlockInternal(__finish_callback_fptr_t callback); 53 void LeaveThread(__spinlock_t * lock, thread_desc * thrd); 36 void __leave_thread() __attribute__((noreturn)); 54 37 55 38 //----------------------------------------------------------------------------- … … 57 40 void main(processorCtx_t *); 58 41 59 void * create_pthread( pthread_t *, void * (*)(void *), void * ); 60 61 static inline void wake_fast(processor * this) { 62 __cfaabi_dbg_print_safe("Kernel : Waking up processor %p\n", this); 63 post( this->idleLock ); 64 } 65 66 static inline void wake(processor * this) { 67 disable_interrupts(); 68 wake_fast(this); 69 enable_interrupts( __cfaabi_dbg_ctx ); 70 } 42 void * __create_pthread( pthread_t *, void * (*)(void *), void * ); 43 44 71 45 72 46 struct event_kernel_t { … … 85 59 extern volatile thread_local __cfa_kernel_preemption_state_t preemption_state __attribute__ ((tls_model ( "initial-exec" ))); 86 60 61 extern cluster * mainCluster; 62 87 63 //----------------------------------------------------------------------------- 88 64 // Threads 89 65 extern "C" { 90 void CtxInvokeThread(void (*main)(void *), void * this); 91 } 92 93 extern void ThreadCtxSwitch(coroutine_desc * src, coroutine_desc * dst); 66 void __cfactx_invoke_thread(void (*main)(void *), void * this); 67 } 94 68 95 69 __cfaabi_dbg_debug_do( 96 extern void __cfaabi_dbg_thread_register ( thread_desc* thrd );97 extern void __cfaabi_dbg_thread_unregister( thread_desc* thrd );70 extern void __cfaabi_dbg_thread_register ( $thread * thrd ); 71 extern void __cfaabi_dbg_thread_unregister( $thread * thrd ); 98 72 ) 73 74 // KERNEL ONLY unpark with out disabling interrupts 75 void __unpark( $thread * thrd __cfaabi_dbg_ctx_param2 ); 76 77 //----------------------------------------------------------------------------- 78 // I/O 79 void __kernel_io_startup ( cluster &, int, bool ); 80 void __kernel_io_finish_start( cluster & ); 81 void __kernel_io_prepare_stop( cluster & ); 82 void __kernel_io_shutdown ( cluster &, bool ); 99 83 100 84 //----------------------------------------------------------------------------- … … 102 86 #define KERNEL_STORAGE(T,X) __attribute((aligned(__alignof__(T)))) static char storage_##X[sizeof(T)] 103 87 104 static inline uint32_t tls_rand() {88 static inline uint32_t __tls_rand() { 105 89 kernelTLS.rand_seed ^= kernelTLS.rand_seed << 6; 106 90 kernelTLS.rand_seed ^= kernelTLS.rand_seed >> 21; … … 113 97 void unregister( struct cluster & cltr ); 114 98 115 void doregister( struct cluster * cltr, struct thread_desc& thrd );116 void unregister( struct cluster * cltr, struct thread_desc& thrd );99 void doregister( struct cluster * cltr, struct $thread & thrd ); 100 void unregister( struct cluster * cltr, struct $thread & thrd ); 117 101 118 102 //=======================================================================
Note: See TracChangeset
for help on using the changeset viewer.