Changes in / [c24ef9d:ed45af6]


Ignore:
Location:
src/libcfa
Files:
2 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/Makefile.am

    rc24ef9d red45af6  
    5151# not all platforms support concurrency, add option do disable it
    5252if BUILD_CONCURRENCY
    53 headers += concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor concurrency/mutex
     53headers += concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor
    5454endif
    5555
  • src/libcfa/Makefile.in

    rc24ef9d red45af6  
    9797
    9898# not all platforms support concurrency, add option do disable it
    99 @BUILD_CONCURRENCY_TRUE@am__append_3 = concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor concurrency/mutex
     99@BUILD_CONCURRENCY_TRUE@am__append_3 = concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor
    100100
    101101# not all platforms support concurrency, add option do disable it
     
    153153        containers/pair.c containers/result.c containers/vector.c \
    154154        concurrency/coroutine.c concurrency/thread.c \
    155         concurrency/kernel.c concurrency/monitor.c concurrency/mutex.c \
    156         assert.c exception.c virtual.c \
    157         concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \
    158         concurrency/invoke.c concurrency/preemption.c
     155        concurrency/kernel.c concurrency/monitor.c assert.c \
     156        exception.c virtual.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \
     157        concurrency/alarm.c concurrency/invoke.c \
     158        concurrency/preemption.c
    159159am__dirstamp = $(am__leading_dot)dirstamp
    160160@BUILD_CONCURRENCY_TRUE@am__objects_1 = concurrency/libcfa_d_a-coroutine.$(OBJEXT) \
    161161@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-thread.$(OBJEXT) \
    162162@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-kernel.$(OBJEXT) \
    163 @BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-monitor.$(OBJEXT) \
    164 @BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-mutex.$(OBJEXT)
     163@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-monitor.$(OBJEXT)
    165164am__objects_2 = libcfa_d_a-fstream.$(OBJEXT) \
    166165        libcfa_d_a-iostream.$(OBJEXT) libcfa_d_a-iterator.$(OBJEXT) \
     
    189188        containers/result.c containers/vector.c \
    190189        concurrency/coroutine.c concurrency/thread.c \
    191         concurrency/kernel.c concurrency/monitor.c concurrency/mutex.c \
    192         assert.c exception.c virtual.c \
    193         concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \
    194         concurrency/invoke.c concurrency/preemption.c
     190        concurrency/kernel.c concurrency/monitor.c assert.c \
     191        exception.c virtual.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \
     192        concurrency/alarm.c concurrency/invoke.c \
     193        concurrency/preemption.c
    195194@BUILD_CONCURRENCY_TRUE@am__objects_5 = concurrency/libcfa_a-coroutine.$(OBJEXT) \
    196195@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-thread.$(OBJEXT) \
    197196@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-kernel.$(OBJEXT) \
    198 @BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-monitor.$(OBJEXT) \
    199 @BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-mutex.$(OBJEXT)
     197@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-monitor.$(OBJEXT)
    200198am__objects_6 = libcfa_a-fstream.$(OBJEXT) libcfa_a-iostream.$(OBJEXT) \
    201199        libcfa_a-iterator.$(OBJEXT) libcfa_a-limits.$(OBJEXT) \
     
    266264        containers/result containers/vector concurrency/coroutine \
    267265        concurrency/thread concurrency/kernel concurrency/monitor \
    268         concurrency/mutex ${shell find stdhdr -type f -printf "%p "} \
    269         math gmp time_t.h clock bits/align.h bits/containers.h \
    270         bits/defs.h bits/debug.h bits/locks.h concurrency/invoke.h
     266        ${shell find stdhdr -type f -printf "%p "} math gmp time_t.h \
     267        clock bits/align.h bits/containers.h bits/defs.h bits/debug.h \
     268        bits/locks.h concurrency/invoke.h
    271269HEADERS = $(nobase_cfa_include_HEADERS)
    272270am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
     
    550548concurrency/libcfa_d_a-monitor.$(OBJEXT): concurrency/$(am__dirstamp) \
    551549        concurrency/$(DEPDIR)/$(am__dirstamp)
    552 concurrency/libcfa_d_a-mutex.$(OBJEXT): concurrency/$(am__dirstamp) \
    553         concurrency/$(DEPDIR)/$(am__dirstamp)
    554550concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT):  \
    555551        concurrency/$(am__dirstamp) \
     
    584580        concurrency/$(DEPDIR)/$(am__dirstamp)
    585581concurrency/libcfa_a-monitor.$(OBJEXT): concurrency/$(am__dirstamp) \
    586         concurrency/$(DEPDIR)/$(am__dirstamp)
    587 concurrency/libcfa_a-mutex.$(OBJEXT): concurrency/$(am__dirstamp) \
    588582        concurrency/$(DEPDIR)/$(am__dirstamp)
    589583concurrency/libcfa_a-alarm.$(OBJEXT): concurrency/$(am__dirstamp) \
     
    641635@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-kernel.Po@am__quote@
    642636@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-monitor.Po@am__quote@
    643 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-mutex.Po@am__quote@
    644637@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-preemption.Po@am__quote@
    645638@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-thread.Po@am__quote@
     
    649642@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-kernel.Po@am__quote@
    650643@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po@am__quote@
    651 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-mutex.Po@am__quote@
    652644@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-preemption.Po@am__quote@
    653645@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-thread.Po@am__quote@
     
    938930@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`
    939931
    940 concurrency/libcfa_d_a-mutex.o: concurrency/mutex.c
    941 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-mutex.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-mutex.Tpo -c -o concurrency/libcfa_d_a-mutex.o `test -f 'concurrency/mutex.c' || echo '$(srcdir)/'`concurrency/mutex.c
    942 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-mutex.Tpo concurrency/$(DEPDIR)/libcfa_d_a-mutex.Po
    943 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/mutex.c' object='concurrency/libcfa_d_a-mutex.o' libtool=no @AMDEPBACKSLASH@
    944 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    945 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-mutex.o `test -f 'concurrency/mutex.c' || echo '$(srcdir)/'`concurrency/mutex.c
    946 
    947 concurrency/libcfa_d_a-mutex.obj: concurrency/mutex.c
    948 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-mutex.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-mutex.Tpo -c -o concurrency/libcfa_d_a-mutex.obj `if test -f 'concurrency/mutex.c'; then $(CYGPATH_W) 'concurrency/mutex.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/mutex.c'; fi`
    949 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-mutex.Tpo concurrency/$(DEPDIR)/libcfa_d_a-mutex.Po
    950 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/mutex.c' object='concurrency/libcfa_d_a-mutex.obj' libtool=no @AMDEPBACKSLASH@
    951 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    952 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-mutex.obj `if test -f 'concurrency/mutex.c'; then $(CYGPATH_W) 'concurrency/mutex.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/mutex.c'; fi`
    953 
    954932libcfa_d_a-assert.o: assert.c
    955933@am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-assert.o -MD -MP -MF $(DEPDIR)/libcfa_d_a-assert.Tpo -c -o libcfa_d_a-assert.o `test -f 'assert.c' || echo '$(srcdir)/'`assert.c
     
    12591237@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    12601238@am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`
    1261 
    1262 concurrency/libcfa_a-mutex.o: concurrency/mutex.c
    1263 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-mutex.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-mutex.Tpo -c -o concurrency/libcfa_a-mutex.o `test -f 'concurrency/mutex.c' || echo '$(srcdir)/'`concurrency/mutex.c
    1264 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-mutex.Tpo concurrency/$(DEPDIR)/libcfa_a-mutex.Po
    1265 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/mutex.c' object='concurrency/libcfa_a-mutex.o' libtool=no @AMDEPBACKSLASH@
    1266 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1267 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-mutex.o `test -f 'concurrency/mutex.c' || echo '$(srcdir)/'`concurrency/mutex.c
    1268 
    1269 concurrency/libcfa_a-mutex.obj: concurrency/mutex.c
    1270 @am__fastdepCC_TRUE@    $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-mutex.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-mutex.Tpo -c -o concurrency/libcfa_a-mutex.obj `if test -f 'concurrency/mutex.c'; then $(CYGPATH_W) 'concurrency/mutex.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/mutex.c'; fi`
    1271 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-mutex.Tpo concurrency/$(DEPDIR)/libcfa_a-mutex.Po
    1272 @AMDEP_TRUE@@am__fastdepCC_FALSE@       $(AM_V_CC)source='concurrency/mutex.c' object='concurrency/libcfa_a-mutex.obj' libtool=no @AMDEPBACKSLASH@
    1273 @AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1274 @am__fastdepCC_FALSE@   $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-mutex.obj `if test -f 'concurrency/mutex.c'; then $(CYGPATH_W) 'concurrency/mutex.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/mutex.c'; fi`
    12751239
    12761240libcfa_a-assert.o: assert.c
  • src/libcfa/bits/containers.h

    rc24ef9d red45af6  
    183183                verify( *tail == NULL );
    184184                return val;
    185         }
    186 
    187         forall(dtype T | is_node(T))
    188         static inline bool ?!=?( __queue(T) & this, zero_t zero ) with( this ) {
    189                 return head != 0;
    190185        }
    191186#endif
  • src/libcfa/concurrency/kernel

    rc24ef9d red45af6  
    4343extern struct cluster * mainCluster;
    4444
    45 enum FinishOpCode { No_Action, Release, Schedule, Release_Schedule, Release_Multi, Release_Multi_Schedule, Callback };
    46 
    47 typedef void (*__finish_callback_fptr_t)(void);
     45enum FinishOpCode { No_Action, Release, Schedule, Release_Schedule, Release_Multi, Release_Multi_Schedule };
    4846
    4947//TODO use union, many of these fields are mutually exclusive (i.e. MULTI vs NOMULTI)
    5048struct FinishAction {
    5149        FinishOpCode action_code;
    52         /*
    53         // Union of possible actions
    54         union {
    55                 // Option 1 : locks and threads
    56                 struct {
    57                         // 1 thread or N thread
    58                         union {
    59                                 thread_desc * thrd;
    60                                 struct {
    61                                         thread_desc ** thrds;
    62                                         unsigned short thrd_count;
    63                                 };
    64                         };
    65                         // 1 lock or N lock
    66                         union {
    67                                 __spinlock_t * lock;
    68                                 struct {
    69                                         __spinlock_t ** locks;
    70                                         unsigned short lock_count;
    71                                 };
    72                         };
    73                 };
    74                 // Option 2 : action pointer
    75                 __finish_callback_fptr_t callback;
    76         };
    77         /*/
    7850        thread_desc * thrd;
    79         thread_desc ** thrds;
    80         unsigned short thrd_count;
    8151        __spinlock_t * lock;
    8252        __spinlock_t ** locks;
    8353        unsigned short lock_count;
    84         __finish_callback_fptr_t callback;
    85         //*/
     54        thread_desc ** thrds;
     55        unsigned short thrd_count;
    8656};
    8757static inline void ?{}(FinishAction & this) {
  • src/libcfa/concurrency/kernel.c

    rc24ef9d red45af6  
    4949thread_desc * mainThread;
    5050
    51 struct { __dllist_t(cluster) list; __spinlock_t lock; } global_clusters;
     51struct { __dllist_t(cluster    ) list; __spinlock_t lock; } global_clusters;
    5252
    5353//-----------------------------------------------------------------------------
     
    257257// its final actions must be executed from the kernel
    258258void finishRunning(processor * this) with( this->finish ) {
    259         verify( ! kernelTLS.preemption_state.enabled );
    260         choose( action_code ) {
    261         case No_Action:
    262                 break;
    263         case Release:
     259        if( action_code == Release ) {
     260                verify( ! kernelTLS.preemption_state.enabled );
    264261                unlock( *lock );
    265         case Schedule:
     262        }
     263        else if( action_code == Schedule ) {
    266264                ScheduleThread( thrd );
    267         case Release_Schedule:
     265        }
     266        else if( action_code == Release_Schedule ) {
     267                verify( ! kernelTLS.preemption_state.enabled );
    268268                unlock( *lock );
    269269                ScheduleThread( thrd );
    270         case Release_Multi:
     270        }
     271        else if( action_code == Release_Multi ) {
     272                verify( ! kernelTLS.preemption_state.enabled );
    271273                for(int i = 0; i < lock_count; i++) {
    272274                        unlock( *locks[i] );
    273275                }
    274         case Release_Multi_Schedule:
     276        }
     277        else if( action_code == Release_Multi_Schedule ) {
    275278                for(int i = 0; i < lock_count; i++) {
    276279                        unlock( *locks[i] );
     
    279282                        ScheduleThread( thrds[i] );
    280283                }
    281         case Callback:
    282                 callback();
    283         default:
    284                 abort("KERNEL ERROR: Unexpected action to run after thread");
     284        }
     285        else {
     286                assert(action_code == No_Action);
    285287        }
    286288}
     
    495497}
    496498
    497 void BlockInternal(__finish_callback_fptr_t callback) {
    498         disable_interrupts();
    499         with( *kernelTLS.this_processor ) {
    500                 finish.action_code = Callback;
    501                 finish.callback    = callback;
    502         }
    503 
    504         verify( ! kernelTLS.preemption_state.enabled );
    505         returnToKernel();
    506         verify( ! kernelTLS.preemption_state.enabled );
    507 
    508         enable_interrupts( __cfaabi_dbg_ctx );
    509 }
    510 
    511499// KERNEL ONLY
    512500void LeaveThread(__spinlock_t * lock, thread_desc * thrd) {
  • src/libcfa/concurrency/kernel_private.h

    rc24ef9d red45af6  
    4848void BlockInternal(__spinlock_t * locks [], unsigned short count);
    4949void BlockInternal(__spinlock_t * locks [], unsigned short count, thread_desc * thrds [], unsigned short thrd_count);
    50 void BlockInternal(__finish_callback_fptr_t callback);
    5150void LeaveThread(__spinlock_t * lock, thread_desc * thrd);
    5251
  • src/libcfa/concurrency/monitor.c

    rc24ef9d red45af6  
    297297        this.count = count;
    298298
    299         // Sort monitors based on address
     299        // Sort monitors based on address -> TODO use a sort specialized for small numbers
    300300        __libcfa_small_sort(this.m, count);
    301301
Note: See TracChangeset for help on using the changeset viewer.