Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 Jul 2006 04:10:22 GMT
From:      Kip Macy <kmacy@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 101681 for review
Message-ID:  <200607160410.k6G4AMPj072709@repoman.freebsd.org>

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

Change 101681 by kmacy@kmacy_storage:sun4v_work_stable on 2006/07/16 04:09:54

	fix unaligned panics from casuptr and fuword64 by not insisting that %asi was set 
	copyin / copyout use ASI_AIUS on sun4v not ASI_AIUP

Affected files ...

.. //depot/projects/kmacy_sun4v_stable/src/sys/sun4v/sun4v/trap.c#4 edit

Differences ...

==== //depot/projects/kmacy_sun4v_stable/src/sys/sun4v/sun4v/trap.c#4 (text+ko) ====

@@ -377,10 +377,16 @@
 			break;
 		case T_DATA_EXCEPTION:
 			printf("data exception on 0x%lx at 0x%lx\n", data, tf->tf_tpc);
-			printf("trap: %ld=%s: 0x%lx at 0x%lx:0x%lx\n", trapno, trap_msg[trap_conversion[trapno]], data, tf->tf_tpc, tf->tf_tnpc);
+			printf("trap: %ld=%s: 0x%lx at 0x%lx:0x%lx\n", trapno, 
+			       trap_msg[trap_conversion[trapno]], data, tf->tf_tpc, tf->tf_tnpc);
+               case T_ILLEGAL_INSTRUCTION:
+                       if (tf->tf_tpc > KERNBASE) {
+                               printf("illinstr: 0x%lx\n", tf->tf_tpc);
+                               printf("illinstr: 0x%x\n", *((uint32_t *)tf->tf_tpc));
+                       }
 		case T_DATA_ERROR:
-		case T_MEM_ADDRESS_NOT_ALIGNED:
-			if (tf->tf_asi == ASI_AIUP) {
+		case T_ALIGNMENT:
+			if (tf->tf_asi == ASI_AIUS) {
 				if (tf->tf_tpc >= (u_long)copy_nofault_begin &&
 				    tf->tf_tpc <= (u_long)copy_nofault_end) {
 					tf->tf_tpc = (u_long)copy_fault;
@@ -388,39 +394,29 @@
 					error = 0;
 					break;
 				}
-				if (tf->tf_tpc >= (u_long)fs_nofault_begin &&
-				    tf->tf_tpc <= (u_long)fs_nofault_end) {
-					tf->tf_tpc = (u_long)fs_fault;
-					tf->tf_tnpc = tf->tf_tpc + 4;
-					error = 0;
-					break;
-				}
-				/* this is really too permissive, but it is needed to cope with umtx's 
-				 * casuptr
-				 */
+				
+				printf("ASI_AIUS but bad tpc\n");
+			} 
+			if (tf->tf_tpc >= (u_long)fs_nofault_begin &&
+			    tf->tf_tpc <= (u_long)fs_nofault_end) {
 				tf->tf_tpc = (u_long)fs_fault;
 				tf->tf_tnpc = tf->tf_tpc + 4;
 				error = 0;
-				break;
-				
-				
+					break;
 			}
+			printf("asi=0x%lx\n", tf->tf_asi);
 			error = 1;	
 			break;
-
-               case T_ILLEGAL_INSTRUCTION:
-                       if (tf->tf_tpc > KERNBASE) {
-                               printf("illinstr: 0x%lx\n", tf->tf_tpc);
-                               printf("illinstr: 0x%x\n", *((uint32_t *)tf->tf_tpc));
-                       }
-
 		default:
+			printf("unchecked trap 0x%lx asi=0x%lx\n", trapno, tf->tf_asi);
 			error = 1;
 			break;
 		}
 
 		if (error != 0)
-			panic("trap: %ld=%s: 0x%lx at 0x%lx:0x%lx error=%d", trapno, trap_msg[trap_conversion[trapno]], data, tf->tf_tpc, tf->tf_tnpc, error);
+			panic("trap: %ld=%s: 0x%lx at 0x%lx:0x%lx error=%d asi=0x%lx", 
+			      trapno, trap_msg[trap_conversion[trapno]], data, tf->tf_tpc, 
+			      tf->tf_tnpc, error, tf->tf_asi);
 	}
 	CTR1(KTR_TRAP, "trap: td=%p return", td);
 }



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