All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@zip.com.au>
To: Anton Altaparmakov <aia21@cam.ac.uk>
Cc: Robert Love <rml@tech9.net>, lkml <linux-kernel@vger.kernel.org>,
	Ingo Molnar <mingo@elte.hu>
Subject: Re: preempt-related hangs
Date: Sun, 24 Mar 2002 18:48:28 -0800	[thread overview]
Message-ID: <3C9E8FFC.6853A65C@zip.com.au> (raw)
In-Reply-To: <3C9E8767.4F57CB0A@zip.com.au> <5.1.0.14.2.20020325023128.03e40850@pop.cus.cam.ac.uk>

Anton Altaparmakov wrote:
> 
> At 02:11 25/03/02, Andrew Morton wrote:
> >Andrew Morton wrote:
> > >
> > > ..
> > > Kernel is 2.5.7, dual PIII.  When I enable preempt it
> > > locks during boot.
> >
> >OK, this patch fixed it.  I don't know why.
> 
> Er, because you disable preemption twice and it never gets enabled again? (-:
> 
> You probably meant that to be preemt_enable() at the bottom of the patch...
> That might not solve your problem of course... But with the patch you
> basically have completely disabled preemption, you might as well not
> configure it into the kernel. (-;

Yeah I know. Sheesh.  I don't even have time to test the fix
before you're on my act :)

Fixed-up workaround with a little debug check is below.

I think Robert's right - the problem is more likely to lie
with the migration thread handoff thingy.

--- 2.5.7/kernel/sched.c~preempt-lockup	Sun Mar 24 18:10:49 2002
+++ 2.5.7-akpm/kernel/sched.c	Sun Mar 24 18:25:29 2002
@@ -1561,6 +1561,8 @@ void set_cpus_allowed(task_t *p, unsigne
 	migration_req_t req;
 	runqueue_t *rq;
 
+	preempt_disable();
+
 	new_mask &= cpu_online_map;
 	if (!new_mask)
 		BUG();
@@ -1573,7 +1575,7 @@ void set_cpus_allowed(task_t *p, unsigne
 	 */
 	if (new_mask & (1UL << p->thread_info->cpu)) {
 		task_rq_unlock(rq, &flags);
-		return;
+		goto out;
 	}
 
 	init_MUTEX_LOCKED(&req.sem);
@@ -1583,6 +1585,8 @@ void set_cpus_allowed(task_t *p, unsigne
 	wake_up_process(rq->migration_thread);
 
 	down(&req.sem);
+out:
+	preempt_enable();
 }
 
 static volatile unsigned long migration_mask;
--- 2.5.7/kernel/exit.c~preempt-lockup	Sun Mar 24 18:31:39 2002
+++ 2.5.7-akpm/kernel/exit.c	Sun Mar 24 18:37:19 2002
@@ -489,6 +489,14 @@ NORET_TYPE void do_exit(long code)
 		panic("Attempted to kill the idle task!");
 	if (tsk->pid == 1)
 		panic("Attempted to kill init!");
+#ifdef CONFIG_PREEMPT
+	if (preempt_get_count()) {
+		printk(KERN_ERR "task `%s' exits with non-zero "
+				"preempt count: %d\n",
+				current->comm,
+				preempt_get_count());
+	}
+#endif
 	tsk->flags |= PF_EXITING;
 	del_timer_sync(&tsk->real_timer);
 

-

  parent reply	other threads:[~2002-03-25  2:50 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-03-25  1:59 preempt-related hangs Andrew Morton
2002-03-25  2:11 ` Andrew Morton
2002-03-25  2:30   ` Robert Love
2002-03-25  2:33   ` Anton Altaparmakov
2002-03-25  2:40     ` Robert Love
2002-03-25  2:48     ` Andrew Morton [this message]
2002-03-25  8:04 ` Zwane Mwaikambo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3C9E8FFC.6853A65C@zip.com.au \
    --to=akpm@zip.com.au \
    --cc=aia21@cam.ac.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=rml@tech9.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.