PERFORCE change 92883 for review
Kip Macy
kmacy at FreeBSD.org
Mon Mar 6 15:02:37 PST 2006
http://perforce.freebsd.org/chv.cgi?CH=92883
Change 92883 by kmacy at kmacy_storage:sun4v_work on 2006/03/06 23:01:35
move data protection fault TLB flush inline
Affected files ...
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/exception.S#19 edit
Differences ...
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/exception.S#19 (text+ko) ====
@@ -261,8 +261,10 @@
.macro insn_miss
GET_MMFSA_SCRATCH(%g1) ! insn 1
- GET_HASH_SCRATCH(%g2) ! insn 2,3
- ba,pt %xcc, tsb_miss
+ ldda [%g0 + %g1]ASI_LDTD_REAL, %g4
+ addx %g1, 0x10, %g1
+ ldda [%g0 + %g1]ASI_LDTD_REAL, %g6
+ ba,pt %xcc, tsb_miss_handler
mov VTD_REF, %g3
.align 32
.endm
@@ -274,19 +276,25 @@
.endm
.macro data_miss
- GET_MMFSA_SCRATCH(%g1) ! insn 1
- GET_HASH_SCRATCH(%g2) ! insn 2,3
- add %g1, MMFSA_D_, %g1 ! set fsa to data
- ba,pt %xcc, tsb_miss
+ GET_MMFSA_SCRATCH(%g1) ! insn 1
+ add %g1, MMFSA_D_, %g1 ! set fsa to data
+ ldda [%g0 + %g1]ASI_LDTD_REAL, %g4
+ addx %g1, 0x10, %g1
+ ldda [%g0 + %g1]ASI_LDTD_REAL, %g6
+ ba,pt %xcc, tsb_miss_handler
mov VTD_REF, %g3
.align 32
.endm
.macro data_prot
GET_MMFSA_SCRATCH(%g1) ! insn 1
- GET_HASH_SCRATCH(%g2) ! insn 2,3
add %g1, MMFSA_D_, %g1 ! set fsa to data
- ba,pt %xcc, tsb_miss
+ ldda [%g0 + %g1]ASI_LDTD_REAL, %g4
+ addx %g1, 0x10, %g1
+ ldda [%g0 + %g1]ASI_LDTD_REAL, %g6
+ ! XXX patch this to branch to the tsb_miss_handler
+ ! on fixed revs of the HV
+ ba,pt %xcc, data_prot_handler
mov VTD_W, %g3
.align 32
.endm
@@ -1025,69 +1033,44 @@
END(tl0_intr)
-! The HV documentation is wrong
-! mappings are not already flushed befor taking a
-! data protection trap
-! IN:
-! %g2 == hash base
-! %g3 == flags
-! %g5 == fault addr
-! %g6 == context
-! %g1,%g4,%g7 temps
-! OUT:
-! %g6 <- TAG
-ontario_unmap_addr_errata_begin:
- ! do the unmap call
- mov %o0, %g1
- mov %o1, %g4
- mov %o2, %g7
- mov %g5, %o0
- mov %g6, %o1
- mov MAP_ITLB|MAP_DTLB, %o2
- ta MMU_UNMAP_ADDR
- mov %g1, %o0
- mov %g4, %o1
- mov %g7, %o2
- srlx %g5, TTARGET_VA_SHIFT, %g4
- sllx %g6, TTARGET_CTX_SHIFT, %g6
- ba,pt %xcc, tsb_miss_fault_handler
- or %g6, %g4, %g6
-ontario_unmap_addr_errata_end:
+
-! %g1==mmfsa (RA)
-! %g2==hash base (VA)
! %g3==TTE flags
+! %g4==fault type (if data miss)
+! %g5==fault addr
+! %g6==context
! internal usage:
! %g1==absolute index
-! %g2==pointer to hash entry
+! %g2==hash base, pointer to hash entry
! %g3==flag bits, TSB (RA)
! %g4==fault type,entry tag
! %g5==tag
! %g6==hash size, temp
! %g7 temp
-ENTRY(tsb_miss)
- ldda [%g0 + %g1]ASI_LDTD_REAL, %g4
- addx %g1, 0x10, %g1
- ldda [%g0 + %g1]ASI_LDTD_REAL, %g6
+ENTRY(data_prot_handler)
+! The HV documentation is wrong mappings are not already
+! flushed before taking a data protection trap
+ mov %o0, %g1
+ mov %o1, %g4 ! fault type not set on prot fault
+ mov %o2, %g7
+ mov %g5, %o0
+ mov %g6, %o1
+ mov MAP_ITLB|MAP_DTLB, %o2
+ ta MMU_UNMAP_ADDR
+ mov %g1, %o0
+ mov %g4, %o1
+ mov %g7, %o2
+ENTRY(tsb_miss_handler)
MAGIC_TRAP_ON
-/* these two instructions will be patched
- * at some point
- */
-#ifdef ONTARIO_UNMAP_ERRATA
- cmp %g3, VTD_W
- be,pn %xcc, ontario_unmap_addr_errata_begin
-#endif
- srlx %g5, TTARGET_VA_SHIFT, %g1
+
+ srlx %g5, TTARGET_VA_SHIFT, %g1
sllx %g6, TTARGET_CTX_SHIFT, %g6
or %g6, %g1, %g6 ! %g6 == search tag
-
-tsb_miss_fault_handler:
-
! %g4 == fault type %g5 == fault addr %g6 == tag
- ! XXX only handle normal miss for now
+ ! XXX only handle normal miss for now (look at fault type in the future)
#ifdef PMAP_DEBUG
cmp %g6, %g0 ! NULL ptr deref in kernel
bne,pt %xcc, 4f
@@ -1096,10 +1079,11 @@
illtrap ! give up
4:
#endif
- mov 1, %g7
+ mov 1, %g7
sllx %g7, PAGE_SHIFT, %g7
sub %g7, 1, %g7 ! %g7==PAGE_MASK
+ GET_HASH_SCRATCH(%g2) ! insn 2,3
and %g2, %g7, %g4 ! size stored in lower 13 bits
andn %g2, %g7, %g2 ! actual VA of hash
@@ -1209,7 +1193,8 @@
MAGIC_TRAP_OFF
retry
-END(tsb_miss)
+END(tsb_miss_handler)
+END(data_prot_handler)
/*
* Write to read-only page
More information about the p4-projects
mailing list