On Thu, 17 Jun 2004 14:55:08 -0700 (PDT),
marks <marks@xxxxxxxx> wrote:
>I've looked at the kernel code a bit (my first experience with kernel code
>and kdb so bear with me). I don't find anything named kdb_task_has_cpu
>but I do see a task_has_cpu. I'm attempting to determine if any of the
>applied patches changed the definition of task_has_cpu or any code that
>uses task_has_cpu. Is task_has_cpu the correct item for me to be
>examining?
I was looking at kdb v4.2 for xscale on 2.4.20, you appear to be
working on kdb v4.0 for 2.4.19. Why such an old kernel/kdb?
kdb_task_has_cpu() was added in kdb v4.1 to workaround several
scheduler bugs that made task_has_cpu() unreliable. You are hitting
one of these scheduler bugs, task_has_cpu() is always returning true on
your system.
>Also, I'd like to understand the output from the "ps" command in kdb a bit
>better. From what I see there is only one task in state "R" (running).
>All other tasks are in state "S" or state "D" (see the State column).
>This seems to me to indicate only one active task.
>
>Which column are you looking at that shows "All the tasks are marked as
>being active on cpu 0"?
The column with a heading of '[*]', which marks the task as owning the
cpu (task_has_cpu). You can have multiple tasks marked R (for running
_or_ runnable) but only one task can be active on a cpu at a time.
Upgrade to kdb v4.2 for xscale on 2.4.20 if possible. If that is not
possible then you will have to make task_has_cpu() reliable on your
arch. From memory, the problem is that task_has_cpu() checks
(tsk)->cpus_runnable != ~0UL but uni-processor systems do not change
the value of cpus_runnable when they switch a task off a cpu.
kernel/sched.c only calls task_release_cpu() for SMP builds which means
that cpus_runnable will always show cpu 0 for all tasks, even those
that are not on cpu 0 right now. That breaks task_has_cpu() which
breaks kdb. Which is why I added kdb_task_has_cpu() to get it right.
---------------------------
Use http://oss.sgi.com/ecartis to modify your settings or to unsubscribe.
|