- File:
-
- 1 edited
-
libcfa/src/concurrency/kernel.cfa (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/kernel.cfa
rd3605f8 rae7adbc4 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 … … 749 737 750 738 // Check if there is a sleeping processor 751 int fd = __atomic_load_n(&this->procs.fd, __ATOMIC_SEQ_CST); 739 // int fd = __atomic_load_n(&this->procs.fd, __ATOMIC_SEQ_CST); 740 int fd = 0; 741 if( __atomic_load_n(&this->procs.fd, __ATOMIC_SEQ_CST) != 0 ) { 742 fd = __atomic_exchange_n(&this->procs.fd, 0, __ATOMIC_RELAXED); 743 } 752 744 753 745 // If no one is sleeping, we are done … … 776 768 // Unconditionnaly wake a thread 777 769 void __wake_proc(processor * this) { 770 /* paranoid */ verify( ! __preemption_enabled() ); 771 778 772 __cfadbg_print_safe(runtime_core, "Kernel : waking Processor %p\n", this); 779 773 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(); 774 eventfd_t val; 775 val = 1; 776 eventfd_write( this->idle_fd, val ); 777 778 /* paranoid */ verify( ! __preemption_enabled() ); 786 779 } 787 780
Note:
See TracChangeset
for help on using the changeset viewer.