svn commit: r202983 - head/sys/mips/mips

Warner Losh imp at FreeBSD.org
Mon Jan 25 19:01:38 UTC 2010


Author: imp
Date: Mon Jan 25 19:01:38 2010
New Revision: 202983
URL: http://svn.freebsd.org/changeset/base/202983

Log:
  Store the mutex in the correct location.  Before, we were storing it
  in the pcb at the td_lock offset, rather than in the struct thread at
  the td_lock offset.  And we were storing a pointer to the old thread
  rather than to the mutex.  Why this didn't always kill us, I'll never
  know.
  
  Fix an obsolete comment and update the prototype in the comments.
  Also note what variables are in what registers since this function is
  a little complex...
  
  neel@ found this problem and proposed this fix.  This cures a number
  of different problem reports out there, and gets us booting octeon to
  the login prompt...
  
  Submitted by:	neel@
  Reviewed by:	rrs@, gonzo@

Modified:
  head/sys/mips/mips/swtch.S

Modified: head/sys/mips/mips/swtch.S
==============================================================================
--- head/sys/mips/mips/swtch.S	Mon Jan 25 18:52:47 2010	(r202982)
+++ head/sys/mips/mips/swtch.S	Mon Jan 25 19:01:38 2010	(r202983)
@@ -282,9 +282,10 @@ NON_LEAF(mips_cpu_throw, STAND_FRAME_SIZ
 END(mips_cpu_throw)
 
 /*
- *XXX Fixme:	should be written to new interface that requires lock
- *		storage.  We fake it for now.
- * cpu_switch(struct thread *old, struct thread *new);
+ * cpu_switch(struct thread *old, struct thread *new, struct mutex *mtx);
+ *	a0 - old
+ *	a1 - new
+ *	a2 - mtx
  * Find the highest priority process and resume it.
  */
 NON_LEAF(cpu_switch, STAND_FRAME_SIZE, ra)
@@ -323,7 +324,7 @@ getpc:
 	 * to be saved with the other registers do so here.
 	 */
 
-	sw	a3, TD_LOCK(a0)			# Switchout td_lock 
+	sw	a2, TD_LOCK(a3)			# Switchout td_lock 
 
 mips_sw1:
 #if defined(SMP) && defined(SCHED_ULE)


More information about the svn-src-head mailing list