- Timestamp:
- Feb 17, 2021, 12:53:05 PM (3 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 376946e
- Parents:
- 95b3a9c (diff), eb24cec0 (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. - Location:
- libcfa/src/concurrency
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/coroutine.cfa
r95b3a9c re7c077a 196 196 197 197 void __stack_clean ( __stack_info_t * this ) { 198 size_t size = ((intptr_t)this->storage->base) - ((intptr_t)this->storage->limit) + sizeof(__stack_t);199 198 void * storage = this->storage->limit; 200 199 201 200 #if CFA_COROUTINE_USE_MMAP 201 size_t size = ((intptr_t)this->storage->base) - ((intptr_t)this->storage->limit) + sizeof(__stack_t); 202 202 storage = (void *)(((intptr_t)storage) - __page_size); 203 203 if(munmap(storage, size + __page_size) == -1) { -
libcfa/src/concurrency/kernel.cfa
r95b3a9c re7c077a 109 109 static void __run_thread(processor * this, $thread * dst); 110 110 static void __wake_one(cluster * cltr); 111 static void wait(__bin_sem_t & this); 111 112 112 113 static void push (__cluster_idles & idles, processor & proc); … … 548 549 // Kernel Idle Sleep 549 550 //============================================================================================= 551 extern "C" { 552 char * strerror(int); 553 } 554 #define CHECKED(x) { int err = x; if( err != 0 ) abort("KERNEL ERROR: Operation \"" #x "\" return error %d - %s\n", err, strerror(err)); } 555 556 static void wait(__bin_sem_t & this) with( this ) { 557 verify(__cfaabi_dbg_in_kernel()); 558 CHECKED( pthread_mutex_lock(&lock) ); 559 while(val < 1) { 560 pthread_cond_wait(&cond, &lock); 561 } 562 val -= 1; 563 CHECKED( pthread_mutex_unlock(&lock) ); 564 } 565 566 static bool post(__bin_sem_t & this) with( this ) { 567 bool needs_signal = false; 568 569 CHECKED( pthread_mutex_lock(&lock) ); 570 if(val < 1) { 571 val += 1; 572 pthread_cond_signal(&cond); 573 needs_signal = true; 574 } 575 CHECKED( pthread_mutex_unlock(&lock) ); 576 577 return needs_signal; 578 } 579 580 #undef CHECKED 581 550 582 // Wake a thread from the front if there are any 551 583 static void __wake_one(cluster * this) { -
libcfa/src/concurrency/kernel.hfa
r95b3a9c re7c077a 34 34 #endif 35 35 36 extern "C" {37 char * strerror(int);38 }39 #define CHECKED(x) { int err = x; if( err != 0 ) abort("KERNEL ERROR: Operation \"" #x "\" return error %d - %s\n", err, strerror(err)); }40 41 36 struct __bin_sem_t { 42 37 pthread_mutex_t lock; … … 44 39 int val; 45 40 }; 46 47 static inline void ?{}(__bin_sem_t & this) with( this ) {48 // Create the mutex with error checking49 pthread_mutexattr_t mattr;50 pthread_mutexattr_init( &mattr );51 pthread_mutexattr_settype( &mattr, PTHREAD_MUTEX_ERRORCHECK_NP);52 pthread_mutex_init(&lock, &mattr);53 54 pthread_cond_init (&cond, (const pthread_condattr_t *)0p); // workaround trac#208: cast should not be required55 val = 0;56 }57 58 static inline void ^?{}(__bin_sem_t & this) with( this ) {59 CHECKED( pthread_mutex_destroy(&lock) );60 CHECKED( pthread_cond_destroy (&cond) );61 }62 63 static inline void wait(__bin_sem_t & this) with( this ) {64 verify(__cfaabi_dbg_in_kernel());65 CHECKED( pthread_mutex_lock(&lock) );66 while(val < 1) {67 pthread_cond_wait(&cond, &lock);68 }69 val -= 1;70 CHECKED( pthread_mutex_unlock(&lock) );71 }72 73 static inline bool post(__bin_sem_t & this) with( this ) {74 bool needs_signal = false;75 76 CHECKED( pthread_mutex_lock(&lock) );77 if(val < 1) {78 val += 1;79 pthread_cond_signal(&cond);80 needs_signal = true;81 }82 CHECKED( pthread_mutex_unlock(&lock) );83 84 return needs_signal;85 }86 87 #undef CHECKED88 89 41 90 42 //----------------------------------------------------------------------------- -
libcfa/src/concurrency/kernel/startup.cfa
r95b3a9c re7c077a 80 80 static void ?{}(processorCtx_t & this) {} 81 81 static void ?{}(processorCtx_t & this, processor * proc, current_stack_info_t * info); 82 static void ?{}(__bin_sem_t & this); 83 static void ^?{}(__bin_sem_t & this); 82 84 83 85 #if defined(__CFA_WITH_VERIFY__) … … 736 738 } 737 739 740 extern "C" { 741 char * strerror(int); 742 } 743 #define CHECKED(x) { int err = x; if( err != 0 ) abort("KERNEL ERROR: Operation \"" #x "\" return error %d - %s\n", err, strerror(err)); } 744 745 static void ?{}(__bin_sem_t & this) with( this ) { 746 // Create the mutex with error checking 747 pthread_mutexattr_t mattr; 748 pthread_mutexattr_init( &mattr ); 749 pthread_mutexattr_settype( &mattr, PTHREAD_MUTEX_ERRORCHECK_NP); 750 pthread_mutex_init(&lock, &mattr); 751 752 pthread_cond_init (&cond, (const pthread_condattr_t *)0p); // workaround trac#208: cast should not be required 753 val = 0; 754 } 755 756 static void ^?{}(__bin_sem_t & this) with( this ) { 757 CHECKED( pthread_mutex_destroy(&lock) ); 758 CHECKED( pthread_cond_destroy (&cond) ); 759 } 760 761 #undef CHECKED 738 762 739 763 #if defined(__CFA_WITH_VERIFY__) -
libcfa/src/concurrency/ready_queue.cfa
r95b3a9c re7c077a 330 330 #if defined(BIAS) 331 331 // Don't bother trying locally too much 332 int local_tries = 8;333 332 preferred = kernelTLS().this_processor->id * 4; 334 333 #endif
Note: See TracChangeset
for help on using the changeset viewer.