PERFORCE change 101681 for review
Kip Macy
kmacy at FreeBSD.org
Sun Jul 16 04:10:23 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=101681
Change 101681 by kmacy at 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);
}
More information about the p4-projects
mailing list