[ECOS] some doubts in mlqueue.cxx code

sandeep shimple0@yahoo.com
Sat Nov 20 18:34:00 GMT 2004


There is this code fragment in timeslice_cpu and yield functions in mlqueue.cxx

-----------------------------------------------------------------
ifdef CYGPKG_KERNEL_SMP_SUPPORT
    // In SMP systems we set the head of the queue to point to
    // the thread immediately after the current
    // thread. schedule() will then pick that thread, or one
    // after it to run next.

    queue->to_head( thread->get_next() );
#else
    queue->rotate();
#endif
-----------------------------------------------------------------

I am missing something in understanding the things here.

how the actions of rotating and to_head(get_next) are different?
except for the case when head is NULL.
but will NULL head situation ever arise in these functions?

the two codes fragments following above mentioned code fragment in both the 
functions are slightly different.

timeslice_cpu
-------------
if( queue->get_head() != thread )
    sched->set_need_reschedule();

timeslice_count[cpu_this] = CYGNUM_KERNEL_SCHED_TIMESLICE_TICKS;

yield
-----
if( queue->get_head() != thread )
    sched->set_need_reschedule();

#ifdef CYGSEM_KERNEL_SCHED_TIMESLICE
    // Reset the timeslice counter so that this thread gets a full
    // quantum.
    else Cyg_Scheduler::reset_timeslice_count();
#endif

The confusion is about timeslice_cpu function -
- shouldn't "timeslice_count.....= ... " be under #ifdef ??
- shouldn't it be "else timeslice_count.... = ..." ??
   won't timeslice_count be reset during scheduling in unlock_inner?? though a 
redundant action doesn't change much in logic (but for couple of more 
instructions executions, if one bothers about little here, little there).

any help in understanding things is welcome.
--
sandeep


-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss



More information about the Ecos-discuss mailing list