Subversion Repositories HelenOS

Rev

Rev 1880 | Rev 1905 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1880 Rev 1891
Line 49... Line 49...
49
#include <arch/trap/trap.h>
49
#include <arch/trap/trap.h>
50
#include <arch/trap/exception.h>
50
#include <arch/trap/exception.h>
51
#include <panic.h>
51
#include <panic.h>
52
#include <arch/asm.h>
52
#include <arch/asm.h>
53
 
53
 
-
 
54
#ifdef CONFIG_TSB
-
 
55
#include <arch/mm/tsb.h>
-
 
56
#endif
-
 
57
 
54
static void dtlb_pte_copy(pte_t *t, bool ro);
58
static void dtlb_pte_copy(pte_t *t, bool ro);
55
static void itlb_pte_copy(pte_t *t);
59
static void itlb_pte_copy(pte_t *t);
56
static void do_fast_instruction_access_mmu_miss_fault(istate_t *istate, const char *str);
60
static void do_fast_instruction_access_mmu_miss_fault(istate_t *istate, const char *str);
57
static void do_fast_data_access_mmu_miss_fault(istate_t *istate, tlb_tag_access_reg_t tag, const char *str);
61
static void do_fast_data_access_mmu_miss_fault(istate_t *istate, tlb_tag_access_reg_t tag, const char *str);
58
static void do_fast_data_access_protection_fault(istate_t *istate, tlb_tag_access_reg_t tag, const char *str);
62
static void do_fast_data_access_protection_fault(istate_t *istate, tlb_tag_access_reg_t tag, const char *str);
Line 142... Line 146...
142
    data.g = t->g;
146
    data.g = t->g;
143
   
147
   
144
    dtlb_data_in_write(data.value);
148
    dtlb_data_in_write(data.value);
145
}
149
}
146
 
150
 
-
 
151
/** Copy PTE to ITLB.
-
 
152
 *
-
 
153
 * @param t Page Table Entry to be copied.
-
 
154
 */
147
void itlb_pte_copy(pte_t *t)
155
void itlb_pte_copy(pte_t *t)
148
{
156
{
149
    tlb_tag_access_reg_t tag;
157
    tlb_tag_access_reg_t tag;
150
    tlb_data_t data;
158
    tlb_data_t data;
151
    page_address_t pg;
159
    page_address_t pg;
Line 187... Line 195...
187
         * The mapping was found in the software page hash table.
195
         * The mapping was found in the software page hash table.
188
         * Insert it into ITLB.
196
         * Insert it into ITLB.
189
         */
197
         */
190
        t->a = true;
198
        t->a = true;
191
        itlb_pte_copy(t);
199
        itlb_pte_copy(t);
-
 
200
#ifdef CONFIG_TSB
-
 
201
        itsb_pte_copy(t);
-
 
202
#endif
192
        page_table_unlock(AS, true);
203
        page_table_unlock(AS, true);
193
    } else {
204
    } else {
194
        /*
205
        /*
195
         * Forward the page fault to the address space page fault handler.
206
         * Forward the page fault to the address space page fault handler.
196
         */    
207
         */    
Line 231... Line 242...
231
         * The mapping was found in the software page hash table.
242
         * The mapping was found in the software page hash table.
232
         * Insert it into DTLB.
243
         * Insert it into DTLB.
233
         */
244
         */
234
        t->a = true;
245
        t->a = true;
235
        dtlb_pte_copy(t, true);
246
        dtlb_pte_copy(t, true);
-
 
247
#ifdef CONFIG_TSB
-
 
248
        dtsb_pte_copy(t, true);
-
 
249
#endif
236
        page_table_unlock(AS, true);
250
        page_table_unlock(AS, true);
237
    } else {
251
    } else {
238
        /*
252
        /*
239
         * Forward the page fault to the address space page fault handler.
253
         * Forward the page fault to the address space page fault handler.
240
         */    
254
         */    
Line 264... Line 278...
264
         */
278
         */
265
        t->a = true;
279
        t->a = true;
266
        t->d = true;
280
        t->d = true;
267
        dtlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_SECONDARY, va);
281
        dtlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_SECONDARY, va);
268
        dtlb_pte_copy(t, false);
282
        dtlb_pte_copy(t, false);
-
 
283
#ifdef CONFIG_TSB
-
 
284
        dtsb_pte_copy(t, false);
-
 
285
#endif
269
        page_table_unlock(AS, true);
286
        page_table_unlock(AS, true);
270
    } else {
287
    } else {
271
        /*
288
        /*
272
         * Forward the page fault to the address space page fault handler.
289
         * Forward the page fault to the address space page fault handler.
273
         */    
290
         */