PERFORCE change 95411 for review
Kip Macy
kmacy at FreeBSD.org
Mon Apr 17 04:37:39 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=95411
Change 95411 by kmacy at kmacy_storage:sun4v_rwbuf on 2006/04/17 04:37:20
ack IPIs
Affected files ...
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/interrupt.S#6 edit
Differences ...
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/interrupt.S#6 (text+ko) ====
@@ -36,9 +36,14 @@
#include "assym.s"
+
+#define PUTCHAR(x) \
+ mov x, %o0 ; \
+ mov CONS_WRITE, %o5 ; \
+ ta FAST_TRAP
+
ENTRY(intr_fast)
save %sp, -CCFSZ, %sp
-
1: ldx [PCPU(IRHEAD)], %l0
brnz,a,pt %l0, 2f
nop
@@ -143,7 +148,7 @@
! %g5 PC for fasttrap TL>0 handler
! %g1 arg 1
! %g2 arg 2
- ! %g3 queue base VA
+ ! %g3 queue base RA, ackmask
! %g4 queue size mask
! %g6 head ptr
mov CPU_MONDO_QUEUE_HEAD, %g1
@@ -152,7 +157,7 @@
ldxa [%g2]ASI_QUEUE, %g4 ! %g4 = tail ptr
cmp %g6, %g4
be,pn %xcc, 0f ! head == tail
- nop
+ nop
/*
* Get the address of the current CPU and index into
@@ -179,24 +184,26 @@
ldxa [%g3 + %g6]ASI_REAL, %g1 ! read data word 1
add %g6, 0x8, %g6 ! inc head 8 bytes
ldxa [%g3 + %g6]ASI_REAL, %g2 ! read data word 2
- add %g6, (INTR_REPORT_SIZE - 16) , %g6
- ! inc head to next record
+ add %g6, 0x8, %g6 ! inc head 8 bytes
+ ldxa [%g3 + %g6]ASI_REAL, %g7 ! read data word 3
+ add %g6, (INTR_REPORT_SIZE - 24) , %g6 ! inc head to next record
and %g6, %g4, %g6 ! and size mask for wrap around
mov CPU_MONDO_QUEUE_HEAD, %g3
stxa %g6, [%g3]ASI_QUEUE ! store head pointer
membar #Sync
-
+
+ mov %g7, %g3 ! ackmask
/*
* For now catch invalid PC being passed via cpu_mondo queue
*/
set KERNBASE, %g4
cmp %g5, %g4
bl,a,pn %xcc, 1f ! branch if bad %pc
- nop
+ nop
jmp %g5 ! jump to traphandler
- nop
+ nop
1:
! invalid trap handler, discard it for now
set cpu_mondo_invalid, %g4
@@ -236,6 +243,12 @@
* %g4 queue size mask
* %g6 head ptr
*/
+ mov %o0, %g1
+ mov %o5, %g6
+! PUTCHAR(0x2b)
+ mov %g1, %o0
+ mov %g6, %o5
+
mov DEV_MONDO_QUEUE_HEAD, %g1
ldxa [%g1]ASI_QUEUE, %g6 ! %g6 = head ptr
mov DEV_MONDO_QUEUE_TAIL, %g2
@@ -345,7 +358,7 @@
#endif /* lint */
ENTRY(tl_invlctx)
- mov %o0, %g3
+ mov %o0, %g2
mov %o1, %g4
mov %o2, %g5
mov %o3, %g6
@@ -361,19 +374,21 @@
ba panic_bad_hcall
mov MMU_DEMAP_CTX, %o1
1:
- mov %g3, %o0
+ mov %g2, %o0
mov %g4, %o1
mov %g5, %o2
mov %g6, %o3
mov %g7, %o5
- retry
+
+ ba,a,pt %xcc, set_ackmask
+ nop
END(tl_invlctx)
ENTRY(tl_invltlb)
mov %o0, %g1
mov %o1, %g2
- mov %o2, %g3
- mov %o5, %g4
+ mov %o2, %g4
+ mov %o5, %g5
mov %g0, %o0
mov %g0, %o1
@@ -383,12 +398,15 @@
brz,pt %o0, 1f
nop
ba panic_bad_hcall
+ mov MMU_DEMAP_ALL, %o1
1:
mov %g1, %o0
mov %g2, %o1
- mov %g3, %o2
- mov %g4, %o5
- retry
+ mov %g4, %o2
+ mov %g5, %o5
+
+ ba,a,pt %xcc, set_ackmask
+ nop
END(tl_invltlb)
ENTRY(tl_invlpg)
@@ -402,6 +420,21 @@
mov %g5, %o0
mov %g6, %o1
mov %g7, %o2
- retry
+ ba,a,pt %xcc, set_ackmask
+ nop
END(tl_invlpg)
-
+
+ENTRY(set_ackmask)
+ MAGIC_TRAP_ON
+ GET_PCPU_SCRATCH
+ ld [%g3], %g1
+ ld [PCPU(CPUMASK)], %g4
+1: or %g1, %g4, %g2
+ cas [%g3], %g1, %g2
+ cmp %g1, %g2
+ bne,pn %icc, 1b
+ mov %g2, %g1
+ MAGIC_TRAP_OFF
+ ba,a,pt %xcc, cpu_mondo
+ nop
+END(set_ackmask)
More information about the p4-projects
mailing list