Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Mar 2004 11:35:56 -0800 (PST)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 48811 for review
Message-ID:  <200403121935.i2CJZuo1063271@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=48811

Change 48811 by jhb@jhb_slimer on 2004/03/12 11:35:28

	Possibly fix ithread preemption on alpha.  I don't have the DS20 fired up
	to test this, but I can send it to the list.  When I've tried preemption
	in the past on alpha it would lock up under load on an SMP machine.

Affected files ...

.. //depot/projects/smpng/sys/alpha/alpha/interrupt.c#24 edit

Differences ...

==== //depot/projects/smpng/sys/alpha/alpha/interrupt.c#24 (text+ko) ====

@@ -447,8 +447,16 @@
 		    "alpha_dispatch_intr: disabling vector 0x%x", i->vector);
 		ithd->it_disable(ithd->it_vector);
 	}
-	error = ithread_schedule(ithd, 0 /* !cold */);
+
+	/*
+	 * It seems that we need to return from an interrupt back to PAL
+	 * on the same CPU that received the interrupt, so pin the interrupted
+	 * thread to the current CPU until we return from the interrupt.
+	 */
+	sched_pin();
+	error = ithread_schedule(ithd, !cold);
 	KASSERT(error == 0, ("got an impossible stray interrupt"));
+	sched_unpin();
 }
 
 static void



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200403121935.i2CJZuo1063271>