Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/kernel/cluster.cfa

    radb3ea1 r708ae38  
    253253}
    254254
    255 static void assign_list(unsigned & valrq, unsigned & valio, dlist(processor) & list, unsigned count) {
     255static void assign_list(unsigned & value, dlist(processor) & list, unsigned count) {
    256256        processor * it = &list`first;
    257257        for(unsigned i = 0; i < count; i++) {
    258258                /* paranoid */ verifyf( it, "Unexpected null iterator, at index %u of %u\n", i, count);
    259                 it->rdq.id = valrq;
     259                it->rdq.id = value;
    260260                it->rdq.target = MAX;
    261                 it->io.id = valio;
    262                 it->io.target = MAX;
    263                 valrq += __shard_factor.readyq;
    264                 valio += __shard_factor.io;
     261                value += __shard_factor.readyq;
    265262                it = &(*it)`next;
    266263        }
     
    268265
    269266static void reassign_cltr_id(struct cluster * cltr) {
    270         unsigned prefrq = 0;
    271         unsigned prefio = 0;
    272         assign_list(prefrq, prefio, cltr->procs.actives, cltr->procs.total - cltr->procs.idle);
    273         assign_list(prefrq, prefio, cltr->procs.idles  , cltr->procs.idle );
    274 }
    275 
    276 static void assign_io($io_context ** data, size_t count, dlist(processor) & list) {
    277         processor * it = &list`first;
    278         while(it) {
    279                 /* paranoid */ verifyf( it, "Unexpected null iterator\n");
    280                 /* paranoid */ verifyf( it->io.id < count, "Processor %p has id %u above count %zu\n", it, it->rdq.id, count);
    281                 data[it->io.id] = it->io.ctx;
    282                 it = &(*it)`next;
    283         }
    284 }
    285 
    286 static void reassign_cltr_io(struct cluster * cltr) {
    287         assign_io(cltr->sched.io.data, cltr->sched.io.count, cltr->procs.actives);
    288         assign_io(cltr->sched.io.data, cltr->sched.io.count, cltr->procs.idles  );
     267        unsigned preferred = 0;
     268        assign_list(preferred, cltr->procs.actives, cltr->procs.total - cltr->procs.idle);
     269        assign_list(preferred, cltr->procs.idles  , cltr->procs.idle );
    289270}
    290271
     
    341322
    342323        // Fix the io times
    343         cltr->sched.io.count = target * __shard_factor.io;
     324        cltr->sched.io.count = target;
    344325        fix_times(cltr->sched.io.tscs, cltr->sched.io.count);
    345326
     
    349330        // reassign the clusters.
    350331        reassign_cltr_id(cltr);
    351 
    352         cltr->sched.io.data = alloc( cltr->sched.io.count, cltr->sched.io.data`realloc );
    353         reassign_cltr_io(cltr);
    354332
    355333        // Make sure that everything is consistent
     
    433411
    434412        // Fix the io times
    435         cltr->sched.io.count = target * __shard_factor.io;
     413        cltr->sched.io.count = target;
    436414        fix_times(cltr->sched.io.tscs, cltr->sched.io.count);
    437415
    438416        reassign_cltr_id(cltr);
    439 
    440         cltr->sched.io.data = alloc( cltr->sched.io.count, cltr->sched.io.data`realloc );
    441         reassign_cltr_io(cltr);
    442417
    443418        // Make sure that everything is consistent
Note: See TracChangeset for help on using the changeset viewer.