Changeset 7d0ebd0
- Timestamp:
- Jan 7, 2022, 1:20:50 PM (3 years ago)
- Branches:
- ADT, ast-experimental, enum, forall-pointer-decay, master, pthread-emulation, qualifiedEnum
- Children:
- 4233338b, a39a289, ae7adbc4
- Parents:
- 6fafda8
- Location:
- libcfa/src/concurrency
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/kernel.cfa
r6fafda8 r7d0ebd0 142 142 extern void __disable_interrupts_hard(); 143 143 extern void __enable_interrupts_hard(); 144 145 static inline void __disable_interrupts_checked() {146 /* paranoid */ verify( __preemption_enabled() );147 disable_interrupts();148 /* paranoid */ verify( ! __preemption_enabled() );149 }150 151 static inline void __enable_interrupts_checked( bool poll = true ) {152 /* paranoid */ verify( ! __preemption_enabled() );153 enable_interrupts( poll );154 /* paranoid */ verify( __preemption_enabled() );155 }156 144 157 145 … … 776 764 // Unconditionnaly wake a thread 777 765 void __wake_proc(processor * this) { 766 /* paranoid */ verify( ! __preemption_enabled() ); 767 778 768 __cfadbg_print_safe(runtime_core, "Kernel : waking Processor %p\n", this); 779 769 780 __disable_interrupts_checked(); 781 /* paranoid */ verify( ! __preemption_enabled() ); 782 eventfd_t val; 783 val = 1; 784 eventfd_write( this->idle_fd, val ); 785 __enable_interrupts_checked(); 770 eventfd_t val; 771 val = 1; 772 eventfd_write( this->idle_fd, val ); 773 774 /* paranoid */ verify( ! __preemption_enabled() ); 786 775 } 787 776 -
libcfa/src/concurrency/kernel/startup.cfa
r6fafda8 r7d0ebd0 279 279 // When its coroutine terminates, it return control to the mainThread 280 280 // which is currently here 281 /* paranoid */ verify( !__atomic_load_n(&mainProcessor->do_terminate, __ATOMIC_ACQUIRE) ); 281 282 __atomic_store_n(&mainProcessor->do_terminate, true, __ATOMIC_RELEASE); 283 __wake_proc( mainProcessor ); 282 284 __kernel_last_resume( __cfaabi_tls.this_processor ); 283 285 mainThread->self_cor.state = Halted; … … 564 566 extern size_t __page_size; 565 567 void ^?{}(processor & this) with( this ){ 566 if( ! __atomic_load_n(&do_terminate, __ATOMIC_ACQUIRE) ) { 567 __cfadbg_print_safe(runtime_core, "Kernel : core %p signaling termination\n", &this); 568 569 __atomic_store_n(&do_terminate, true, __ATOMIC_RELAXED); 568 /* paranoid */ verify( !__atomic_load_n(&do_terminate, __ATOMIC_ACQUIRE) ); 569 __cfadbg_print_safe(runtime_core, "Kernel : core %p signaling termination\n", &this); 570 571 __atomic_store_n(&do_terminate, true, __ATOMIC_RELAXED); 572 __disable_interrupts_checked(); 570 573 __wake_proc( &this ); 571 572 wait( terminated ); 573 /* paranoid */ verify( active_processor() != &this);574 }574 __enable_interrupts_checked(); 575 576 wait( terminated ); 577 /* paranoid */ verify( active_processor() != &this); 575 578 576 579 __destroy_pthread( kernel_thread, this.stack, 0p ); -
libcfa/src/concurrency/kernel_private.hfa
r6fafda8 r7d0ebd0 60 60 extern bool __preemption_enabled(); 61 61 62 static inline void __disable_interrupts_checked() { 63 /* paranoid */ verify( __preemption_enabled() ); 64 disable_interrupts(); 65 /* paranoid */ verify( ! __preemption_enabled() ); 66 } 67 68 static inline void __enable_interrupts_checked( bool poll = true ) { 69 /* paranoid */ verify( ! __preemption_enabled() ); 70 enable_interrupts( poll ); 71 /* paranoid */ verify( __preemption_enabled() ); 72 } 73 62 74 //release/wake-up the following resources 63 75 void __thread_finish( thread$ * thrd );
Note: See TracChangeset
for help on using the changeset viewer.