* BUG: at kernel/sched.c:4031 __schedule()
@ 2007-04-06 13:29 Oleg Kechin
2007-04-07 7:49 ` Dirk Behme
0 siblings, 1 reply; 2+ messages in thread
From: Oleg Kechin @ 2007-04-06 13:29 UTC (permalink / raw)
To: linux-omap-open-source
Hi
I run 2.6.20-rt8 kernel on board like innovator1510 (OMAP5910 cpu)
I notice in boot string:
BUG: at kernel/sched.c:4031 __schedule()
kernel complain interrupts are enabled after schedule.
digging in sched.c I figured out that interrupts are disabled when cpu
enter __sched(),
but are enabled when it went out.
Playing with the code i can find out, that problem is in the next
fragment: (line 4024)
if (likely(prev != next)) {
next->timestamp = now;
rq->nr_switches++;
rq->curr = next;
++*switch_count;
prepare_task_switch(rq, next);
prev = context_switch(rq, prev, next);
barrier();
trace_special_pid(prev->pid, PRIO(prev), PRIO(current));
/*
* this_rq must be evaluated again because prev may have moved
* CPUs since it called schedule(), thus the 'rq' on its stack
* frame will be invalid.
*/
finish_task_switch(this_rq(), prev);
__preempt_enable_no_resched();
} else {
in prepare_task_switch(rq, next); interrupts are enabled,
but in finish_task_switch(this_rq(), prev); interrupts not disabled
(it look not symmetrical for me).
Can anybody tell - is this right behavior?
I think interrupts should be disabled somewhere in this fragment,
or may be, scheduler should not complain?
Oleg Kechin.
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: BUG: at kernel/sched.c:4031 __schedule()
2007-04-06 13:29 BUG: at kernel/sched.c:4031 __schedule() Oleg Kechin
@ 2007-04-07 7:49 ` Dirk Behme
0 siblings, 0 replies; 2+ messages in thread
From: Dirk Behme @ 2007-04-07 7:49 UTC (permalink / raw)
To: Oleg Kechin; +Cc: linux-omap-open-source
Oleg Kechin wrote:
> Hi
> I run 2.6.20-rt8 kernel on board like innovator1510 (OMAP5910 cpu)
> I notice in boot string:
> BUG: at kernel/sched.c:4031 __schedule()
> kernel complain interrupts are enabled after schedule.
>
> digging in sched.c I figured out that interrupts are disabled when cpu
> enter __sched(),
> but are enabled when it went out.
> Playing with the code i can find out, that problem is in the next
> fragment: (line 4024)
>
> if (likely(prev != next)) {
> next->timestamp = now;
> rq->nr_switches++;
> rq->curr = next;
> ++*switch_count;
>
> prepare_task_switch(rq, next);
> prev = context_switch(rq, prev, next);
> barrier();
> trace_special_pid(prev->pid, PRIO(prev), PRIO(current));
> /*
> * this_rq must be evaluated again because prev may have moved
> * CPUs since it called schedule(), thus the 'rq' on its stack
> * frame will be invalid.
> */
> finish_task_switch(this_rq(), prev);
> __preempt_enable_no_resched();
> } else {
>
> in prepare_task_switch(rq, next); interrupts are enabled,
> but in finish_task_switch(this_rq(), prev); interrupts not disabled
> (it look not symmetrical for me).
>
> Can anybody tell - is this right behavior?
> I think interrupts should be disabled somewhere in this fragment,
> or may be, scheduler should not complain?
Looks to me that this isn't an OMAP specific question. I
think linux-rt-users@vger.kernel.org list [1] is a better
place for this question.
Did you try a more recent -rt patch? They are updated
frequently with additional fixes.
Regards
Dirk
[1] http://rt.wiki.kernel.org/index.php/Mailinglists
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2007-04-07 7:49 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-04-06 13:29 BUG: at kernel/sched.c:4031 __schedule() Oleg Kechin
2007-04-07 7:49 ` Dirk Behme
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox