Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/kernel.hfa

    r7768b8d rd4e68a6  
    106106        // Cluster from which to get threads
    107107        struct cluster * cltr;
    108         unsigned int id;
    109108
    110109        // Name of the processor
     
    158157}
    159158
    160 
    161 //-----------------------------------------------------------------------------
    162 // Cluster Tools
    163 struct __processor_id;
    164 
    165 // Reader-Writer lock protecting the ready-queue
    166 struct __clusterRWLock_t {
    167         // total cachelines allocated
    168         unsigned int max;
    169 
    170         // cachelines currently in use
    171         volatile unsigned int alloc;
    172 
    173         // cachelines ready to itereate over
    174         // (!= to alloc when thread is in second half of doregister)
    175         volatile unsigned int ready;
    176 
    177         // writer lock
    178         volatile bool lock;
    179 
    180         // data pointer
    181         __processor_id * data;
    182 };
    183 
    184 void  ?{}(__clusterRWLock_t & this);
    185 void ^?{}(__clusterRWLock_t & this);
    186 
    187 // Underlying sub quues of the ready queue
    188 struct __attribute__((aligned(128))) __intrusive_ready_queue_t {
    189         // spin lock protecting the queue
    190         volatile bool lock;
    191 
    192         // anchor for the head and the tail of the queue
    193         struct __sentinel_t {
    194                 struct thread_desc * next;
    195                 struct thread_desc * prev;
    196                 unsigned long long ts;
    197         } before, after;
    198 
    199         // Optional statistic counters
    200         #ifndef __CFA_NO_SCHED_STATS__
    201                 struct __attribute__((aligned(64))) {
    202                         // difference between number of push and pops
    203                         ssize_t diff;
    204 
    205                         // total number of pushes and pops
    206                         size_t  push;
    207                         size_t  pop ;
    208                 } stat;
    209         #endif
    210 };
    211 
    212 void  ?{}(__intrusive_ready_queue_t & this);
    213 void ^?{}(__intrusive_ready_queue_t & this);
    214 
    215159//-----------------------------------------------------------------------------
    216160// Cluster
    217161struct cluster {
    218162        // Ready queue locks
    219         __clusterRWLock_t ready_lock;
     163        __spinlock_t ready_queue_lock;
    220164
    221165        // Ready queue for threads
    222         __intrusive_ready_queue_t ready_queue;
     166        __queue_t(thread_desc) ready_queue;
    223167
    224168        // Name of the cluster
     
    230174        // List of processors
    231175        __spinlock_t proc_list_lock;
     176        __dllist_t(struct processor) procs;
    232177        __dllist_t(struct processor) idles;
     178        unsigned int nprocessors;
    233179
    234180        // List of threads
Note: See TracChangeset for help on using the changeset viewer.