Messages in this thread Patch in this message | | | Subject | Re: [PATCH][GIT PULL] tracing: Fix compile issue for trace_sched_wakeup.c | From | Peter Zijlstra <> | Date | Fri, 22 Oct 2010 10:14:31 +0200 |
| |
On Thu, 2010-10-21 at 21:44 -0400, Jason Baron wrote:
> I finally found that we actually continue to run after the above > apparent 'hang'. That is, we continue to make progress updating the jump > labels. And doing a dump of all the system tasks at the time of the hang > showed the processes in various places besides the stop machine threads. > Thus, I thought that perhaps, for some reason the stop machine threads > weren't being scheduled. > > Thus, I tried commenting out the special scheduling that is set up for > stop machine threads, and that fixed the hang. I haven't yet looked into > what might be going wrong with that scheduling...but maybe somebody else > knows...
Hrmm, so are you saying rq->stop was runnable but not running?
That would imply broken wakeup-preemption, does something like the below cure that?
--- kernel/sched_stoptask.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/kernel/sched_stoptask.c b/kernel/sched_stoptask.c index 45bddc0..50ad10f 100644 --- a/kernel/sched_stoptask.c +++ b/kernel/sched_stoptask.c @@ -35,6 +35,7 @@ static struct task_struct *pick_next_task_stop(struct rq *rq) static void enqueue_task_stop(struct rq *rq, struct task_struct *p, int flags) { + resched_cpu(cpu_of(rq)); } static void
| |