Changes in / [520145b:d893266a]


Ignore:
Location:
src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • src/Common/SemanticError.h

    r520145b rd893266a  
    7272}
    7373
     74
     75
     76
    7477// Local Variables: //
    7578// tab-width: 4 //
  • src/libcfa/concurrency/kernel

    r520145b rd893266a  
    7979
    8080// Processor
    81 coroutine processorCtx_t {
    82         struct processor * proc;
    83 };
    84 
    8581// Wrapper around kernel threads
    8682struct processor {
    8783        // Main state
    8884        // Coroutine ctx who does keeps the state of the processor
    89         struct processorCtx_t runner;
     85        struct processorCtx_t * runner;
    9086
    9187        // Cluster from which to get threads
  • src/libcfa/concurrency/kernel.c

    r520145b rd893266a  
    124124//-----------------------------------------------------------------------------
    125125// Processor coroutine
    126 void ?{}(processorCtx_t & this) {}
    127126
    128127// Construct the processor context of the main processor
     
    131130        this.__cor.starter = NULL;
    132131        this.proc = proc;
     132        proc->runner = &this;
    133133}
    134134
     
    137137        (this.__cor){ info };
    138138        this.proc = proc;
     139        proc->runner = &this;
    139140}
    140141
     
    149150        preemption_alarm = NULL;
    150151        pending_preemption = false;
    151         runner.proc = &this;
    152152
    153153        start( &this );
     
    161161        pending_preemption = false;
    162162        kernel_thread = pthread_self();
    163         runner.proc = &this;
    164 
     163
     164        this.runner = &runner;
    165165        __cfaabi_dbg_print_safe("Kernel : constructing main processor context %p\n", &runner);
    166166        runner{ &this };
     
    196196void main(processorCtx_t & runner) {
    197197        processor * this = runner.proc;
    198         verify(this);
    199198
    200199        __cfaabi_dbg_print_safe("Kernel : core %p starting\n", this);
     
    242241void runThread(processor * this, thread_desc * dst) {
    243242        assert(dst->curr_cor);
    244         coroutine_desc * proc_cor = get_coroutine(this->runner);
     243        coroutine_desc * proc_cor = get_coroutine(*this->runner);
    245244        coroutine_desc * thrd_cor = dst->curr_cor;
    246245
     
    257256
    258257void returnToKernel() {
    259         coroutine_desc * proc_cor = get_coroutine(this_processor->runner);
     258        coroutine_desc * proc_cor = get_coroutine(*this_processor->runner);
    260259        coroutine_desc * thrd_cor = this_thread->curr_cor = this_coroutine;
    261260        ThreadCtxSwitch(thrd_cor, proc_cor);
     
    318317        machine_context_t ctx;
    319318        info.context = &ctx;
    320         (proc->runner){ proc, &info };
    321 
    322         __cfaabi_dbg_print_safe("Coroutine : created stack %p\n", get_coroutine(proc->runner)->stack.base);
     319        processorCtx_t proc_cor_storage = { proc, &info };
     320
     321        __cfaabi_dbg_print_safe("Coroutine : created stack %p\n", proc_cor_storage.__cor.stack.base);
    323322
    324323        //Set global state
    325         this_coroutine = get_coroutine(proc->runner);
     324        this_coroutine = &proc->runner->__cor;
    326325        this_thread = NULL;
    327326
    328327        //We now have a proper context from which to schedule threads
    329         __cfaabi_dbg_print_safe("Kernel : core %p created (%p, %p)\n", proc, &proc->runner, &ctx);
     328        __cfaabi_dbg_print_safe("Kernel : core %p created (%p, %p)\n", proc, proc->runner, &ctx);
    330329
    331330        // SKULLDUGGERY: Since the coroutine doesn't have its own stack, we can't
     
    333332        // back to here. Instead directly call the main since we already are on the
    334333        // appropriate stack.
    335         get_coroutine(proc->runner)->state = Active;
    336         main( proc->runner );
    337         get_coroutine(proc->runner)->state = Halted;
     334        proc_cor_storage.__cor.state = Active;
     335        main( proc_cor_storage );
     336        proc_cor_storage.__cor.state = Halted;
    338337
    339338        // Main routine of the core returned, the core is now fully terminated
    340         __cfaabi_dbg_print_safe("Kernel : core %p main ended (%p)\n", proc, &proc->runner);
     339        __cfaabi_dbg_print_safe("Kernel : core %p main ended (%p)\n", proc, proc->runner);
    341340
    342341        return NULL;
     
    353352void kernel_first_resume(processor * this) {
    354353        coroutine_desc * src = this_coroutine;
    355         coroutine_desc * dst = get_coroutine(this->runner);
     354        coroutine_desc * dst = get_coroutine(*this->runner);
    356355
    357356        verify( !preemption_state.enabled );
    358357
    359358        create_stack(&dst->stack, dst->stack.size);
    360         CtxStart(&this->runner, CtxInvokeCoroutine);
     359        CtxStart(this->runner, CtxInvokeCoroutine);
    361360
    362361        verify( !preemption_state.enabled );
     
    412411        verify( !preemption_state.enabled );
    413412        lock( ready_queue_lock __cfaabi_dbg_ctx2 );
     413        //TEMP hack to find a bug
     414        if(this_processor != mainProcessor) {
     415                if(ready_queue.head == mainThread) {
     416                        unlock( ready_queue_lock );
     417                        return NULL;
     418                }
     419        }
     420
    414421        thread_desc * head = pop_head( ready_queue );
    415422        unlock( ready_queue_lock );
     
    577584        // Destroy the main processor and its context in reverse order of construction
    578585        // These were manually constructed so we need manually destroy them
    579         ^(mainProcessor->runner){};
     586        ^(*mainProcessor->runner){};
    580587        ^(mainProcessor){};
    581588
  • src/libcfa/concurrency/kernel_private.h

    r520145b rd893266a  
    5252//-----------------------------------------------------------------------------
    5353// Processor
     54coroutine processorCtx_t {
     55        processor * proc;
     56};
     57
    5458void main(processorCtx_t *);
    5559void start(processor * this);
  • src/tests/Makefile.am

    r520145b rd893266a  
    123123        ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
    124124
    125 # Warnings
    126125warnings/self-assignment: warnings/self-assignment.c @CFA_BINDIR@/@CFA_NAME@
    127         ${CC} ${AM_CFLAGS} ${CFLAGS} ${<} 2> ${@} -fsyntax-only
     126        ${CC} ${AM_CFLAGS} ${CFLAGS} ${<} -o ${@}
     127        echo > ${@}
  • src/tests/Makefile.in

    r520145b rd893266a  
    800800        ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
    801801
    802 # Warnings
    803802warnings/self-assignment: warnings/self-assignment.c @CFA_BINDIR@/@CFA_NAME@
    804         ${CC} ${AM_CFLAGS} ${CFLAGS} ${<} 2> ${@} -fsyntax-only
     803        ${CC} ${AM_CFLAGS} ${CFLAGS} ${<} -o ${@}
     804        echo > ${@}
    805805
    806806# Tell versions [3.59,3.63) of GNU make to not export all variables.
  • src/tests/warnings/.expect/self-assignment.txt

    r520145b rd893266a  
    1 warnings/self-assignment.c:29:1 warning: self assignment of expression: Cast of:
    2   Variable Expression: j: signed int
    3 ... to:
    4   reference to signed int
    5 warnings/self-assignment.c:30:1 warning: self assignment of expression: Cast of:
    6   Variable Expression: s: instance of struct S with body 1
    7 ... to:
    8   reference to instance of struct S with body 1
    9 warnings/self-assignment.c:31:1 warning: self assignment of expression: Cast of:
    10   Member Expression, with field:
    11     i: signed int
    12   ... from aggregate:
    13     Variable Expression: s: instance of struct S with body 1
    14 ... to:
    15   reference to signed int
    16 warnings/self-assignment.c:32:1 warning: self assignment of expression: Cast of:
    17   Member Expression, with field:
    18     i: signed int
    19   ... from aggregate:
    20     Member Expression, with field:
    21       s: instance of struct S with body 1
    22     ... from aggregate:
    23       Variable Expression: t: instance of struct T with body 1
    24 ... to:
    25   reference to signed int
Note: See TracChangeset for help on using the changeset viewer.