- Timestamp:
- 2005-10-17T23:31:41Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4b2c872d
- Parents:
- 75eacab
- Location:
- arch
- Files:
-
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/amd64/include/asm.h
r75eacab r22f7769 83 83 } 84 84 85 /** Set priority level low85 /** Enable interrupts. 86 86 * 87 87 * Enable interrupts and return previous 88 88 * value of EFLAGS. 89 */ 90 static inline pri_t cpu_priority_low(void) { 91 pri_t v; 89 * 90 * @return Old interrupt priority level. 91 */ 92 static inline ipl_t interrupts_enable(void) { 93 ipl_t v; 92 94 __asm__ volatile ( 93 95 "pushfq\n" … … 99 101 } 100 102 101 /** Set priority level high103 /** Disable interrupts. 102 104 * 103 105 * Disable interrupts and return previous 104 106 * value of EFLAGS. 105 */ 106 static inline pri_t cpu_priority_high(void) { 107 pri_t v; 107 * 108 * @return Old interrupt priority level. 109 */ 110 static inline ipl_t interrupts_disable(void) { 111 ipl_t v; 108 112 __asm__ volatile ( 109 113 "pushfq\n" … … 115 119 } 116 120 117 /** Restore priority level121 /** Restore interrupt priority level. 118 122 * 119 123 * Restore EFLAGS. 120 */ 121 static inline void cpu_priority_restore(pri_t pri) { 124 * 125 * @param ipl Saved interrupt priority level. 126 */ 127 static inline void interrupts_restore(ipl_t ipl) { 122 128 __asm__ volatile ( 123 129 "pushq %0\n" 124 130 "popfq\n" 125 : : "r" ( pri)126 ); 127 } 128 129 /** Return raw priority level131 : : "r" (ipl) 132 ); 133 } 134 135 /** Return interrupt priority level. 130 136 * 131 137 * Return EFLAFS. 132 */ 133 static inline pri_t cpu_priority_read(void) { 134 pri_t v; 138 * 139 * @return Current interrupt priority level. 140 */ 141 static inline ipl_t interrupts_read(void) { 142 ipl_t v; 135 143 __asm__ volatile ( 136 144 "pushfq\n" -
arch/amd64/include/context.h
r75eacab r22f7769 56 56 __u64 r15; 57 57 58 pri_t pri;58 ipl_t ipl; 59 59 } __attribute__ ((packed)); 60 60 -
arch/amd64/include/types.h
r75eacab r22f7769 41 41 typedef __u64 __address; 42 42 43 /* Flags of processor (return value of cpu_priority_high()) */44 typedef __u64 pri_t;43 /* Flags of processor (return value of interrupts_disable()) */ 44 typedef __u64 ipl_t; 45 45 46 46 typedef __u64 __native; -
arch/amd64/src/interrupt.c
r75eacab r22f7769 109 109 /* 110 110 * Called directly from the assembler code. 111 * CPU is cpu_priority_high().111 * CPU is interrupts_disable()'d. 112 112 */ 113 113 void trap_dispatcher(__u8 n, __native stack[]) -
arch/amd64/src/userspace.c
r75eacab r22f7769 42 42 void userspace(void) 43 43 { 44 pri_t pri;44 ipl_t ipl; 45 45 46 pri = cpu_priority_high();46 ipl = interrupts_disable(); 47 47 48 48 __asm__ volatile ("" … … 58 58 "pushq %%rsi;" 59 59 "iretq;" 60 : : "i" (gdtselector(UDATA_DES) | PL_USER), "i" (USTACK_ADDRESS+THREAD_STACK_SIZE), "r" ( pri), "i" (gdtselector(UTEXT_DES) | PL_USER), "i" (UTEXT_ADDRESS));60 : : "i" (gdtselector(UDATA_DES) | PL_USER), "i" (USTACK_ADDRESS+THREAD_STACK_SIZE), "r" (ipl), "i" (gdtselector(UTEXT_DES) | PL_USER), "i" (UTEXT_ADDRESS)); 61 61 62 62 /* Unreachable */ -
arch/ia32/include/asm.h
r75eacab r22f7769 132 132 static inline __u32 inl(__u16 port) { __u32 val; __asm__ volatile ("inl %w1, %l0 \n" : "=a" (val) : "d" (port) ); return val; } 133 133 134 /** Set priority level low134 /** Enable interrupts. 135 135 * 136 136 * Enable interrupts and return previous 137 137 * value of EFLAGS. 138 */ 139 static inline pri_t cpu_priority_low(void) { 140 pri_t v; 138 * 139 * @return Old interrupt priority level. 140 */ 141 static inline ipl_t interrupts_enable(void) { 142 ipl_t v; 141 143 __asm__ volatile ( 142 144 "pushf\n\t" … … 148 150 } 149 151 150 /** Set priority level high152 /** Disable interrupts. 151 153 * 152 154 * Disable interrupts and return previous 153 155 * value of EFLAGS. 154 */ 155 static inline pri_t cpu_priority_high(void) { 156 pri_t v; 156 * 157 * @return Old interrupt priority level. 158 */ 159 static inline ipl_t interrupts_disable(void) { 160 ipl_t v; 157 161 __asm__ volatile ( 158 162 "pushf\n\t" … … 164 168 } 165 169 166 /** Restore priority level170 /** Restore interrupt priority level. 167 171 * 168 172 * Restore EFLAGS. 169 */ 170 static inline void cpu_priority_restore(pri_t pri) { 173 * 174 * @param ipl Saved interrupt priority level. 175 */ 176 static inline void interrupts_restore(ipl_t ipl) { 171 177 __asm__ volatile ( 172 178 "pushl %0\n\t" 173 179 "popf\n" 174 : : "r" ( pri)175 ); 176 } 177 178 /** Return raw priority level179 * 180 * Return EFLAFS.181 */ 182 static inline pri_t cpu_priority_read(void) {183 pri_t v;180 : : "r" (ipl) 181 ); 182 } 183 184 /** Return interrupt priority level. 185 * 186 * @return EFLAFS. 187 */ 188 static inline ipl_t interrupts_read(void) { 189 ipl_t v; 184 190 __asm__ volatile ( 185 191 "pushf\n\t" -
arch/ia32/include/context.h
r75eacab r22f7769 53 53 __u32 edi; 54 54 __u32 ebp; 55 __u32 pri;55 ipl_t ipl; 56 56 } __attribute__ ((packed)); 57 57 -
arch/ia32/include/types.h
r75eacab r22f7769 41 41 typedef __u32 __address; 42 42 43 typedef __u32 pri_t;43 typedef __u32 ipl_t; 44 44 45 45 typedef __u32 __native; -
arch/ia32/src/drivers/ega.c
r75eacab r22f7769 81 81 void ega_putchar(const char ch) 82 82 { 83 pri_t pri;83 ipl_t ipl; 84 84 85 pri = cpu_priority_high();85 ipl = interrupts_disable(); 86 86 spinlock_lock(&egalock); 87 87 … … 102 102 103 103 spinlock_unlock(&egalock); 104 cpu_priority_restore(pri);104 interrupts_restore(ipl); 105 105 } 106 106 -
arch/ia32/src/interrupt.c
r75eacab r22f7769 80 80 /* 81 81 * Called directly from the assembler code. 82 * CPU is cpu_priority_high().82 * CPU is interrupts_disable()'d. 83 83 */ 84 84 void trap_dispatcher(__u8 n, __native stack[]) -
arch/ia32/src/userspace.c
r75eacab r22f7769 42 42 void userspace(void) 43 43 { 44 pri_t pri;44 ipl_t ipl; 45 45 46 pri = cpu_priority_high();46 ipl = interrupts_disable(); 47 47 48 48 __asm__ volatile ( … … 61 61 "iret" 62 62 : 63 : "i" (selector(UDATA_DES) | PL_USER), "r" (USTACK_ADDRESS+(THREAD_STACK_SIZE)), "r" ( pri), "i" (selector(UTEXT_DES) | PL_USER), "i" (UTEXT_ADDRESS)63 : "i" (selector(UDATA_DES) | PL_USER), "r" (USTACK_ADDRESS+(THREAD_STACK_SIZE)), "r" (ipl), "i" (selector(UTEXT_DES) | PL_USER), "i" (UTEXT_ADDRESS) 64 64 : "eax"); 65 65 -
arch/ia64/include/context.h
r75eacab r22f7769 96 96 __u64 pr; 97 97 98 pri_t pri;98 ipl_t ipl; 99 99 } __attribute__ ((packed)); 100 100 -
arch/ia64/include/types.h
r75eacab r22f7769 41 41 typedef __u64 __address; 42 42 43 typedef __u64 pri_t;43 typedef __u64 ipl_t; 44 44 45 45 typedef __u64 __native; -
arch/ia64/src/context.S
r75eacab r22f7769 135 135 */ 136 136 137 /* TODO: ensure RSE lazy mode */ 137 138 mov ar.bspstore = loc4 138 139 mov ar.rnat = loc5 -
arch/ia64/src/dummy.s
r75eacab r22f7769 36 36 .global cpu_identify 37 37 .global cpu_print_report 38 .global cpu_priority_high39 .global cpu_priority_low40 .global cpu_priority_read41 .global cpu_priority_restore38 .global interrupts_disable 39 .global interrupts_enable 40 .global interrupts_read 41 .global interrupts_restore 42 42 .global cpu_sleep 43 43 .global dummy … … 53 53 cpu_identify: 54 54 cpu_print_report: 55 cpu_priority_high:56 cpu_priority_low:57 cpu_priority_read:58 cpu_priority_restore:55 interrupts_disable: 56 interrupts_enable: 57 interrupts_read: 58 interrupts_restore: 59 59 cpu_sleep: 60 60 fpu_init: -
arch/mips32/include/context.h
r75eacab r22f7769 63 63 __u32 gp; 64 64 65 __u32 pri;65 ipl_t ipl; 66 66 }; 67 67 -
arch/mips32/include/types.h
r75eacab r22f7769 46 46 typedef __u32 __address; 47 47 48 typedef __u32 pri_t;48 typedef __u32 ipl_t; 49 49 50 50 typedef __u32 __native; -
arch/mips32/src/drivers/arc.c
r75eacab r22f7769 176 176 { 177 177 __u32 cnt; 178 pri_t pri;178 ipl_t ipl; 179 179 180 180 /* TODO: Should be spinlock? */ 181 pri = cpu_priority_high();181 ipl = interrupts_disable(); 182 182 arc_entry->write(1, &ch, 1, &cnt); 183 cpu_priority_restore(pri);183 interrupts_restore(ipl); 184 184 185 185 } -
arch/mips32/src/exception.c
r75eacab r22f7769 47 47 * NOTE ON OPERATION ORDERING 48 48 * 49 * On entry, cpu_priority_high() must be called before49 * On entry, interrupts_disable() must be called before 50 50 * exception bit is cleared. 51 51 */ 52 52 53 cpu_priority_high();53 interrupts_disable(); 54 54 cp0_status_write(cp0_status_read() & ~ (cp0_status_exl_exception_bit | 55 55 cp0_status_um_bit)); -
arch/mips32/src/interrupt.c
r75eacab r22f7769 53 53 } 54 54 55 pri_t cpu_priority_high(void) 55 /** Disable interrupts. 56 * 57 * @return Old interrupt priority level. 58 */ 59 ipl_t interrupts_disable(void) 56 60 { 57 pri_t pri = (pri_t) cp0_status_read();58 cp0_status_write( pri& ~cp0_status_ie_enabled_bit);59 return pri;61 ipl_t ipl = (ipl_t) cp0_status_read(); 62 cp0_status_write(ipl & ~cp0_status_ie_enabled_bit); 63 return ipl; 60 64 } 61 65 62 pri_t cpu_priority_low(void) 66 /** Enable interrupts. 67 * 68 * @return Old interrupt priority level. 69 */ 70 ipl_t interrupts_enable(void) 63 71 { 64 pri_t pri = (pri_t) cp0_status_read();65 cp0_status_write( pri| cp0_status_ie_enabled_bit);66 return pri;72 ipl_t ipl = (ipl_t) cp0_status_read(); 73 cp0_status_write(ipl | cp0_status_ie_enabled_bit); 74 return ipl; 67 75 } 68 76 69 void cpu_priority_restore(pri_t pri) 77 /** Restore interrupt priority level. 78 * 79 * @param ipl Saved interrupt priority level. 80 */ 81 void interrupts_restore(ipl_t ipl) 70 82 { 71 cp0_status_write(cp0_status_read() | ( pri& cp0_status_ie_enabled_bit));83 cp0_status_write(cp0_status_read() | (ipl & cp0_status_ie_enabled_bit)); 72 84 } 73 85 74 pri_t cpu_priority_read(void) 86 /** Read interrupt priority level. 87 * 88 * @return Current interrupt priority level. 89 */ 90 ipl_t interrupts_read(void) 75 91 { 76 92 return cp0_status_read(); -
arch/mips32/src/mips32.c
r75eacab r22f7769 53 53 { 54 54 /* It is not assumed by default */ 55 cpu_priority_high();55 interrupts_disable(); 56 56 57 57 init_arc(); -
arch/mips32/src/mm/asid.c
r75eacab r22f7769 45 45 asid_t asid_get(void) 46 46 { 47 pri_t pri;47 ipl_t ipl; 48 48 int i, j; 49 49 count_t min; … … 51 51 min = (unsigned) -1; 52 52 53 pri = cpu_priority_high();53 ipl = interrupts_disable(); 54 54 spinlock_lock(&asid_usage_lock); 55 55 … … 66 66 67 67 spinlock_unlock(&asid_usage_lock); 68 cpu_priority_restore(pri);68 interrupts_restore(ipl); 69 69 70 70 return i; … … 79 79 void asid_put(asid_t asid) 80 80 { 81 pri_t pri;81 ipl_t ipl; 82 82 83 pri = cpu_priority_high();83 ipl = interrupts_disable(); 84 84 spinlock_lock(&asid_usage_lock); 85 85 … … 90 90 91 91 spinlock_unlock(&asid_usage_lock); 92 cpu_priority_restore(pri);92 interrupts_restore(ipl); 93 93 } 94 94 … … 104 104 { 105 105 bool has_conflicts = false; 106 pri_t pri;106 ipl_t ipl; 107 107 108 108 ASSERT(asid != ASID_INVALID); 109 109 110 pri = cpu_priority_high();110 ipl = interrupts_disable(); 111 111 spinlock_lock(&asid_usage_lock); 112 112 … … 115 115 116 116 spinlock_unlock(&asid_usage_lock); 117 cpu_priority_restore(pri);117 interrupts_restore(ipl); 118 118 119 119 return has_conflicts; -
arch/mips32/src/mm/tlb.c
r75eacab r22f7769 316 316 { 317 317 entry_hi_t hi; 318 pri_t pri;318 ipl_t ipl; 319 319 int i; 320 320 321 321 ASSERT(asid != ASID_INVALID); 322 322 323 pri = cpu_priority_high();323 ipl = interrupts_disable(); 324 324 325 325 for (i = 0; i < TLB_SIZE; i++) { … … 337 337 } 338 338 339 cpu_priority_restore(pri);339 interrupts_restore(ipl); 340 340 } 341 341 -
arch/mips32/src/mm/vm.c
r75eacab r22f7769 42 42 { 43 43 entry_hi_t hi; 44 pri_t pri;44 ipl_t ipl; 45 45 46 46 hi.value = cp0_entry_hi_read(); 47 47 48 pri = cpu_priority_high();48 ipl = interrupts_disable(); 49 49 spinlock_lock(&vm->lock); 50 50 hi.asid = vm->asid; 51 51 cp0_entry_hi_write(hi.value); 52 52 spinlock_lock(&vm->unlock); 53 cpu_priority_restore(pri);53 interrupts_restore(ipl); 54 54 } -
arch/ppc32/include/asm.h
r75eacab r22f7769 33 33 #include <config.h> 34 34 35 /** Set priority level low35 /** Enable interrupts. 36 36 * 37 37 * Enable interrupts and return previous 38 38 * value of EE. 39 * 40 * @return Old interrupt priority level. 39 41 */ 40 static inline pri_t cpu_priority_low(void) {41 pri_t v;42 pri_t tmp;42 static inline ipl_t interrupts_enable(void) { 43 ipl_t v; 44 ipl_t tmp; 43 45 44 46 __asm__ volatile ( … … 52 54 } 53 55 54 /** Set priority level high56 /** Disable interrupts. 55 57 * 56 58 * Disable interrupts and return previous 57 59 * value of EE. 60 * 61 * @return Old interrupt priority level. 58 62 */ 59 static inline pri_t cpu_priority_high(void) {60 pri_t v;61 pri_t tmp;63 static inline ipl_t interrupts_disable(void) { 64 ipl_t v; 65 ipl_t tmp; 62 66 63 67 __asm__ volatile ( … … 71 75 } 72 76 73 /** Restore priority level77 /** Restore interrupt priority level. 74 78 * 75 79 * Restore EE. 80 * 81 * @param ipl Saved interrupt priority level. 76 82 */ 77 static inline void cpu_priority_restore(pri_t pri) {78 pri_t tmp;83 static inline void interrupts_restore(ipl_t ipl) { 84 ipl_t tmp; 79 85 80 86 __asm__ volatile ( … … 85 91 "mtmsr %0\n" 86 92 "0:\n" 87 : "=r" ( pri), "=r" (tmp)88 : "0" ( pri)93 : "=r" (ipl), "=r" (tmp) 94 : "0" (ipl) 89 95 ); 90 96 } 91 97 92 /** Return raw priority level98 /** Return interrupt priority level. 93 99 * 94 100 * Return EE. 101 * 102 * @return Current interrupt priority level. 95 103 */ 96 static inline pri_t cpu_priority_read(void) {97 pri_t v;104 static inline ipl_t interrupts_read(void) { 105 ipl_t v; 98 106 __asm__ volatile ( 99 107 "mfmsr %0\n" -
arch/ppc32/include/context.h
r75eacab r22f7769 68 68 __u32 r31; 69 69 __u32 pc; 70 pri_t pri;70 ipl_t ipl; 71 71 } __attribute__ ((packed)); 72 72 -
arch/ppc32/include/types.h
r75eacab r22f7769 41 41 typedef __u32 __address; 42 42 43 typedef __u32 pri_t;43 typedef __u32 ipl_t; 44 44 45 45 typedef __u32 __native;
Note:
See TracChangeset
for help on using the changeset viewer.