Ignore:
File:
1 edited

Legend:

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

    r0c3aa67 r7cf3b1d  
    1818
    1919// C Includes
    20 #include <errno.h>                                      // errno
     20#include <errno.h>              // errno
    2121#include <signal.h>
    22 #include <string.h>                                     // strerror
    23 #include <unistd.h>                                     // sysconf
     22#include <string.h>             // strerror
     23#include <unistd.h>             // sysconf
    2424
    2525extern "C" {
    26         #include <limits.h>                             // PTHREAD_STACK_MIN
    27         #include <unistd.h>                             // syscall
    28         #include <sys/eventfd.h>                        // eventfd
    29         #include <sys/mman.h>                           // mprotect
    30         #include <sys/resource.h>                       // getrlimit
     26      #include <limits.h>       // PTHREAD_STACK_MIN
     27        #include <unistd.h>       // syscall
     28        #include <sys/eventfd.h>  // eventfd
     29      #include <sys/mman.h>     // mprotect
     30      #include <sys/resource.h> // getrlimit
    3131}
    3232
    3333// CFA Includes
    34 #include "kernel/private.hfa"
    35 #include "iofwd.hfa"
    36 #include "startup.hfa"                                  // STARTUP_PRIORITY_XXX
     34#include "kernel_private.hfa"
     35#include "startup.hfa"          // STARTUP_PRIORITY_XXX
    3736#include "limits.hfa"
    3837#include "math.hfa"
     
    9897extern void __kernel_alarm_startup(void);
    9998extern void __kernel_alarm_shutdown(void);
    100 extern void __cfa_io_start( processor * );
    101 extern void __cfa_io_stop ( processor * );
    10299
    103100//-----------------------------------------------------------------------------
     
    105102extern void __wake_proc(processor *);
    106103extern int cfa_main_returned;                                                   // from interpose.cfa
    107 uint32_t __global_random_prime = 4_294_967_291u, __global_random_mask = false;
     104extern uint32_t __global_random_seed;
    108105
    109106//-----------------------------------------------------------------------------
     
    114111KERNEL_STORAGE(__stack_t,            mainThreadCtx);
    115112KERNEL_STORAGE(__scheduler_RWLock_t, __scheduler_lock);
    116 KERNEL_STORAGE(eventfd_t,            mainIdleEventFd);
    117 KERNEL_STORAGE(io_future_t,          mainIdleFuture);
    118113#if !defined(__CFA_NO_STATISTICS__)
    119114KERNEL_STORAGE(__stats_t, mainProcStats);
     
    229224        (*mainProcessor){};
    230225
    231         mainProcessor->idle_wctx.rdbuf = &storage_mainIdleEventFd;
    232         mainProcessor->idle_wctx.ftr   = (io_future_t*)&storage_mainIdleFuture;
    233         /* paranoid */ verify( sizeof(storage_mainIdleEventFd) == sizeof(eventfd_t) );
    234 
    235         __cfa_io_start( mainProcessor );
    236226        register_tls( mainProcessor );
    237227
     
    315305
    316306        unregister_tls( mainProcessor );
    317         __cfa_io_stop( mainProcessor );
    318307
    319308        // Destroy the main processor and its context in reverse order of construction
     
    364353        proc->local_data = &__cfaabi_tls;
    365354
    366         __cfa_io_start( proc );
    367355        register_tls( proc );
    368 
    369         // used for idle sleep when io_uring is present
    370         io_future_t future;
    371         eventfd_t idle_buf;
    372         proc->idle_wctx.ftr = &future;
    373         proc->idle_wctx.rdbuf = &idle_buf;
    374 
    375356
    376357        // SKULLDUGGERY: We want to create a context for the processor coroutine
     
    414395
    415396        unregister_tls( proc );
    416         __cfa_io_stop( proc );
    417397
    418398        return 0p;
     
    510490        preferred = ready_queue_new_preferred();
    511491        last_proc = 0p;
    512         random_state = __global_random_mask ? __global_random_prime : __global_random_prime ^ rdtscl();
     492        random_state = __global_random_seed;
    513493        #if defined( __CFA_WITH_VERIFY__ )
    514494                canary = 0x0D15EA5E0D15EA5Ep;
     
    535515        this.rdq.its = 0;
    536516        this.rdq.itr = 0;
    537         this.rdq.id  = 0;
     517        this.rdq.id  = MAX;
    538518        this.rdq.target = MAX;
    539519        this.rdq.last = MAX;
     
    552532        this.local_data = 0p;
    553533
    554         idle_wctx.evfd = eventfd(0, 0);
    555         if (idle_wctx.evfd < 0) {
     534        this.idle_fd = eventfd(0, 0);
     535        if (idle_fd < 0) {
    556536                abort("KERNEL ERROR: PROCESSOR EVENTFD - %s\n", strerror(errno));
    557537        }
    558538
    559         idle_wctx.sem = 0;
    560         idle_wctx.wake__time = 0;
     539        this.idle_wctx.fd = 0;
    561540
    562541        // I'm assuming these two are reserved for standard input and output
    563542        // so I'm using them as sentinels with idle_wctx.
    564         /* paranoid */ verify( idle_wctx.evfd != 0 );
    565         /* paranoid */ verify( idle_wctx.evfd != 1 );
     543        /* paranoid */ verify( this.idle_fd != 0 );
     544        /* paranoid */ verify( this.idle_fd != 1 );
    566545
    567546        #if !defined(__CFA_NO_STATISTICS__)
     
    575554// Not a ctor, it just preps the destruction but should not destroy members
    576555static void deinit(processor & this) {
    577         close(this.idle_wctx.evfd);
     556        close(this.idle_fd);
    578557}
    579558
     
    626605        this.name = name;
    627606        this.preemption_rate = preemption_rate;
    628         this.sched.readyQ.data = 0p;
    629         this.sched.readyQ.tscs = 0p;
    630         this.sched.readyQ.count = 0;
    631         this.sched.io.tscs = 0p;
    632         this.sched.io.data = 0p;
    633         this.sched.caches = 0p;
     607        ready_queue{};
    634608
    635609        #if !defined(__CFA_NO_STATISTICS__)
     
    670644        // Unlock the RWlock
    671645        ready_mutate_unlock( last_size );
    672 
    673         ready_queue_close( &this );
    674         /* paranoid */ verify( this.sched.readyQ.data == 0p );
    675         /* paranoid */ verify( this.sched.readyQ.tscs == 0p );
    676         /* paranoid */ verify( this.sched.readyQ.count == 0 );
    677         /* paranoid */ verify( this.sched.io.tscs == 0p );
    678         /* paranoid */ verify( this.sched.caches == 0p );
    679 
    680646        enable_interrupts( false ); // Don't poll, could be in main cluster
    681 
    682647
    683648        #if !defined(__CFA_NO_STATISTICS__)
     
    771736        check( pthread_attr_init( &attr ), "pthread_attr_init" ); // initialize attribute
    772737
    773         size_t stacksize = max( PTHREAD_STACK_MIN, DEFAULT_STACK_SIZE );
     738        size_t stacksize = DEFAULT_STACK_SIZE;
    774739
    775740        void * stack;
Note: See TracChangeset for help on using the changeset viewer.