PERFORCE change 92940 for review
Kip Macy
kmacy at FreeBSD.org
Tue Mar 7 14:16:12 PST 2006
http://perforce.freebsd.org/chv.cgi?CH=92940
Change 92940 by kmacy at kmacy_storage:sun4v_work on 2006/03/07 22:15:23
TLB demap needs to happen after the TSB has been updated to avoid
a CMT race
Affected files ...
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/exception.S#20 edit
Differences ...
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/exception.S#20 (text+ko) ====
@@ -260,10 +260,12 @@
.endm
.macro insn_miss
- GET_MMFSA_SCRATCH(%g1) ! insn 1
- ldda [%g0 + %g1]ASI_LDTD_REAL, %g4
- addx %g1, 0x10, %g1
- ldda [%g0 + %g1]ASI_LDTD_REAL, %g6
+ GET_MMFSA_SCRATCH(%g1)
+ mov MMFSA_D_TYPE, %g2
+ mov MMFSA_D_ADDR, %g3
+ mov MMFSA_D_CTX, %g7
+ ldxa [%g1 + %g2]ASI_REAL, %g4
+ ldxa [%g1 + %g3]ASI_REAL, %g5
ba,pt %xcc, tsb_miss_handler
mov VTD_REF, %g3
.align 32
@@ -276,25 +278,23 @@
.endm
.macro data_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
+ GET_MMFSA_SCRATCH(%g1)
+ mov MMFSA_D_TYPE, %g2
+ mov MMFSA_D_ADDR, %g3
+ mov MMFSA_D_CTX, %g7
+ ldxa [%g1 + %g2]ASI_REAL, %g4
+ ldxa [%g1 + %g3]ASI_REAL, %g5
ba,pt %xcc, tsb_miss_handler
mov VTD_REF, %g3
.align 32
.endm
.macro data_prot
- 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
- ! XXX patch this to branch to the tsb_miss_handler
- ! on fixed revs of the HV
- ba,pt %xcc, data_prot_handler
+ GET_MMFSA_SCRATCH(%g1)
+ mov MMFSA_D_ADDR, %g3
+ mov MMFSA_D_CTX, %g7
+ ldxa [%g1 + %g3]ASI_REAL, %g5
+ ba,pt %xcc, tsb_miss_handler
mov VTD_W, %g3
.align 32
.endm
@@ -1040,30 +1040,17 @@
! %g3==TTE flags
! %g4==fault type (if data miss)
! %g5==fault addr
-! %g6==context
! internal usage:
! %g1==absolute index
! %g2==hash base, pointer to hash entry
! %g3==flag bits, TSB (RA)
! %g4==fault type,entry tag
! %g5==tag
-! %g6==hash size, temp
+! %g6==context,hash size, temp
! %g7 temp
-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
+ ldxa [%g1 + %g7]ASI_REAL, %g6 ! load in the context
srlx %g5, TTARGET_VA_SHIFT, %g1
sllx %g6, TTARGET_CTX_SHIFT, %g6
@@ -1190,11 +1177,33 @@
#endif
stxa %g4, [%g6]ASI_REAL ! store tag
stxa %g5, [%g6 + %g7]ASI_REAL ! store data
+
+ ! XXX the following intstruction should be replaced with a
+ ! retry on HVs that do auto-demap
+ontario_demap_errata_patch:
+ andcc %g5, VTD_W, %g0
+ bnz,pn %xcc, demap_begin
+ mov MMFSA_D_CTX, %g2
+ retry
+demap_begin:
+ GET_MMFSA_SCRATCH(%g1)
+ mov MMFSA_D_ADDR, %g3
+ mov %o0, %g5
+ mov %o1, %g6
+ ldxa [%g1 + %g2]ASI_REAL, %g2 !%g2 == context
+ ldxa [%g1 + %g3]ASI_REAL, %g3 !%g3 == fault addr
+ mov %o2, %g7
+ mov MAP_DTLB, %o2
+ mov %g3, %o0
+ mov %g2, %o1
+ ta MMU_UNMAP_ADDR
+ mov %g5, %o0
+ mov %g6, %o1
+ mov %g7, %o2
MAGIC_TRAP_OFF
-
retry
END(tsb_miss_handler)
-END(data_prot_handler)
+
/*
* Write to read-only page
More information about the p4-projects
mailing list