Ignore:
Timestamp:
Jul 17, 2017, 3:54:02 PM (7 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
5bd0aad
Parents:
b706db1
Message:

Some cleanu[ in the kernel, notably phasing out the system processor

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/concurrency/kernel.c

    rb706db1 re60e0dc  
    4747KERNEL_STORAGE(cluster, systemCluster);
    4848KERNEL_STORAGE(system_proc_t, systemProcessor);
     49KERNEL_STORAGE(event_kernel_t, event_kernel);
    4950KERNEL_STORAGE(thread_desc, mainThread);
    5051KERNEL_STORAGE(machine_context_t, mainThreadCtx);
     
    5253cluster * systemCluster;
    5354system_proc_t * systemProcessor;
     55event_kernel_t * event_kernel;
    5456thread_desc * mainThread;
    5557
     
    131133        this->cltr = cltr;
    132134        (&this->terminated){ 0 };
    133         this->is_terminated = false;
     135        this->do_terminate = false;
    134136        this->preemption_alarm = NULL;
    135         this->preemption = default_preemption();
    136137        this->pending_preemption = false;
    137138
     
    142143        this->cltr = cltr;
    143144        (&this->terminated){ 0 };
    144         this->is_terminated = false;
     145        this->do_terminate = false;
    145146        this->preemption_alarm = NULL;
    146         this->preemption = default_preemption();
    147147        this->pending_preemption = false;
    148148        this->kernel_thread = pthread_self();
     
    156156
    157157void ?{}(system_proc_t * this, cluster * cltr, processorCtx_t * runner) {
     158        (&this->proc){ cltr, runner };
     159}
     160
     161void ?{}(event_kernel_t * this) {
    158162        (&this->alarms){};
    159         (&this->alarm_lock){};
    160         this->pending_alarm = false;
    161 
    162         (&this->proc){ cltr, runner };
     163        (&this->lock){};
    163164
    164165        verify( validate( &this->alarms ) );
     
    166167
    167168void ^?{}(processor * this) {
    168         if( ! this->is_terminated ) {
     169        if( ! this->do_terminate ) {
    169170                LIB_DEBUG_PRINT_SAFE("Kernel : core %p signaling termination\n", this);
    170                 this->is_terminated = true;
     171                this->do_terminate = true;
    171172                P( &this->terminated );
    172173                pthread_join( this->kernel_thread, NULL );
     
    176177void ?{}(cluster * this) {
    177178        ( &this->ready_queue ){};
    178         ( &this->lock ){};
     179        ( &this->ready_queue_lock ){};
     180
     181        this->preemption = default_preemption();
    179182}
    180183
     
    199202
    200203                thread_desc * readyThread = NULL;
    201                 for( unsigned int spin_count = 0; ! this->is_terminated; spin_count++ )
     204                for( unsigned int spin_count = 0; ! this->do_terminate; spin_count++ )
    202205                {
    203206                        readyThread = nextThread( this->cltr );
     
    343346        verifyf( thrd->next == NULL, "Expected null got %p", thrd->next );
    344347
    345         lock( &systemProcessor->proc.cltr->lock DEBUG_CTX2 );
     348        lock( &systemProcessor->proc.cltr->ready_queue_lock DEBUG_CTX2 );
    346349        append( &systemProcessor->proc.cltr->ready_queue, thrd );
    347         unlock( &systemProcessor->proc.cltr->lock );
     350        unlock( &systemProcessor->proc.cltr->ready_queue_lock );
    348351
    349352        verify( disable_preempt_count > 0 );
     
    352355thread_desc * nextThread(cluster * this) {
    353356        verify( disable_preempt_count > 0 );
    354         lock( &this->lock DEBUG_CTX2 );
     357        lock( &this->ready_queue_lock DEBUG_CTX2 );
    355358        thread_desc * head = pop_head( &this->ready_queue );
    356         unlock( &this->lock );
     359        unlock( &this->ready_queue_lock );
    357360        verify( disable_preempt_count > 0 );
    358361        return head;
     
    470473        systemProcessor{ systemCluster, (processorCtx_t *)&systemProcessorCtxStorage };
    471474
     475        // Initialize the event kernel
     476        event_kernel = (event_kernel_t *)&event_kernelStorage;
     477        event_kernel{};
     478
    472479        // Add the main thread to the ready queue
    473480        // once resume is called on systemProcessor->runner the mainThread needs to be scheduled like any normal thread
     
    504511        // When its coroutine terminates, it return control to the mainThread
    505512        // which is currently here
    506         systemProcessor->proc.is_terminated = true;
     513        systemProcessor->proc.do_terminate = true;
    507514        suspend();
    508515
Note: See TracChangeset for help on using the changeset viewer.