Deleted Added
full compact
mp_exception.S (89051) mp_exception.S (91783)
1/*-
2 * Copyright (c) 2002 Jake Burkholder.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
1/*-
2 * Copyright (c) 2002 Jake Burkholder.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: head/sys/sparc64/sparc64/mp_exception.S 89051 2002-01-08 05:50:26Z jake $
26 * $FreeBSD: head/sys/sparc64/sparc64/mp_exception.S 91783 2002-03-07 06:01:40Z jake $
27 */
28
29#include <machine/asi.h>
30#include <machine/ktr.h>
31#include <machine/asmacros.h>
32#include <machine/pstate.h>
33
34#include "assym.s"
35
36 .register %g2, #ignore
37 .register %g3, #ignore
38
27 */
28
29#include <machine/asi.h>
30#include <machine/ktr.h>
31#include <machine/asmacros.h>
32#include <machine/pstate.h>
33
34#include "assym.s"
35
36 .register %g2, #ignore
37 .register %g3, #ignore
38
39#if 0
39#define IPI_WAIT(r1, r2, r3) \
40 ATOMIC_DEC_INT(r1, r2, r3) ; \
40#define IPI_WAIT(r1, r2, r3) \
41 ATOMIC_DEC_INT(r1, r2, r3) ; \
419: membar #StoreLoad ; \
42 lduw [r1], r2 ; \
429: lduw [r1], r2 ; \
43 brnz,a,pn r2, 9b ; \
44 nop
43 brnz,a,pn r2, 9b ; \
44 nop
45#else
46#define IPI_WAIT(r1, r2, r3)
47#endif
45
46/*
47 * Trigger a softint at the desired level.
48 */
49ENTRY(tl_ipi_level)
50 lduw [%g5 + ILA_LEVEL], %g2
51
52 mov 1, %g1

--- 18 unchanged lines hidden (view full) ---

71#endif
72 retry
73END(tl_ipi_test)
74
75/*
76 * Demap a page from the dtlb and/or itlb.
77 */
78ENTRY(tl_ipi_tlb_page_demap)
48
49/*
50 * Trigger a softint at the desired level.
51 */
52ENTRY(tl_ipi_level)
53 lduw [%g5 + ILA_LEVEL], %g2
54
55 mov 1, %g1

--- 18 unchanged lines hidden (view full) ---

