aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/ktlb.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc64/kernel/ktlb.S')
-rw-r--r--arch/sparc64/kernel/ktlb.S15
1 files changed, 14 insertions, 1 deletions
diff --git a/arch/sparc64/kernel/ktlb.S b/arch/sparc64/kernel/ktlb.S
index ae1dac17bc8d..efcf38b6e284 100644
--- a/arch/sparc64/kernel/ktlb.S
+++ b/arch/sparc64/kernel/ktlb.S
@@ -121,6 +121,12 @@ kvmap_dtlb_obp:
121 nop 121 nop
122 122
123 .align 32 123 .align 32
124kvmap_dtlb_tsb4m_load:
125 KTSB_LOCK_TAG(%g1, %g2, %g7)
126 KTSB_WRITE(%g1, %g5, %g6)
127 ba,pt %xcc, kvmap_dtlb_load
128 nop
129
124kvmap_dtlb: 130kvmap_dtlb:
125 /* %g6: TAG TARGET */ 131 /* %g6: TAG TARGET */
126 mov TLB_TAG_ACCESS, %g4 132 mov TLB_TAG_ACCESS, %g4
@@ -133,6 +139,13 @@ kvmap_dtlb_4v:
133 brgez,pn %g4, kvmap_dtlb_nonlinear 139 brgez,pn %g4, kvmap_dtlb_nonlinear
134 nop 140 nop
135 141
142 /* Correct TAG_TARGET is already in %g6, check 4mb TSB. */
143 KERN_TSB4M_LOOKUP_TL1(%g6, %g5, %g1, %g2, %g3, kvmap_dtlb_load)
144
145 /* TSB entry address left in %g1, lookup linear PTE.
146 * Must preserve %g1 and %g6 (TAG).
147 */
148kvmap_dtlb_tsb4m_miss:
136 sethi %hi(kpte_linear_bitmap), %g2 149 sethi %hi(kpte_linear_bitmap), %g2
137 or %g2, %lo(kpte_linear_bitmap), %g2 150 or %g2, %lo(kpte_linear_bitmap), %g2
138 151
@@ -163,7 +176,7 @@ kvmap_dtlb_4v:
163 176
164 .globl kvmap_linear_patch 177 .globl kvmap_linear_patch
165kvmap_linear_patch: 178kvmap_linear_patch:
166 ba,pt %xcc, kvmap_dtlb_load 179 ba,pt %xcc, kvmap_dtlb_tsb4m_load
167 xor %g2, %g4, %g5 180 xor %g2, %g4, %g5
168 181
169kvmap_dtlb_vmalloc_addr: 182kvmap_dtlb_vmalloc_addr: