On Fri, Apr 4, 2008 at 10:23 PM, Robert P. J. Day <[EMAIL PROTECTED]>
wrote:

>
>  i'm still a bit unclear on the linked list traversal of kernel
> "tasks", given what i'm reading in some documentation someone sent me,
> and i'm thinking that this doc isn't quite correct.
>
>  the bullet points in this doc (whose identity shall remain
> concealed, to protect the innocent :-):
>
>  * Only default threads linked by tasks list_head
>  * Other threads not seen by for_each_process() macro
>  * Visible to do_each_thread() macro
>
>  now, if by "default thread" the author means the thread group
> leader, this doesn't seem right, does it?  that clearly suggests that
> only each thread group leader is on the system-wide task list.  i
> thought someone on this (mailing) list had already taken the position
> that, no, *all* threads need to be on the system-wide task list for
> proper scheduling.
>
>  and it gets more confusing if you examine the definition of those
> macros in sched.h:
>
> ====================
> #define next_task(p) \
>        list_entry(rcu_dereference((p)->tasks.next), struct task_struct,
> tasks)
>
> #define for_each_process(p) \
>        for (p = &init_task ; (p = next_task(p)) != &init_task ; )
>
> /*
>  * Careful: do_each_thread/while_each_thread is a double loop so
>  *          'break' will not work as expected - use goto instead.
>  */
> #define do_each_thread(g, t) \
>        for (g = t = &init_task ; (g = t = next_task(g)) != &init_task ; )
> do


this is a double loop

#define while_each_thread(g,t) \
while ((t = next_thread(t) != g)

this leads to the conclusion.....the document ur reading document is
correct.





> ====================
>
>  if i read this correctly, for_each_process() starts at the init task
> and simply traverses the system-wide task list, right?  but doesn't
> do_each_thread() appear to do the same thing?  that second macro does
> have an extra parameter but the logic appears to be identical, doesn't
> it?   it just starts at init_task and follows the next pointer.
>
>  is there something here i'm missing?  is this due to some historical
> cruft still lying around?  thanks.
>
> rday
> --
>
> ========================================================================
> Robert P. J. Day
> Linux Consulting, Training and Annoying Kernel Pedantry:
>    Have classroom, will lecture.
>
> http://crashcourse.ca                          Waterloo, Ontario, CANADA
> ========================================================================
>
> --
> To unsubscribe from this list: send an email with
> "unsubscribe kernelnewbies" to [EMAIL PROTECTED]
> Please read the FAQ at http://kernelnewbies.org/FAQ
>




cheers,
Nikhil

Reply via email to