74#endif
75 retry
76END(tl_ipi_test)
77
78/*
79 * Demap a page from the dtlb and/or itlb.
80 */
81ENTRY(tl_ipi_tlb_page_demap)
79 ldx [%g5 + ITA_TLB], %g1
80 ldx [%g5 + ITA_CTX], %g2
81 ldx [%g5 + ITA_VA], %g3
82#if KTR_COMPILE & KTR_SMP
83 CATR(KTR_SMP, "ipi_tlb_page_demap: pm=%p va=%#lx"
84 , %g1, %g2, %g3, 7, 8, 9)
85 ldx [%g5 + ITA_PMAP], %g2
86 stx %g2, [%g1 + KTR_PARM1]
87 ldx [%g5 + ITA_VA], %g2
88 stx %g2, [%g1 + KTR_PARM2]
899:
90#endif
82
91
83 wr %g0, ASI_DMMU, %asi
92 ldx [%g5 + ITA_PMAP], %g1
84
93
85 brz,a,pt %g2, 1f
86 or %g3, TLB_DEMAP_NUCLEUS | TLB_DEMAP_PAGE, %g3
94 SET(kernel_pmap_store, %g3, %g2)
95 mov TLB_DEMAP_NUCLEUS | TLB_DEMAP_PAGE, %g3
87
96
88 stxa %g2, [%g0 + AA_DMMU_SCXR] %asi
89 membar #Sync
90 or %g3, TLB_DEMAP_SECONDARY | TLB_DEMAP_PAGE, %g3
97 cmp %g1, %g2
98 movne %xcc, TLB_DEMAP_PRIMARY | TLB_DEMAP_PAGE, %g3
91
99
921: andcc %g1, TLB_DTLB, %g0
93 bz,a,pn %xcc, 2f
94 nop
95 stxa %g0, [%g3] ASI_DMMU_DEMAP
100 ldx [%g5 + ITA_TLB], %g1
101 ldx [%g5 + ITA_VA], %g2
102 or %g2, %g3, %g2
96
103
972: andcc %g1, TLB_ITLB, %g0
98 bz,a,pn %xcc, 3f
104 andcc %g1, TLB_DTLB, %g0
105 bz,a,pn %xcc, 1f
99 nop
106 nop
100 stxa %g0, [%g3] ASI_IMMU_DEMAP
107 stxa %g0, [%g2] ASI_DMMU_DEMAP
108 membar #Sync
101
109
1023: brz,a,pt %g2, 4f
1101: andcc %g1, TLB_ITLB, %g0
111 bz,a,pn %xcc, 2f
103 nop
112 nop
104 stxa %g0, [%g0 + AA_DMMU_SCXR] %asi
113 stxa %g0, [%g2] ASI_IMMU_DEMAP
114 membar #Sync
105
115
1064: membar #Sync
107
108 IPI_WAIT(%g5, %g1, %g2)
1162: IPI_WAIT(%g5, %g1, %g2)
109 retry
110END(tl_ipi_tlb_page_demap)
111
112/*
113 * Demap a range of pages from the dtlb and itlb.
114 */
115ENTRY(tl_ipi_tlb_range_demap)
117 retry
118END(tl_ipi_tlb_page_demap)
119
120/*
121 * Demap a range of pages from the dtlb and itlb.
122 */
123ENTRY(tl_ipi_tlb_range_demap)
116 ldx [%g5 + ITA_CTX], %g1
124#if KTR_COMPILE & KTR_SMP
125 CATR(KTR_SMP, "ipi_tlb_range_demap: pm=%p start=%#lx end=%#lx"
126 , %g1, %g2, %g3, 7, 8, 9)
127 ldx [%g5 + ITA_PMAP], %g2
128 stx %g2, [%g1 + KTR_PARM1]
117 ldx [%g5 + ITA_START], %g2
129 ldx [%g5 + ITA_START], %g2
118 ldx [%g5 + ITA_END], %g3
130 stx %g2, [%g1 + KTR_PARM2]
131 ldx [%g5 + ITA_END], %g2
132 stx %g2, [%g1 + KTR_PARM3]
1339:
134#endif
119
135
120 wr %g0, ASI_DMMU, %asi
136 ldx [%g5 + ITA_PMAP], %g1
121
137
122 brz,a,pt %g1, 1f
123 mov TLB_DEMAP_NUCLEUS | TLB_DEMAP_PAGE, %g4
138 SET(kernel_pmap_store, %g3, %g2)
139 mov TLB_DEMAP_NUCLEUS | TLB_DEMAP_PAGE, %g3
124
140
125 stxa %g1, [%g0 + AA_DMMU_SCXR] %asi
126 membar #Sync
127 mov TLB_DEMAP_SECONDARY | TLB_DEMAP_PAGE, %g4
141 cmp %g1, %g2
142 movne %xcc, TLB_DEMAP_PRIMARY | TLB_DEMAP_PAGE, %g3
128
143
1291: set PAGE_SIZE, %g5
144 ldx [%g5 + ITA_START], %g1
145 ldx [%g5 + ITA_END], %g2
130
146
1312: or %g4, %g2, %g4
147 set PAGE_SIZE, %g6
148
1491: or %g1, %g3, %g4
132 stxa %g0, [%g4] ASI_DMMU_DEMAP
133 stxa %g0, [%g4] ASI_IMMU_DEMAP
150 stxa %g0, [%g4] ASI_DMMU_DEMAP
151 stxa %g0, [%g4] ASI_IMMU_DEMAP
152 membar #Sync
134
153
135 add %g2, %g5, %g2
136 cmp %g2, %g3
137 bne,a,pt %xcc, 2b
154 add %g1, %g6, %g1
155 cmp %g1, %g2
156 blt,a,pt %xcc, 1b
138 nop
139
157 nop
158
140 brz,a,pt %g1, 3f
141 nop
142 stxa %g0, [%g0 + AA_DMMU_SCXR] %asi
143
1443: membar #Sync
145
146 IPI_WAIT(%g5, %g1, %g2)
147 retry
148END(tl_ipi_tlb_range_demap)
149
150/*
159 IPI_WAIT(%g5, %g1, %g2)
160 retry
161END(tl_ipi_tlb_range_demap)
162
163/*
151 * Demap an entire context from the dtlb and itlb.
164 * Demap the primary context from the dtlb and itlb.
152 */
153ENTRY(tl_ipi_tlb_context_demap)
165 */
166ENTRY(tl_ipi_tlb_context_demap)
154 ldx [%g5 + ITA_CTX], %g1
167#if KTR_COMPILE & KTR_SMP
168 CATR(KTR_SMP, "ipi_tlb_page_demap: pm=%p va=%#lx"
169 , %g1, %g2, %g3, 7, 8, 9)
170 ldx [%g5 + ITA_PMAP], %g2
171 stx %g2, [%g1 + KTR_PARM1]
172 ldx [%g5 + ITA_VA], %g2
173 stx %g2, [%g1 + KTR_PARM2]
1749:
175#endif
155
176
156 mov AA_DMMU_SCXR, %g2
157 stxa %g1, [%g2] ASI_DMMU
177 mov TLB_DEMAP_PRIMARY | TLB_DEMAP_CONTEXT, %g1
178 stxa %g0, [%g1] ASI_DMMU_DEMAP
179 stxa %g0, [%g1] ASI_IMMU_DEMAP
158 membar #Sync
159
180 membar #Sync
181
160 mov TLB_DEMAP_SECONDARY | TLB_DEMAP_CONTEXT, %g3
161 stxa %g0, [%g3] ASI_DMMU_DEMAP
162 stxa %g0, [%g3] ASI_IMMU_DEMAP
163
164 stxa %g0, [%g2] ASI_DMMU
165 membar #Sync
166
167 IPI_WAIT(%g5, %g1, %g2)
168 retry
169END(tl_ipi_tlb_context_demap)
182 IPI_WAIT(%g5, %g1, %g2)
183 retry
184END(tl_ipi_tlb_context_demap)