Changes in / [6e09a41e:26ceca1]


Ignore:
Files:
10 edited

Legend:

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

    r6e09a41e r26ceca1  
    195195
    196196                #if defined( __CFA_WITH_VERIFY__ )
    197                         void * canary;
     197                        unsigned long long canary;
    198198                #endif
    199199        };
  • libcfa/src/concurrency/kernel.cfa

    r6e09a41e r26ceca1  
    255255                /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) < ((uintptr_t)__get_stack(thrd_dst->curr_cor)->base ) || thrd_dst->curr_cor == proc_cor, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too small.\n", thrd_dst ); // add escape condition if we are setting up the processor
    256256                /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) > ((uintptr_t)__get_stack(thrd_dst->curr_cor)->limit) || thrd_dst->curr_cor == proc_cor, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too large.\n", thrd_dst ); // add escape condition if we are setting up the processor
    257                 /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd_dst->canary );
     257                /* paranoid */ verify( 0x0D15EA5E0D15EA5E == thrd_dst->canary );
    258258
    259259
     
    263263                // when __cfactx_switch returns we are back in the processor coroutine
    264264
    265                 /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd_dst->canary );
     265                /* paranoid */ verify( 0x0D15EA5E0D15EA5E == thrd_dst->canary );
    266266                /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) > ((uintptr_t)__get_stack(thrd_dst->curr_cor)->limit), "ERROR : Destination $thread %p has been corrupted.\n StackPointer too large.\n", thrd_dst );
    267267                /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) < ((uintptr_t)__get_stack(thrd_dst->curr_cor)->base ), "ERROR : Destination $thread %p has been corrupted.\n StackPointer too small.\n", thrd_dst );
     
    335335                #endif
    336336                /* paranoid */ verify( proc_cor->context.SP );
    337                 /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd_src->canary );
     337                /* paranoid */ verify( 0x0D15EA5E0D15EA5E == thrd_src->canary );
    338338                __cfactx_switch( &thrd_src->context, &proc_cor->context );
    339                 /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd_src->canary );
     339                /* paranoid */ verify( 0x0D15EA5E0D15EA5E == thrd_src->canary );
    340340                #if defined( __i386 ) || defined( __x86_64 )
    341341                        __x87_load;
     
    370370        /* paranoid */ #endif
    371371        /* paranoid */ verifyf( thrd->link.next == 0p, "Expected null got %p", thrd->link.next );
    372         /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd->canary );
     372        /* paranoid */ verify( 0x0D15EA5E0D15EA5E == thrd->canary );
    373373
    374374
     
    742742
    743743        void print_stats_now( cluster & this, int flags ) {
    744                 __print_stats( this.stats, this.print_stats, "Cluster", this.name, (void*)&this );
    745         }
    746 
    747         extern int __print_alarm_stats;
    748         void print_alarm_stats() {
    749                 __print_alarm_stats = -1;
     744                __print_stats( this.stats, this.print_stats, true, this.name, (void*)&this );
    750745        }
    751746#endif
  • libcfa/src/concurrency/kernel/startup.cfa

    r6e09a41e r26ceca1  
    360360                __tally_stats(proc->cltr->stats, &local_stats);
    361361                if( 0 != proc->print_stats ) {
    362                         __print_stats( &local_stats, proc->print_stats, "Processor ", proc->name, (void*)proc );
     362                        __print_stats( &local_stats, proc->print_stats, true, proc->name, (void*)proc );
    363363                }
    364364        #endif
     
    456456        link.prev = 0p;
    457457        #if defined( __CFA_WITH_VERIFY__ )
    458                 canary = 0x0D15EA5E0D15EA5Ep;
     458                canary = 0x0D15EA5E0D15EA5E;
    459459        #endif
    460460
     
    622622        #if !defined(__CFA_NO_STATISTICS__)
    623623                if( 0 != this.print_stats ) {
    624                         __print_stats( this.stats, this.print_stats, "Cluster", this.name, (void*)&this );
     624                        __print_stats( this.stats, this.print_stats, true, this.name, (void*)&this );
    625625                }
    626626                free( this.stats );
  • libcfa/src/concurrency/preemption.cfa

    r6e09a41e r26ceca1  
    386386// reserved for future use
    387387static void timeout( $thread * this ) {
     388        #if !defined( __CFA_NO_STATISTICS__ )
     389                kernelTLS().this_stats = this->curr_cluster->stats;
     390        #endif
    388391        unpark( this );
    389392}
     
    612615}
    613616
    614 #if !defined(__CFA_NO_STATISTICS__)
    615         int __print_alarm_stats = 0;
    616 #endif
    617 
    618617// Main of the alarm thread
    619618// Waits on SIGALRM and send SIGUSR1 to whom ever needs it
     
    623622        id.id = doregister(&id);
    624623        __cfaabi_tls.this_proc_id = &id;
    625 
    626         #if !defined(__CFA_NO_STATISTICS__)
    627                 struct __stats_t local_stats;
    628                 __cfaabi_tls.this_stats = &local_stats;
    629                 __init_stats( &local_stats );
    630         #endif
    631624
    632625        // Block sigalrms to control when they arrive
     
    688681        __cfaabi_dbg_print_safe( "Kernel : Preemption thread stopping\n" );
    689682        unregister(&id);
    690 
    691         #if !defined(__CFA_NO_STATISTICS__)
    692                 if( 0 != __print_alarm_stats ) {
    693                         __print_stats( &local_stats, __print_alarm_stats, "Alarm", "Thread", 0p );
    694                 }
    695         #endif
    696683        return 0p;
    697684}
  • libcfa/src/concurrency/stats.cfa

    r6e09a41e r26ceca1  
    4444
    4545        void __tally_stats( struct __stats_t * cltr, struct __stats_t * proc ) {
    46                 __atomic_fetch_add( &cltr->ready.pick.push.attempt , proc->ready.pick.push.attempt , __ATOMIC_SEQ_CST ); proc->ready.pick.push.attempt  = 0;
    47                 __atomic_fetch_add( &cltr->ready.pick.push.success , proc->ready.pick.push.success , __ATOMIC_SEQ_CST ); proc->ready.pick.push.success  = 0;
    48                 __atomic_fetch_add( &cltr->ready.pick.push.local   , proc->ready.pick.push.local   , __ATOMIC_SEQ_CST ); proc->ready.pick.push.local    = 0;
    49                 __atomic_fetch_add( &cltr->ready.pick.push.lsuccess, proc->ready.pick.push.lsuccess, __ATOMIC_SEQ_CST ); proc->ready.pick.push.lsuccess = 0;
    50                 __atomic_fetch_add( &cltr->ready.pick.pop .probe   , proc->ready.pick.pop .probe   , __ATOMIC_SEQ_CST ); proc->ready.pick.pop .probe    = 0;
    51                 __atomic_fetch_add( &cltr->ready.pick.pop .attempt , proc->ready.pick.pop .attempt , __ATOMIC_SEQ_CST ); proc->ready.pick.pop .attempt  = 0;
    52                 __atomic_fetch_add( &cltr->ready.pick.pop .success , proc->ready.pick.pop .success , __ATOMIC_SEQ_CST ); proc->ready.pick.pop .success  = 0;
    53                 __atomic_fetch_add( &cltr->ready.pick.pop .local   , proc->ready.pick.pop .local   , __ATOMIC_SEQ_CST ); proc->ready.pick.pop .local    = 0;
    54                 __atomic_fetch_add( &cltr->ready.pick.pop .lsuccess, proc->ready.pick.pop .lsuccess, __ATOMIC_SEQ_CST ); proc->ready.pick.pop .lsuccess = 0;
    55                 __atomic_fetch_add( &cltr->ready.threads.migration , proc->ready.threads.migration , __ATOMIC_SEQ_CST ); proc->ready.threads.migration  = 0;
    56                 __atomic_fetch_add( &cltr->ready.sleep.halts       , proc->ready.sleep.halts       , __ATOMIC_SEQ_CST ); proc->ready.sleep.halts        = 0;
    57                 __atomic_fetch_add( &cltr->ready.sleep.cancels     , proc->ready.sleep.cancels     , __ATOMIC_SEQ_CST ); proc->ready.sleep.cancels      = 0;
    58                 __atomic_fetch_add( &cltr->ready.sleep.wakes       , proc->ready.sleep.wakes       , __ATOMIC_SEQ_CST ); proc->ready.sleep.wakes        = 0;
    59                 __atomic_fetch_add( &cltr->ready.sleep.exits       , proc->ready.sleep.exits       , __ATOMIC_SEQ_CST ); proc->ready.sleep.exits        = 0;
     46                __atomic_fetch_add( &cltr->ready.pick.push.attempt , proc->ready.pick.push.attempt , __ATOMIC_SEQ_CST );
     47                __atomic_fetch_add( &cltr->ready.pick.push.success , proc->ready.pick.push.success , __ATOMIC_SEQ_CST );
     48                __atomic_fetch_add( &cltr->ready.pick.push.local   , proc->ready.pick.push.local   , __ATOMIC_SEQ_CST );
     49                __atomic_fetch_add( &cltr->ready.pick.push.lsuccess, proc->ready.pick.push.lsuccess, __ATOMIC_SEQ_CST );
     50                __atomic_fetch_add( &cltr->ready.pick.pop .probe   , proc->ready.pick.pop .probe   , __ATOMIC_SEQ_CST );
     51                __atomic_fetch_add( &cltr->ready.pick.pop .attempt , proc->ready.pick.pop .attempt , __ATOMIC_SEQ_CST );
     52                __atomic_fetch_add( &cltr->ready.pick.pop .success , proc->ready.pick.pop .success , __ATOMIC_SEQ_CST );
     53                __atomic_fetch_add( &cltr->ready.pick.pop .local   , proc->ready.pick.pop .local   , __ATOMIC_SEQ_CST );
     54                __atomic_fetch_add( &cltr->ready.pick.pop .lsuccess, proc->ready.pick.pop .lsuccess, __ATOMIC_SEQ_CST );
     55                __atomic_fetch_add( &cltr->ready.threads.migration, proc->ready.threads.migration, __ATOMIC_SEQ_CST );
     56                __atomic_fetch_add( &cltr->ready.sleep.halts  , proc->ready.sleep.halts  , __ATOMIC_SEQ_CST );
     57                __atomic_fetch_add( &cltr->ready.sleep.cancels, proc->ready.sleep.cancels, __ATOMIC_SEQ_CST );
     58                __atomic_fetch_add( &cltr->ready.sleep.wakes  , proc->ready.sleep.wakes  , __ATOMIC_SEQ_CST );
     59                __atomic_fetch_add( &cltr->ready.sleep.exits  , proc->ready.sleep.exits  , __ATOMIC_SEQ_CST );
    6060
    6161                #if defined(CFA_HAVE_LINUX_IO_URING_H)
    62                         __atomic_fetch_add( &cltr->io.submit_q.submit_avg.rdy     , proc->io.submit_q.submit_avg.rdy     , __ATOMIC_SEQ_CST ); proc->io.submit_q.submit_avg.rdy      = 0;
    63                         __atomic_fetch_add( &cltr->io.submit_q.submit_avg.csm     , proc->io.submit_q.submit_avg.csm     , __ATOMIC_SEQ_CST ); proc->io.submit_q.submit_avg.csm      = 0;
    64                         __atomic_fetch_add( &cltr->io.submit_q.submit_avg.avl     , proc->io.submit_q.submit_avg.avl     , __ATOMIC_SEQ_CST ); proc->io.submit_q.submit_avg.avl      = 0;
    65                         __atomic_fetch_add( &cltr->io.submit_q.submit_avg.cnt     , proc->io.submit_q.submit_avg.cnt     , __ATOMIC_SEQ_CST ); proc->io.submit_q.submit_avg.cnt      = 0;
    66                         __atomic_fetch_add( &cltr->io.submit_q.look_avg.val       , proc->io.submit_q.look_avg.val       , __ATOMIC_SEQ_CST ); proc->io.submit_q.look_avg.val        = 0;
    67                         __atomic_fetch_add( &cltr->io.submit_q.look_avg.cnt       , proc->io.submit_q.look_avg.cnt       , __ATOMIC_SEQ_CST ); proc->io.submit_q.look_avg.cnt        = 0;
    68                         __atomic_fetch_add( &cltr->io.submit_q.look_avg.block     , proc->io.submit_q.look_avg.block     , __ATOMIC_SEQ_CST ); proc->io.submit_q.look_avg.block      = 0;
    69                         __atomic_fetch_add( &cltr->io.submit_q.alloc_avg.val      , proc->io.submit_q.alloc_avg.val      , __ATOMIC_SEQ_CST ); proc->io.submit_q.alloc_avg.val       = 0;
    70                         __atomic_fetch_add( &cltr->io.submit_q.alloc_avg.cnt      , proc->io.submit_q.alloc_avg.cnt      , __ATOMIC_SEQ_CST ); proc->io.submit_q.alloc_avg.cnt       = 0;
    71                         __atomic_fetch_add( &cltr->io.submit_q.alloc_avg.block    , proc->io.submit_q.alloc_avg.block    , __ATOMIC_SEQ_CST ); proc->io.submit_q.alloc_avg.block     = 0;
    72                         __atomic_fetch_add( &cltr->io.submit_q.helped             , proc->io.submit_q.helped             , __ATOMIC_SEQ_CST ); proc->io.submit_q.helped              = 0;
    73                         __atomic_fetch_add( &cltr->io.submit_q.leader             , proc->io.submit_q.leader             , __ATOMIC_SEQ_CST ); proc->io.submit_q.leader              = 0;
    74                         __atomic_fetch_add( &cltr->io.submit_q.busy               , proc->io.submit_q.busy               , __ATOMIC_SEQ_CST ); proc->io.submit_q.busy                = 0;
    75                         __atomic_fetch_add( &cltr->io.complete_q.completed_avg.val, proc->io.complete_q.completed_avg.val, __ATOMIC_SEQ_CST ); proc->io.complete_q.completed_avg.val = 0;
    76                         __atomic_fetch_add( &cltr->io.complete_q.completed_avg.cnt, proc->io.complete_q.completed_avg.cnt, __ATOMIC_SEQ_CST ); proc->io.complete_q.completed_avg.cnt = 0;
    77                         __atomic_fetch_add( &cltr->io.complete_q.blocks           , proc->io.complete_q.blocks           , __ATOMIC_SEQ_CST ); proc->io.complete_q.blocks            = 0;
     62                        __atomic_fetch_add( &cltr->io.submit_q.submit_avg.rdy     , proc->io.submit_q.submit_avg.rdy     , __ATOMIC_SEQ_CST );
     63                        __atomic_fetch_add( &cltr->io.submit_q.submit_avg.csm     , proc->io.submit_q.submit_avg.csm     , __ATOMIC_SEQ_CST );
     64                        __atomic_fetch_add( &cltr->io.submit_q.submit_avg.avl     , proc->io.submit_q.submit_avg.avl     , __ATOMIC_SEQ_CST );
     65                        __atomic_fetch_add( &cltr->io.submit_q.submit_avg.cnt     , proc->io.submit_q.submit_avg.cnt     , __ATOMIC_SEQ_CST );
     66                        __atomic_fetch_add( &cltr->io.submit_q.look_avg.val       , proc->io.submit_q.look_avg.val       , __ATOMIC_SEQ_CST );
     67                        __atomic_fetch_add( &cltr->io.submit_q.look_avg.cnt       , proc->io.submit_q.look_avg.cnt       , __ATOMIC_SEQ_CST );
     68                        __atomic_fetch_add( &cltr->io.submit_q.look_avg.block     , proc->io.submit_q.look_avg.block     , __ATOMIC_SEQ_CST );
     69                        __atomic_fetch_add( &cltr->io.submit_q.alloc_avg.val      , proc->io.submit_q.alloc_avg.val      , __ATOMIC_SEQ_CST );
     70                        __atomic_fetch_add( &cltr->io.submit_q.alloc_avg.cnt      , proc->io.submit_q.alloc_avg.cnt      , __ATOMIC_SEQ_CST );
     71                        __atomic_fetch_add( &cltr->io.submit_q.alloc_avg.block    , proc->io.submit_q.alloc_avg.block    , __ATOMIC_SEQ_CST );
     72                        __atomic_fetch_add( &cltr->io.submit_q.helped             , proc->io.submit_q.helped             , __ATOMIC_SEQ_CST );
     73                        __atomic_fetch_add( &cltr->io.submit_q.leader             , proc->io.submit_q.leader             , __ATOMIC_SEQ_CST );
     74                        __atomic_fetch_add( &cltr->io.submit_q.busy               , proc->io.submit_q.busy               , __ATOMIC_SEQ_CST );
     75                        __atomic_fetch_add( &cltr->io.complete_q.completed_avg.val, proc->io.complete_q.completed_avg.val, __ATOMIC_SEQ_CST );
     76                        __atomic_fetch_add( &cltr->io.complete_q.completed_avg.cnt, proc->io.complete_q.completed_avg.cnt, __ATOMIC_SEQ_CST );
     77                        __atomic_fetch_add( &cltr->io.complete_q.blocks           , proc->io.complete_q.blocks           , __ATOMIC_SEQ_CST );
    7878                #endif
    7979        }
    8080
    81         void __print_stats( struct __stats_t * stats, int flags, const char * type, const char * name, void * id ) with( *stats ) {
     81        void __print_stats( struct __stats_t * stats, int flags, bool cluster, const char * name, void * id ) with( *stats ) {
    8282
    8383                if( flags & CFA_STATS_READY_Q ) {
     
    109109                                "-- wake on exit          : %'15" PRIu64 "\n"
    110110                                "\n"
    111                                 , type, name, id
     111                                , cluster ? "Cluster" : "Processor", name, id
    112112                                , ready.pick.pop.success
    113113                                , ready.pick.push.success
     
    158158                                        "- total completion blocks: %'15" PRIu64 "\n"
    159159                                        "\n"
    160                                         , type,  name, id
     160                                        , cluster ? "Cluster" : "Processor",  name, id
    161161                                        , io.submit_q.submit_avg.cnt
    162162                                        , avgrdy, avgcsm
  • libcfa/src/concurrency/stats.hfa

    r6e09a41e r26ceca1  
    77        static inline void __init_stats( struct __stats_t * ) {}
    88        static inline void __tally_stats( struct __stats_t *, struct __stats_t * ) {}
    9         static inline void __print_stats( struct __stats_t *, int, const char *, const char *, void * ) {}
     9        static inline void __print_stats( struct __stats_t *, int, bool, const char *, void * ) {}
    1010#else
    1111        enum {
     
    106106        void __init_stats ( struct __stats_t * );
    107107        void __tally_stats( struct __stats_t *, struct __stats_t * );
    108         void __print_stats( struct __stats_t *, int, const char *, const char *, void * );
     108        void __print_stats( struct __stats_t *, int, bool, const char *, void * );
    109109#endif
    110110
  • libcfa/src/concurrency/thread.cfa

    r6e09a41e r26ceca1  
    4141        link.preferred = -1;
    4242        #if defined( __CFA_WITH_VERIFY__ )
    43                 canary = 0x0D15EA5E0D15EA5Ep;
     43                canary = 0x0D15EA5E0D15EA5E;
    4444        #endif
    4545
     
    5353void ^?{}($thread& this) with( this ) {
    5454        #if defined( __CFA_WITH_VERIFY__ )
    55                 canary = 0xDEADDEADDEADDEADp;
     55                canary = 0xDEADDEADDEADDEAD;
    5656        #endif
    5757        unregister(curr_cluster, this);
  • src/AST/Convert.hpp

    r6e09a41e r26ceca1  
    2020class Declaration;
    2121namespace ast {
    22         struct TranslationUnit;
     22        class TranslationUnit;
    2323};
    2424
  • src/AST/Fwd.hpp

    r6e09a41e r26ceca1  
    137137typedef unsigned int UniqueId;
    138138
    139 struct TranslationUnit;
     139class TranslationUnit;
    140140// TODO: Get from the TranslationUnit:
    141141extern Type * sizeType;
  • src/AST/Pass.proto.hpp

    r6e09a41e r26ceca1  
    2323class Pass;
    2424
    25 struct TranslationUnit;
     25class TranslationUnit;
    2626
    2727struct PureVisitor;
     
    274274        template< typename core_t >
    275275        static auto on_error (core_t & core, ptr<Decl> & decl, int) -> decltype(core.on_error(decl)) {
    276                 return core.on_error(decl);
     276                return core.on_error(decl); 
    277277        }
    278278
Note: See TracChangeset for help on using the changeset viewer.