Changeset cc56283


Ignore:
Timestamp:
Jan 10, 2022, 4:14:23 PM (2 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, ast-experimental, enum, forall-pointer-decay, master, pthread-emulation, qualifiedEnum
Children:
4177592f, 770d9ab
Parents:
04a8a54 (diff), 56d711f (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.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

Files:
5 added
4 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/Makefile.am

    r04a8a54 rcc56283  
    121121        concurrency/monitor.hfa \
    122122        concurrency/mutex.hfa \
     123        concurrency/select.hfa \
    123124        concurrency/thread.hfa
    124125
  • libcfa/src/concurrency/kernel.cfa

    r04a8a54 rcc56283  
    142142extern void __disable_interrupts_hard();
    143143extern 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 }
    156144
    157145
     
    776764// Unconditionnaly wake a thread
    777765void __wake_proc(processor * this) {
     766        /* paranoid */ verify( ! __preemption_enabled() );
     767
    778768        __cfadbg_print_safe(runtime_core, "Kernel : waking Processor %p\n", this);
    779769
    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() );
    786775}
    787776
  • libcfa/src/concurrency/kernel/startup.cfa

    r04a8a54 rcc56283  
    279279        // When its coroutine terminates, it return control to the mainThread
    280280        // which is currently here
     281        /* paranoid */ verify( !__atomic_load_n(&mainProcessor->do_terminate, __ATOMIC_ACQUIRE) );
    281282        __atomic_store_n(&mainProcessor->do_terminate, true, __ATOMIC_RELEASE);
     283        __wake_proc( mainProcessor );
    282284        __kernel_last_resume( __cfaabi_tls.this_processor );
    283285        mainThread->self_cor.state = Halted;
     
    564566extern size_t __page_size;
    565567void ^?{}(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();
    570573                __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);
    575578
    576579        __destroy_pthread( kernel_thread, this.stack, 0p );
  • libcfa/src/concurrency/kernel_private.hfa

    r04a8a54 rcc56283  
    6060extern bool __preemption_enabled();
    6161
     62static inline void __disable_interrupts_checked() {
     63        /* paranoid */ verify( __preemption_enabled() );
     64        disable_interrupts();
     65        /* paranoid */ verify( ! __preemption_enabled() );
     66}
     67
     68static inline void __enable_interrupts_checked( bool poll = true ) {
     69        /* paranoid */ verify( ! __preemption_enabled() );
     70        enable_interrupts( poll );
     71        /* paranoid */ verify( __preemption_enabled() );
     72}
     73
    6274//release/wake-up the following resources
    6375void __thread_finish( thread$ * thrd );
Note: See TracChangeset for help on using the changeset viewer.