Ignore:
Timestamp:
Mar 27, 2018, 5:22:58 PM (7 years ago)
Author:
Peter A. Buhr <pabuhr@…>
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, with_gc
Children:
43725bd
Parents:
af1ed1ad
Message:

second draft of time package and incorporation into runtime kernel

File:
1 edited

Legend:

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

    raf1ed1ad r2a84d06d  
    1010// Created On       : Mon Jun 5 14:20:42 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Feb  9 16:38:13 2018
    13 // Update Count     : 14
     12// Last Modified On : Tue Mar 27 11:28:51 2018
     13// Update Count     : 24
    1414//
    1515
     
    2727
    2828#if !defined(__CFA_DEFAULT_PREEMPTION__)
    29 #define __CFA_DEFAULT_PREEMPTION__ 10`cfa_ms
     29#define __CFA_DEFAULT_PREEMPTION__ 10`ms
    3030#endif
    3131
    32 __cfa_time_t default_preemption() __attribute__((weak)) {
     32Duration default_preemption() __attribute__((weak)) {
    3333        return __CFA_DEFAULT_PREEMPTION__;
    3434}
     
    7878
    7979// Get next expired node
    80 static inline alarm_node_t * get_expired( alarm_list_t * alarms, __cfa_time_t currtime ) {
     80static inline alarm_node_t * get_expired( alarm_list_t * alarms, Time currtime ) {
    8181        if( !alarms->head ) return NULL;                          // If no alarms return null
    8282        if( alarms->head->alarm >= currtime ) return NULL;        // If alarms head not expired return null
     
    8888        alarm_node_t * node = NULL;                     // Used in the while loop but cannot be declared in the while condition
    8989        alarm_list_t * alarms = &event_kernel->alarms;  // Local copy for ease of reading
    90         __cfa_time_t currtime = __kernel_get_time();    // Check current time once so we everything "happens at once"
     90        Time currtime = __kernel_get_time();                    // Check current time once so we everything "happens at once"
    9191
    9292        //Loop throught every thing expired
     
    102102
    103103                // Check if this is a periodic alarm
    104                 __cfa_time_t period = node->period;
     104                Duration period = node->period;
    105105                if( period > 0 ) {
    106106                        node->alarm = currtime + period;    // Alarm is periodic, add currtime to it (used cached current time)
     
    117117
    118118// Update the preemption of a processor and notify interested parties
    119 void update_preemption( processor * this, __cfa_time_t duration ) {
     119void update_preemption( processor * this, Duration duration ) {
    120120        alarm_node_t * alarm = this->preemption_alarm;
    121121
    122122        // Alarms need to be enabled
    123         if ( duration > 0 && !alarm->set ) {
     123        if ( duration > 0 && ! alarm->set ) {
    124124                alarm->alarm = __kernel_get_time() + duration;
    125125                alarm->period = duration;
     
    291291// Used by thread to control when they want to receive preemption signals
    292292void ?{}( preemption_scope & this, processor * proc ) {
    293         (this.alarm){ proc, 0`cfa_s, 0`cfa_s };
     293        (this.alarm){ proc, (Time){ 0 }, 0`s };
    294294        this.proc = proc;
    295295        this.proc->preemption_alarm = &this.alarm;
     
    301301        disable_interrupts();
    302302
    303         update_preemption( this.proc, 0`cfa_s );
     303        update_preemption( this.proc, 0`s );
    304304}
    305305
Note: See TracChangeset for help on using the changeset viewer.