PERFORCE change 97393 for review
Kip Macy
kmacy at FreeBSD.org
Thu May 18 05:51:14 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=97393
Change 97393 by kmacy at kmacy_storage:sun4v_rwbuf on 2006/05/18 05:50:23
fix case where we were trashing a register whose value we still needed
whene were noting a duplicate TSB value
remove dead code - use membar sync when locking until pmap is stable
Affected files ...
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/exception.S#53 edit
Differences ...
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/exception.S#53 (text+ko) ====
@@ -340,8 +340,8 @@
.endm
.macro resumable_error
- MAGIC_TRAP_ON
- MAGIC_EXIT
+ !MAGIC_TRAP_ON
+ !MAGIC_EXIT
clr %g3
sub %g0, 1, %g4
set trap, %g1
@@ -510,12 +510,14 @@
.endm
.macro spill_mixed
- MAGIC_EXIT
+! MAGIC_EXIT
+ nop
.align 128
.endm
.macro fill_mixed
- MAGIC_EXIT
+! MAGIC_EXIT
+ nop
.align 128
.endm
@@ -525,7 +527,6 @@
.endm
.macro tl0_pil_entry level, mask
-#if 1
wrpr %g0, 1, %gl
set \mask, %g1
clr %g2
@@ -533,25 +534,9 @@
wr %g1, 0, %clear_softint
ba %xcc, tl0_intr
mov \level, %g4
-#else
- mov 1, %g2
- sllx %g2, \level, %g1
- sllx %g2, 16, %g3
- or %g1, %g3, %g3
- or %g2, %g3, %g2
- wr %g2, %g0, %clear_softint
- retry
-#endif
.align 32
.endm
- .macro tl1_pil_entry level, mask
- set \mask, %g2
- ba %xcc, tl0_intr
- mov \level, %g1
- .align 32
- .endm
-
#define INTR(level, traplvl) \
tl ## traplvl ## _pil_entry level, 1 << level
@@ -931,14 +916,15 @@
nop
call spinlock_enter
nop
- jmpl %l3, %o7 ! call trap handler
+common_uintr:
+ jmpl %l3, %o7 ! call interrupt handler
mov %l7, %o0
call spinlock_exit
nop
b user_rtt
nop
common_utrap:
- jmpl %l3, %o7 ! call trap handler
+ jmpl %l3, %o7 ! call trap handler / syscall
mov %l7, %o0
ldx [PCPU_REG + PC_CURPCB], %g6
@@ -1318,7 +1304,7 @@
bge,pt %xcc, 0f
nop
call panic
- MAGIC_EXIT
+! MAGIC_EXIT
0:
#endif
@@ -1340,7 +1326,15 @@
#define LOADLOAD #LoadLoad
#define LOADSTORE #LoadStore
#define STORESTORE #StoreStore
-
+
+#ifdef WORKING
+#define ENTER LOADLOAD
+#define EXIT LOADSTORE|STORESTORE
+#else
+#define ENTER #Sync
+#define EXIT #Sync
+#endif
+
#define THE_LOCK_ENTER(addr, lock_bit, oldval, newval, label1) \
mov 1, lock_bit ; \
add addr, 8, addr ; \
@@ -1352,22 +1346,22 @@
casxa [addr]%asi, oldval, newval; \
cmp newval, oldval ; \
bne,pn %xcc, label1 ## b ; \
- membar LOADLOAD ; \
+ membar ENTER ; \
sub addr, 8, addr ;
#define THE_LOCK_EXIT(addr, lock_bit, tmp)\
- membar LOADSTORE | STORESTORE ; \
+ membar EXIT ; \
ldxa [addr + 8]%asi, tmp ; \
andn tmp, lock_bit, tmp ; \
stxa tmp, [addr + 8]%asi ;
#define HASH_LOOKUP(addr, tag, searchtag, faillabel, matchlabel) \
ldda [addr]%asi, tag ; \
- cmp tag, searchtag ; \
- be,pn %xcc, matchlabel ; \
- nop ; \
cmp tag, %g0 ; \
be,pn %xcc, faillabel ; \
+ nop ; \
+ cmp tag, searchtag ; \
+ be,pn %xcc, matchlabel ;\
nop
#define RESTORE_TRAPWIN(pcpu, cansave, label1, label2) \
@@ -1385,7 +1379,6 @@
label2:
ENTRY(hash_bucket_lock)
-! MAGIC_TRAP_ON
wr %g0, ASI_N, %asi
rdpr %pstate, %o1
and %o1, PSTATE_INTR_DISABLE, %o2
@@ -1585,7 +1578,7 @@
sllx %g3, TTE_SHIFT, %g3 ! masked byte offset
add %g3, %l3, %g3 ! TTE RA
-
+#if 0
#ifdef PMAP_DEBUG
ldxa [%g3]%asi, %l2
ldxa [%g3 + 8]%asi, %l3
@@ -1595,19 +1588,27 @@
bne,pt %xcc, 12f
nop
#ifndef SMP
- MAGIC_TRAP_ON;MAGIC_TRAP_ON;MAGIC_EXIT ! die if all we're doing
+! MAGIC_TRAP_ON;MAGIC_TRAP_ON;MAGIC_EXIT ! die if all we're doing
! is storing same data
#else
- mov %o0, %g1
+ mov %o0, %l2
mov %o5, %g4
PUTCHAR(0x5a)
- mov %g1, %o0
+ lda [PCPU_REG + PC_CPUID]%asi, %o0
+ add %o0, 0x30, %o0
+ PUTCHAR(%o0)
+ PUTCHAR(0x5a)
+ mov %l2, %o0
mov %g4, %o5
- MAGIC_TRAP_ON; MAGIC_TRAP_OFF
+! MAGIC_TRAP_ON; MAGIC_TRAP_OFF
#endif
12:
#endif
- stxa %g0, [%g3 + 8]%asi ! invalidate data
+#endif
+ stxa %g0, [%g3 + 8]%asi ! invalidate data
+#ifndef WORKING
+ membar #Sync
+#endif
stxa %l6, [%g3]%asi ! store tag
stxa %l7, [%g3 + 8]%asi ! store data
stxa %l7, [%g2 + 8]%asi ! update TTE with ref bit
@@ -1665,7 +1666,7 @@
PUTCHAR(0x5b)
PUTCHAR(0x5b)
PUTCHAR(0x5b)
- MAGIC_TRAP_ON;MAGIC_TRAP_ON;MAGIC_EXIT
+! MAGIC_TRAP_ON;MAGIC_TRAP_ON;MAGIC_EXIT
END(unsupported_fault_trap)
More information about the p4-projects
mailing list