Changeset 6e09a41e


Ignore:
Timestamp:
Nov 13, 2020, 6:41:17 PM (4 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
7232fe2
Parents:
26ceca1 (diff), 1e208ea (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

Files:
10 edited

Legend:

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

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

    r26ceca1 r6e09a41e  
    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( 0x0D15EA5E0D15EA5E == thrd_dst->canary );
     257                /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd_dst->canary );
    258258
    259259
     
    263263                // when __cfactx_switch returns we are back in the processor coroutine
    264264
    265                 /* paranoid */ verify( 0x0D15EA5E0D15EA5E == thrd_dst->canary );
     265                /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == 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( 0x0D15EA5E0D15EA5E == thrd_src->canary );
     337                /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd_src->canary );
    338338                __cfactx_switch( &thrd_src->context, &proc_cor->context );
    339                 /* paranoid */ verify( 0x0D15EA5E0D15EA5E == thrd_src->canary );
     339                /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == 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( 0x0D15EA5E0D15EA5E == thrd->canary );
     372        /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd->canary );
    373373
    374374
     
    742742
    743743        void print_stats_now( cluster & this, int flags ) {
    744                 __print_stats( this.stats, this.print_stats, true, this.name, (void*)&this );
     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;
    745750        }
    746751#endif
  • libcfa/src/concurrency/kernel/startup.cfa

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

    r26ceca1 r6e09a41e  
    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
    391388        unpark( this );
    392389}
     
    615612}
    616613
     614#if !defined(__CFA_NO_STATISTICS__)
     615        int __print_alarm_stats = 0;
     616#endif
     617
    617618// Main of the alarm thread
    618619// Waits on SIGALRM and send SIGUSR1 to whom ever needs it
     
    622623        id.id = doregister(&id);
    623624        __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
    624631
    625632        // Block sigalrms to control when they arrive
     
    681688        __cfaabi_dbg_print_safe( "Kernel : Preemption thread stopping\n" );
    682689        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
    683696        return 0p;
    684697}
  • libcfa/src/concurrency/stats.cfa

    r26ceca1 r6e09a41e  
    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 );
    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 );
     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;
    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 );
    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 );
     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;
    7878                #endif
    7979        }
    8080
    81         void __print_stats( struct __stats_t * stats, int flags, bool cluster, const char * name, void * id ) with( *stats ) {
     81        void __print_stats( struct __stats_t * stats, int flags, const char * type, 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                                 , cluster ? "Cluster" : "Processor", name, id
     111                                , type, name, id
    112112                                , ready.pick.pop.success
    113113                                , ready.pick.push.success
     
    158158                                        "- total completion blocks: %'15" PRIu64 "\n"
    159159                                        "\n"
    160                                         , cluster ? "Cluster" : "Processor",  name, id
     160                                        , type,  name, id
    161161                                        , io.submit_q.submit_avg.cnt
    162162                                        , avgrdy, avgcsm
  • libcfa/src/concurrency/stats.hfa

    r26ceca1 r6e09a41e  
    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, bool, const char *, void * ) {}
     9        static inline void __print_stats( struct __stats_t *, int, const char *, 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, bool, const char *, void * );
     108        void __print_stats( struct __stats_t *, int, const char *, const char *, void * );
    109109#endif
    110110
  • libcfa/src/concurrency/thread.cfa

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

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

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

    r26ceca1 r6e09a41e  
    2323class Pass;
    2424
    25 class TranslationUnit;
     25struct 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.