Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 May 2011 14:47:20 +0000 (UTC)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r221893 - head/sys/ia64/ia64
Message-ID:  <201105141447.p4EElKKb006522@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marcel
Date: Sat May 14 14:47:19 2011
New Revision: 221893
URL: http://svn.freebsd.org/changeset/base/221893

Log:
  Sharpening the saw:
  o   Clobber the register that holds the restart token immediately after
      crossing the restart point. This prevents false positives (i.e. a
      nested exception that we don't know can happen and that is being
      treated as one we know by virtue of a lingering restart token).
  o   Now that the bootstrap kernel stack is free, switch onto it and call
      trap() for nested traps that we don't know about. In trap we panic()
      so that we can analyze the condition.

Modified:
  head/sys/ia64/ia64/exception.S

Modified: head/sys/ia64/ia64/exception.S
==============================================================================
--- head/sys/ia64/ia64/exception.S	Sat May 14 14:42:12 2011	(r221892)
+++ head/sys/ia64/ia64/exception.S	Sat May 14 14:47:19 2011	(r221893)
@@ -202,13 +202,13 @@ exception_save_restart:
 {	.mmi
 	st8		[r30]=r19,16		// length
 	st8		[r31]=r0,16		// flags
-	add		r19=16,r19
+	add		r29=16,r19		// Clobber restart token
 	;;
 }
 {	.mmi
 	st8.spill	[r30]=sp,16		// sp
 	st8		[r31]=r20,16		// unat
-	sub		sp=r23,r19
+	sub		sp=r23,r29
 	;;
 }
 {	.mmi
@@ -641,7 +641,7 @@ exception_restore_restart:
 	mov		r30=ar.bspstore
 	;;
 	loadrs					// load user regs
-	nop		0
+	mov		r29=0			// Clobber restart token
 	;;
 }
 {	.mmi
@@ -1094,22 +1094,26 @@ IVT_ENTRY(Data_Nested_TLB, 0x1400)
 }
 {	.mlx
 	mov		r26=ar.bsp
-	movl		r27=kstack
+	movl		r29=kstack
 	;;
 }
-{	.mmi
+{	.mlx
 	mov		r28=sp
-	nop		0
-	addl		r27=KSTACK_PAGES*PAGE_SIZE-16,r0
+	movl		r27=kstack_top
 	;;
 }
 {	.mmi
-	mov		sp=r27
+	add		sp=-16,r27
 	;;
 	mov		r27=ar.bspstore
 	nop		0
 	;;
 }
+	mov		ar.rsc=0
+	dep		r29=r27,r29,0,9
+	;;
+	mov		ar.bspstore=r29
+	;;
 	CALL(trap, 5, r30)
 IVT_END(Data_Nested_TLB)
 



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