Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/kernel/startup.cfa

    r6a77224 r8fc652e0  
    118118//-----------------------------------------------------------------------------
    119119// Global state
    120 thread_local struct KernelThreadData kernelTLS __attribute__ ((tls_model ( "initial-exec" ))) @= {
     120thread_local struct KernelThreadData __cfaabi_tls __attribute__ ((tls_model ( "initial-exec" ))) @= {
    121121        NULL,                                                                                           // cannot use 0p
     122        NULL,
    122123        NULL,
    123124        NULL,
     
    155156// Kernel boot procedures
    156157static void __kernel_startup(void) {
    157         verify( ! kernelTLS.preemption_state.enabled );
     158        /* paranoid */ verify( ! __preemption_enabled() );
    158159        __cfadbg_print_safe(runtime_core, "Kernel : Starting\n");
    159160
     
    211212
    212213        //initialize the global state variables
    213         kernelTLS.this_processor = mainProcessor;
    214         kernelTLS.this_thread    = mainThread;
     214        __cfaabi_tls.this_processor = mainProcessor;
     215        __cfaabi_tls.this_proc_id   = (__processor_id_t*)mainProcessor;
     216        __cfaabi_tls.this_thread    = mainThread;
    215217
    216218        #if !defined( __CFA_NO_STATISTICS__ )
    217                 kernelTLS.this_stats = (__stats_t *)& storage_mainProcStats;
    218                 __init_stats( kernelTLS.this_stats );
     219                __cfaabi_tls.this_stats = (__stats_t *)& storage_mainProcStats;
     220                __init_stats( __cfaabi_tls.this_stats );
    219221        #endif
    220222
     
    227229        // Add the main thread to the ready queue
    228230        // once resume is called on mainProcessor->runner the mainThread needs to be scheduled like any normal thread
    229         __schedule_thread((__processor_id_t *)mainProcessor, mainThread);
     231        __schedule_thread(mainThread);
    230232
    231233        // SKULLDUGGERY: Force a context switch to the main processor to set the main thread's context to the current UNIX
    232234        // context. Hence, the main thread does not begin through __cfactx_invoke_thread, like all other threads. The trick here is that
    233235        // mainThread is on the ready queue when this call is made.
    234         __kernel_first_resume( kernelTLS.this_processor );
     236        __kernel_first_resume( __cfaabi_tls.this_processor );
    235237
    236238
     
    249251        __cfadbg_print_safe(runtime_core, "Kernel : Started\n--------------------------------------------------\n\n");
    250252
    251         verify( ! kernelTLS.preemption_state.enabled );
     253        /* paranoid */ verify( ! __preemption_enabled() );
    252254        enable_interrupts( __cfaabi_dbg_ctx );
    253         verify( TL_GET( preemption_state.enabled ) );
     255        /* paranoid */ verify( __preemption_enabled() );
     256
    254257}
    255258
     
    260263        mainCluster->io.ctxs = 0p;
    261264
    262         /* paranoid */ verify( TL_GET( preemption_state.enabled ) );
     265        /* paranoid */ verify( __preemption_enabled() );
    263266        disable_interrupts();
    264         /* paranoid */ verify( ! kernelTLS.preemption_state.enabled );
     267        /* paranoid */ verify( ! __preemption_enabled() );
    265268
    266269        __cfadbg_print_safe(runtime_core, "\n--------------------------------------------------\nKernel : Shutting down\n");
     
    270273        // which is currently here
    271274        __atomic_store_n(&mainProcessor->do_terminate, true, __ATOMIC_RELEASE);
    272         __kernel_last_resume( kernelTLS.this_processor );
     275        __kernel_last_resume( __cfaabi_tls.this_processor );
    273276        mainThread->self_cor.state = Halted;
    274277
     
    319322                __stats_t local_stats;
    320323                __init_stats( &local_stats );
    321                 kernelTLS.this_stats = &local_stats;
     324                __cfaabi_tls.this_stats = &local_stats;
    322325        #endif
    323326
    324327        processor * proc = (processor *) arg;
    325         kernelTLS.this_processor = proc;
    326         kernelTLS.this_thread    = 0p;
    327         kernelTLS.preemption_state.[enabled, disable_count] = [false, 1];
     328        __cfaabi_tls.this_processor = proc;
     329        __cfaabi_tls.this_proc_id   = (__processor_id_t*)proc;
     330        __cfaabi_tls.this_thread    = 0p;
     331        __cfaabi_tls.preemption_state.[enabled, disable_count] = [false, 1];
    328332        // SKULLDUGGERY: We want to create a context for the processor coroutine
    329333        // which is needed for the 2-step context switch. However, there is no reason
     
    337341
    338342        //Set global state
    339         kernelTLS.this_thread = 0p;
     343        __cfaabi_tls.this_thread = 0p;
    340344
    341345        //We now have a proper context from which to schedule threads
     
    367371        $coroutine * dst = get_coroutine(this->runner);
    368372
    369         verify( ! kernelTLS.preemption_state.enabled );
    370 
    371         kernelTLS.this_thread->curr_cor = dst;
     373        /* paranoid */ verify( ! __preemption_enabled() );
     374
     375        __cfaabi_tls.this_thread->curr_cor = dst;
    372376        __stack_prepare( &dst->stack, 65000 );
    373377        __cfactx_start(main, dst, this->runner, __cfactx_invoke_coroutine);
    374378
    375         verify( ! kernelTLS.preemption_state.enabled );
     379        /* paranoid */ verify( ! __preemption_enabled() );
    376380
    377381        dst->last = &src->self_cor;
     
    391395        /* paranoid */ verify(src->state == Active);
    392396
    393         verify( ! kernelTLS.preemption_state.enabled );
     397        /* paranoid */ verify( ! __preemption_enabled() );
    394398}
    395399
     
    399403        $coroutine * dst = get_coroutine(this->runner);
    400404
    401         verify( ! kernelTLS.preemption_state.enabled );
    402         verify( dst->starter == src );
    403         verify( dst->context.SP );
     405        /* paranoid */ verify( ! __preemption_enabled() );
     406        /* paranoid */ verify( dst->starter == src );
     407        /* paranoid */ verify( dst->context.SP );
    404408
    405409        // SKULLDUGGERY in debug the processors check that the
     
    543547
    544548                P( terminated );
    545                 verify( kernelTLS.this_processor != &this);
     549                /* paranoid */ verify( active_processor() != &this);
    546550        }
    547551
     
    693697#if defined(__CFA_WITH_VERIFY__)
    694698static bool verify_fwd_bck_rng(void) {
    695         kernelTLS.ready_rng.fwd_seed = 25214903917_l64u * (rdtscl() ^ (uintptr_t)&verify_fwd_bck_rng);
     699        __cfaabi_tls.ready_rng.fwd_seed = 25214903917_l64u * (rdtscl() ^ (uintptr_t)&verify_fwd_bck_rng);
    696700
    697701        unsigned values[10];
Note: See TracChangeset for help on using the changeset viewer.