Changeset e2bf639 in mainline for kernel/arch/sparc64/include
- Timestamp:
- 2006-09-05T21:06:59Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d7e3f1ad
- Parents:
- 5035eeb7
- Location:
- kernel/arch/sparc64/include/trap
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/include/trap/exception.h
r5035eeb7 re2bf639 38 38 39 39 #define TT_INSTRUCTION_ACCESS_EXCEPTION 0x08 40 #define TT_INSTRUCTION_ACCESS_ERROR 0x0a 40 41 #define TT_ILLEGAL_INSTRUCTION 0x10 42 #define TT_PRIVILEGED_OPCODE 0x11 43 #define TT_DIVISION_BY_ZERO 0x28 44 #define TT_DATA_ACCESS_EXCEPTION 0x30 41 45 #define TT_DATA_ACCESS_ERROR 0x32 42 46 #define TT_MEM_ADDRESS_NOT_ALIGNED 0x34 47 #define TT_PRIVILEGED_ACTION 0x38 43 48 44 49 #ifndef __ASM__ … … 46 51 #include <typedefs.h> 47 52 48 extern void do_instruction_access_exc(int n, istate_t *istate); 49 extern void do_mem_address_not_aligned(int n, istate_t *istate); 50 extern void do_data_access_error(int n, istate_t *istate); 51 extern void do_illegal_instruction(int n, istate_t *istate); 53 extern void instruction_access_exception(int n, istate_t *istate); 54 extern void instruction_access_error(int n, istate_t *istate); 55 extern void illegal_instruction(int n, istate_t *istate); 56 extern void privileged_opcode(int n, istate_t *istate); 57 extern void division_by_zero(int n, istate_t *istate); 58 extern void data_access_exception(int n, istate_t *istate); 59 extern void data_access_error(int n, istate_t *istate); 60 extern void mem_address_not_aligned(int n, istate_t *istate); 61 extern void privileged_action(int n, istate_t *istate); 62 52 63 53 64 #endif /* !__ASM__ */ -
kernel/arch/sparc64/include/trap/mmu.h
r5035eeb7 re2bf639 63 63 .endm 64 64 65 .macro FAST_DATA_ACCESS_MMU_MISS_HANDLER 65 .macro FAST_DATA_ACCESS_MMU_MISS_HANDLER tl 66 66 /* 67 67 * First, try to refill TLB from TSB. … … 101 101 */ 102 102 0: 103 HANDLE_MMU_TRAPS_FROM_SPILL_OR_FILL 103 .if (\tl > 0) 104 wrpr %g0, 1, %tl 105 .endif 104 106 105 107 wrpr %g0, PSTATE_PRIV_BIT | PSTATE_AG_BIT, %pstate … … 107 109 .endm 108 110 109 .macro FAST_DATA_ACCESS_PROTECTION_HANDLER 111 .macro FAST_DATA_ACCESS_PROTECTION_HANDLER tl 110 112 /* 111 113 * First, try to refill TLB from TSB. … … 116 118 * The same special case as in FAST_DATA_ACCESS_MMU_MISS_HANDLER. 117 119 */ 118 HANDLE_MMU_TRAPS_FROM_SPILL_OR_FILL 120 .if (\tl > 0) 121 wrpr %g0, 1, %tl 122 .endif 119 123 120 124 wrpr %g0, PSTATE_PRIV_BIT | PSTATE_AG_BIT, %pstate 121 125 PREEMPTIBLE_HANDLER fast_data_access_protection 122 .endm123 124 .macro MEM_ADDRESS_NOT_ALIGNED_HANDLER125 ba mem_address_not_aligned_handler126 nop127 .endm128 129 /*130 * Macro used to lower TL when a MMU trap is caused by131 * the userspace register window spill or fill handler.132 */133 .macro HANDLE_MMU_TRAPS_FROM_SPILL_OR_FILL134 rdpr %tl, %g1135 sub %g1, 1, %g2136 brz %g2, 0f ! if TL was 1, skip137 nop138 wrpr %g2, 0, %tl ! TL--139 rdpr %tt, %g3140 cmp %g3, TT_SPILL_1_NORMAL141 be 0f ! trap from spill_1_normal?142 cmp %g3, TT_FILL_1_NORMAL143 bne,a 0f ! trap from fill_1_normal? (negated condition)144 wrpr %g1, 0, %tl ! TL++145 0:146 126 .endm 147 127
Note:
See TracChangeset
for help on using the changeset viewer.