Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/concurrency/kernel_private.h

    r0c78741 rc81ebf9  
    2121#include "thread"
    2222
     23#include "alarm.h"
     24
    2325//-----------------------------------------------------------------------------
    2426// Scheduler
     
    3537//-----------------------------------------------------------------------------
    3638// Processor
    37 struct processorCtx_t {
     39coroutine processorCtx_t {
    3840        processor * proc;
    39         coroutine_desc __cor;
    4041};
    41 
    42 DECL_COROUTINE(processorCtx_t);
    4342
    4443void main(processorCtx_t *);
     
    4746void finishRunning(processor * this);
    4847void spin(processor * this, unsigned int * spin_count);
     48
     49struct system_proc_t {
     50        processor proc;
     51
     52        alarm_list_t alarms;
     53        spinlock alarm_lock;
     54
     55        bool pending_alarm;
     56};
     57
     58extern cluster * systemCluster;
     59extern system_proc_t * systemProcessor;
     60extern thread_local processor * this_processor;
     61
     62static inline void disable_interrupts() {
     63        __attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, 1, __ATOMIC_SEQ_CST );
     64        assert( prev != (unsigned short) -1 );
     65}
     66
     67static inline void enable_interrupts_noRF() {
     68        unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, -1, __ATOMIC_SEQ_CST );
     69        assert( prev != (unsigned short) 0 );
     70}
     71
     72static inline void enable_interrupts() {
     73        unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, -1, __ATOMIC_SEQ_CST );
     74        assert( prev != (unsigned short) 0 );
     75        if( prev == 1 && this_processor->pending_preemption ) {
     76                ScheduleInternal( this_processor->current_thread );
     77                this_processor->pending_preemption = false;
     78        }
     79}
    4980
    5081//-----------------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.