Changeset 10ee41a8 in rtems
- Timestamp:
- 01/23/23 13:56:31 (2 months ago)
- Branches:
- master
- Children:
- 6136e28b
- Parents:
- 9ecb73f
- git-author:
- Sebastian Huber <sebastian.huber@…> (01/23/23 13:56:31)
- git-committer:
- Sebastian Huber <sebastian.huber@…> (01/24/23 08:56:53)
- Files:
-
- 37 edited
Legend:
- Unmodified
- Added
- Removed
-
bsps/arm/lpc32xx/include/tm27.h
r9ecb73f r10ee41a8 52 52 #define LPC32XX_TM27_IRQ LPC32XX_IRQ_TIMER_2 53 53 54 static inline void Install_tm27_vector( void (*handler)(rtems_vector_number))54 static inline void Install_tm27_vector( rtems_interrupt_handler handler ) 55 55 { 56 56 static rtems_interrupt_entry entry; … … 71 71 rtems_interrupt_entry_initialize( 72 72 &entry, 73 (rtems_interrupt_handler)handler,73 handler, 74 74 NULL, 75 75 "tm27" -
bsps/bfin/TLL6527M/include/tm27.h
r9ecb73f r10ee41a8 35 35 #define MUST_WAIT_FOR_INTERRUPT 0 36 36 37 #define TM27_USE_VECTOR_HANDLER 38 37 39 #define Install_tm27_vector(handler) \ 38 40 { \ -
bsps/bfin/eZKit533/include/tm27.h
r9ecb73f r10ee41a8 33 33 #define MUST_WAIT_FOR_INTERRUPT 0 34 34 35 #define TM27_USE_VECTOR_HANDLER 36 35 37 #define Install_tm27_vector(handler) \ 36 38 { \ -
bsps/include/dev/irq/arm-gic-tm27.h
r9ecb73f r10ee41a8 60 60 #define ARM_GIC_TM27_PRIO_HIGH 0x00 61 61 62 static inline void Install_tm27_vector( void (*handler)(rtems_vector_number))62 static inline void Install_tm27_vector( rtems_interrupt_handler handler ) 63 63 { 64 64 rtems_status_code sc = rtems_interrupt_handler_install( … … 66 66 "tm27 low", 67 67 RTEMS_INTERRUPT_UNIQUE, 68 (rtems_interrupt_handler)handler,68 handler, 69 69 NULL 70 70 ); -
bsps/lm32/lm32_evr/include/tm27.h
r9ecb73f r10ee41a8 28 28 #define MUST_WAIT_FOR_INTERRUPT 0 29 29 30 #define TM27_USE_VECTOR_HANDLER 31 30 32 #define Install_tm27_vector( handler ) set_vector( (handler), 0, 1 ) 31 33 -
bsps/m68k/av5282/include/tm27.h
r9ecb73f r10ee41a8 27 27 #define MUST_WAIT_FOR_INTERRUPT 0 28 28 29 #define TM27_USE_VECTOR_HANDLER 30 29 31 #define Install_tm27_vector( handler ) set_vector( (handler), 35, 1 ) 30 32 -
bsps/m68k/csb360/include/tm27.h
r9ecb73f r10ee41a8 29 29 #define MUST_WAIT_FOR_INTERRUPT 0 30 30 31 #define TM27_USE_VECTOR_HANDLER 32 31 33 #define Install_tm27_vector( handler ) set_vector( (handler), 34, 1 ) 32 34 -
bsps/m68k/gen68360/include/tm27.h
r9ecb73f r10ee41a8 30 30 #define MUST_WAIT_FOR_INTERRUPT 0 31 31 32 #define TM27_USE_VECTOR_HANDLER 33 32 34 #define Install_tm27_vector( handler ) set_vector( (handler), 34, 1 ) 33 35 -
bsps/m68k/genmcf548x/include/tm27.h
r9ecb73f r10ee41a8 27 27 #define MUST_WAIT_FOR_INTERRUPT 0 28 28 29 #define TM27_USE_VECTOR_HANDLER 30 29 31 #define Install_tm27_vector( handler ) set_vector( (handler), 35, 1 ) 30 32 -
bsps/m68k/mcf5206elite/include/tm27.h
r9ecb73f r10ee41a8 25 25 #define MUST_WAIT_FOR_INTERRUPT 0 26 26 27 #define TM27_USE_VECTOR_HANDLER 28 27 29 #define Install_tm27_vector( handler ) set_vector( (handler), 34, 1 ) 28 30 -
bsps/m68k/mcf52235/include/tm27.h
r9ecb73f r10ee41a8 25 25 #define MUST_WAIT_FOR_INTERRUPT 0 26 26 27 #define TM27_USE_VECTOR_HANDLER 28 27 29 #define Install_tm27_vector( handler ) set_vector( (handler), 35, 1 ) 28 30 -
bsps/m68k/mcf5225x/include/tm27.h
r9ecb73f r10ee41a8 25 25 #define MUST_WAIT_FOR_INTERRUPT 0 26 26 27 #define TM27_USE_VECTOR_HANDLER 28 27 29 #define Install_tm27_vector( handler ) set_vector( (handler), 35, 1 ) 28 30 -
bsps/m68k/mcf5235/include/tm27.h
r9ecb73f r10ee41a8 25 25 #define MUST_WAIT_FOR_INTERRUPT 0 26 26 27 #define TM27_USE_VECTOR_HANDLER 28 27 29 #define Install_tm27_vector( handler ) set_vector( (handler), 35, 1 ) 28 30 -
bsps/m68k/mcf5329/include/tm27.h
r9ecb73f r10ee41a8 25 25 #define MUST_WAIT_FOR_INTERRUPT 0 26 26 27 #define TM27_USE_VECTOR_HANDLER 28 27 29 #define Install_tm27_vector( handler ) set_vector( (handler), 35, 1 ) 28 30 -
bsps/m68k/mvme147/include/tm27.h
r9ecb73f r10ee41a8 26 26 #define MUST_WAIT_FOR_INTERRUPT 0 27 27 28 #define TM27_USE_VECTOR_HANDLER 29 28 30 #define Install_tm27_vector( handler ) set_vector( (handler), \ 29 31 SOFT_1_VECTOR, 1 ) -
bsps/m68k/mvme147s/include/tm27.h
r9ecb73f r10ee41a8 26 26 #define MUST_WAIT_FOR_INTERRUPT 0 27 27 28 #define TM27_USE_VECTOR_HANDLER 29 28 30 #define Install_tm27_vector( handler ) set_vector( (handler), \ 29 31 SOFT_1_VECTOR, 1 ) -
bsps/m68k/mvme162/include/tm27.h
r9ecb73f r10ee41a8 26 26 #define MUST_WAIT_FOR_INTERRUPT 0 27 27 28 #define TM27_USE_VECTOR_HANDLER 29 28 30 #define Install_tm27_vector( handler ) \ 29 31 set_vector( (handler), VBR1 * 0x10 + 0x8, 1 ); \ -
bsps/m68k/mvme167/include/tm27.h
r9ecb73f r10ee41a8 25 25 #define MUST_WAIT_FOR_INTERRUPT 0 26 26 27 #define TM27_USE_VECTOR_HANDLER 28 27 29 #define Install_tm27_vector( handler ) \ 28 30 set_vector( (handler), VBR1 * 0x10 + 0x8, 1 ); \ -
bsps/m68k/uC5282/include/tm27.h
r9ecb73f r10ee41a8 30 30 #define MUST_WAIT_FOR_INTERRUPT 0 31 31 32 #define TM27_USE_VECTOR_HANDLER 33 32 34 #define Install_tm27_vector( handler ) set_vector( (handler), 35, 1 ) 33 35 -
bsps/mips/csb350/include/tm27.h
r9ecb73f r10ee41a8 29 29 #define Install_tm27_vector( handler ) \ 30 30 rtems_interrupt_handler_install( \ 31 AU1X00_IRQ_SW0, "benchmark", 0, (rtems_interrupt_handler)handler, NULL );31 AU1X00_IRQ_SW0, "benchmark", 0, handler, NULL ); 32 32 33 33 #define Cause_tm27_intr() \ -
bsps/mips/jmr3904/include/tm27.h
r9ecb73f r10ee41a8 27 27 rtems_interrupt_handler_install( \ 28 28 TX3904_IRQ_TMR0, "benchmark", 0, \ 29 (rtems_interrupt_handler)handler, NULL );29 handler, NULL ); 30 30 31 31 #define Cause_tm27_intr() \ -
bsps/powerpc/gen5200/include/tm27.h
r9ecb73f r10ee41a8 35 35 (rtems_irq_is_enabled) nullFunc}; 36 36 37 static inline void Install_tm27_vector( void (*_handler)(void))37 static inline void Install_tm27_vector( rtems_interrupt_handler handler ) 38 38 { 39 clockIrqData.hdl = _handler;39 clockIrqData.hdl = handler; 40 40 if (!BSP_install_rtems_irq_handler (&clockIrqData)) { 41 41 printk("Error installing clock interrupt handler!\n"); -
bsps/powerpc/gen83xx/include/tm27.h
r9ecb73f r10ee41a8 43 43 #define MUST_WAIT_FOR_INTERRUPT 1 44 44 45 static void (*tm27_interrupt_handler)(rtems_vector_number);45 static rtems_interrupt_handler tm27_interrupt_handler; 46 46 47 47 static int tm27_exception_handler( BSP_Exception_frame *frame, unsigned number) 48 48 { 49 (*tm27_interrupt_handler)( 0);49 (*tm27_interrupt_handler)( NULL); 50 50 51 51 return 0; 52 52 } 53 53 54 static void Install_tm27_vector( void (*handler)(rtems_vector_number))54 static inline void Install_tm27_vector( rtems_interrupt_handler handler ) 55 55 { 56 56 int rv = 0; -
bsps/powerpc/motorola_powerpc/include/tm27.h
r9ecb73f r10ee41a8 40 40 }; 41 41 42 static void Install_tm27_vector(rtems_isr (*_handler)(rtems_vector_number))42 static inline void Install_tm27_vector( rtems_interrupt_handler handler ) 43 43 { 44 clockIrqData.hdl = (rtems_irq_hdl) _handler;44 clockIrqData.hdl = handler; 45 45 if (!BSP_install_rtems_irq_handler (&clockIrqData)) { 46 46 printk("Error installing clock interrupt handler!\n"); -
bsps/powerpc/mpc8260ads/include/tm27.h
r9ecb73f r10ee41a8 30 30 static rtems_irq_connect_data scIrqData = { \ 31 31 PPC_IRQ_SCALL, \ 32 (rtems_irq_hdl)handler, \32 handler, \ 33 33 NULL, \ 34 34 NULL, \ -
bsps/powerpc/mvme5500/include/tm27.h
r9ecb73f r10ee41a8 33 33 (rtems_irq_is_enabled) nullFunc}; 34 34 35 static inline void Install_tm27_vector( void (*_handler)())35 static inline void Install_tm27_vector( rtems_interrupt_handler handler ) 36 36 { 37 clockIrqData.hdl = _handler;37 clockIrqData.hdl = handler; 38 38 if (!BSP_install_rtems_irq_handler (&clockIrqData)) { 39 39 printk("Error installing clock interrupt handler!\n"); -
bsps/powerpc/psim/include/tm27.h
r9ecb73f r10ee41a8 33 33 (rtems_irq_is_enabled) nullFunc}; 34 34 35 static inline void Install_tm27_vector( void (*_handler)())35 static inline void Install_tm27_vector( rtems_interrupt_handler handler ) 36 36 { 37 clockIrqData.hdl = _handler;37 clockIrqData.hdl = handler; 38 38 if (!BSP_install_rtems_irq_handler (&clockIrqData)) { 39 39 printk("Error installing clock interrupt handler!\n"); -
bsps/powerpc/qoriq/include/tm27.h
r9ecb73f r10ee41a8 54 54 #define IPI_INDEX_HIGH 2 55 55 56 static inline void Install_tm27_vector( void (*handler)(rtems_vector_number))56 static inline void Install_tm27_vector( rtems_interrupt_handler handler ) 57 57 { 58 58 rtems_status_code sc; … … 64 64 "tm17 low", 65 65 RTEMS_INTERRUPT_UNIQUE, 66 (rtems_interrupt_handler)handler,66 handler, 67 67 NULL 68 68 ); … … 76 76 "tm17 high", 77 77 RTEMS_INTERRUPT_UNIQUE, 78 (rtems_interrupt_handler)handler,78 handler, 79 79 NULL 80 80 ); -
bsps/powerpc/ss555/include/tm27.h
r9ecb73f r10ee41a8 33 33 usiu.sipend |= (1 << 17); \ 34 34 \ 35 tm27IrqData.hdl = (rtems_irq_hdl)handler;\35 tm27IrqData.hdl = handler; \ 36 36 BSP_install_rtems_irq_handler (&tm27IrqData); \ 37 37 } -
bsps/riscv/riscv/include/tm27.h
r9ecb73f r10ee41a8 53 53 static rtems_interrupt_entry riscv_tm27_interrupt_entry; 54 54 55 static inline void Install_tm27_vector( 56 void ( *handler )( rtems_vector_number ) 57 ) 55 static inline void Install_tm27_vector( rtems_interrupt_handler handler ) 58 56 { 59 57 rtems_vector_number irq; … … 72 70 rtems_interrupt_entry_initialize( 73 71 &riscv_tm27_interrupt_entry, 74 (rtems_interrupt_handler)handler,72 handler, 75 73 NULL, 76 74 "tm27" -
bsps/sh/gensh4/include/tm27.h
r9ecb73f r10ee41a8 27 27 # error "..." 28 28 #endif 29 30 #define TM27_USE_VECTOR_HANDLER 29 31 30 32 #define Install_tm27_vector( handler ) \ -
bsps/sparc/erc32/include/tm27.h
r9ecb73f r10ee41a8 60 60 #define MUST_WAIT_FOR_INTERRUPT 1 61 61 62 #define TM27_USE_VECTOR_HANDLER 63 62 64 #define Install_tm27_vector( handler ) \ 63 65 set_vector( (handler), TEST_VECTOR, 1 ); … … 81 83 #define MUST_WAIT_FOR_INTERRUPT 1 82 84 83 static inline void Install_tm27_vector( 84 void ( *handler )( rtems_vector_number ) 85 ) 85 static inline void Install_tm27_vector( rtems_interrupt_handler handler ) 86 86 { 87 87 (void) rtems_interrupt_handler_install( … … 89 89 "tm27 low", 90 90 RTEMS_INTERRUPT_SHARED, 91 (rtems_interrupt_handler)handler,91 handler, 92 92 NULL 93 93 ); … … 96 96 "tm27 high", 97 97 RTEMS_INTERRUPT_SHARED, 98 (rtems_interrupt_handler)handler,98 handler, 99 99 NULL 100 100 ); -
bsps/sparc/leon2/include/tm27.h
r9ecb73f r10ee41a8 60 60 #define MUST_WAIT_FOR_INTERRUPT 1 61 61 62 #define TM27_USE_VECTOR_HANDLER 63 62 64 #define Install_tm27_vector( handler ) \ 63 65 set_vector( (handler), TEST_VECTOR, 1 ); … … 80 82 #define MUST_WAIT_FOR_INTERRUPT 1 81 83 82 static inline void Install_tm27_vector( 83 void ( *handler )( rtems_vector_number ) 84 ) 84 static inline void Install_tm27_vector( rtems_interrupt_handler handler ) 85 85 { 86 86 (void) rtems_interrupt_handler_install( … … 88 88 "tm27 low", 89 89 RTEMS_INTERRUPT_SHARED, 90 (rtems_interrupt_handler)handler,90 handler, 91 91 NULL 92 92 ); … … 95 95 "tm27 high", 96 96 RTEMS_INTERRUPT_SHARED, 97 (rtems_interrupt_handler)handler,97 handler, 98 98 NULL 99 99 ); -
bsps/sparc/leon3/include/tm27.h
r9ecb73f r10ee41a8 67 67 #define MUST_WAIT_FOR_INTERRUPT 1 68 68 69 #define TM27_USE_VECTOR_HANDLER 70 69 71 #define Install_tm27_vector( handler ) \ 70 72 set_vector( (handler), TEST_VECTOR, 1 ); … … 89 91 #define MUST_WAIT_FOR_INTERRUPT 1 90 92 91 static inline void Install_tm27_vector( 92 void ( *handler )( rtems_vector_number ) 93 ) 93 static inline void Install_tm27_vector( rtems_interrupt_handler handler ) 94 94 { 95 95 static rtems_interrupt_entry entry_low; … … 109 109 rtems_interrupt_entry_initialize( 110 110 &entry_low, 111 (rtems_interrupt_handler)handler,111 handler, 112 112 NULL, 113 113 "tm27 low" … … 120 120 rtems_interrupt_entry_initialize( 121 121 &entry_high, 122 (rtems_interrupt_handler)handler,122 handler, 123 123 NULL, 124 124 "tm27 high" -
testsuites/rhealstone/rhilatency/ilatency.c
r9ecb73f r10ee41a8 46 46 uint32_t Interrupt_enter_time; 47 47 48 rtems_isr Isr_handler(49 rtems_vector_number vector50 );51 52 48 rtems_task Init( 53 49 rtems_task_argument argument … … 92 88 } 93 89 90 #ifdef TM27_USE_VECTOR_HANDLER 91 static rtems_isr Isr_handler( rtems_vector_number arg ) 92 #else 93 static void Isr_handler( void *arg ) 94 #endif 95 { 96 (void) arg; 97 98 /* See how long it took system to recognize interrupt */ 99 Interrupt_enter_time = benchmark_timer_read(); 100 Clear_tm27_intr(); 101 } 102 94 103 rtems_task Task_1( 95 104 rtems_task_argument argument … … 115 124 rtems_test_exit( 0 ); 116 125 } 117 118 rtems_isr Isr_handler(119 rtems_vector_number vector120 )121 {122 /* See how long it took system to recognize interrupt */123 Interrupt_enter_time = benchmark_timer_read();124 Clear_tm27_intr();125 } -
testsuites/tmtests/tm27/task1.c
r9ecb73f r10ee41a8 63 63 uint32_t timer_overhead; 64 64 65 rtems_isr Isr_handler(66 rtems_vector_number vector67 );68 69 65 static void set_thread_executing( Thread_Control *thread ) 70 66 { … … 127 123 } 128 124 129 rtems_task Task_1(130 rtems_task_argument argument131 )132 {133 Scheduler_priority_Context *scheduler_context =134 _Scheduler_priority_Get_context( _Thread_Scheduler_get_home( _Thread_Get_executing() ) );135 #if defined(RTEMS_SMP)136 rtems_interrupt_level level;137 #endif138 139 Install_tm27_vector( Isr_handler );140 141 /*142 * No preempt .. no nesting143 */144 145 Interrupt_nest = 0;146 147 Interrupt_occurred = 0;148 149 benchmark_timer_initialize();150 Cause_tm27_intr();151 /* goes to Isr_handler */152 153 #if (MUST_WAIT_FOR_INTERRUPT == 1)154 while ( Interrupt_occurred == 0 );155 #endif156 Interrupt_return_time = benchmark_timer_read();157 158 put_time(159 "rtems interrupt: entry overhead returns to interrupted task",160 Interrupt_enter_time,161 1,162 0,163 timer_overhead164 );165 166 put_time(167 "rtems interrupt: exit overhead returns to interrupted task",168 Interrupt_return_time,169 1,170 0,171 timer_overhead172 );173 174 /*175 * No preempt .. nested176 */177 178 _Thread_Dispatch_disable();179 180 Interrupt_nest = 1;181 182 Interrupt_occurred = 0;183 benchmark_timer_initialize();184 Cause_tm27_intr();185 /* goes to Isr_handler */186 187 #if (MUST_WAIT_FOR_INTERRUPT == 1)188 while ( Interrupt_occurred == 0 );189 #endif190 Interrupt_return_time = benchmark_timer_read();191 192 _Thread_Dispatch_enable( _Per_CPU_Get() );193 194 put_time(195 "rtems interrupt: entry overhead returns to nested interrupt",196 Interrupt_enter_nested_time,197 1,198 0,199 0200 );201 202 put_time(203 "rtems interrupt: exit overhead returns to nested interrupt",204 Interrupt_return_nested_time,205 1,206 0,207 0208 );209 210 /*211 * Does a preempt .. not nested212 */213 214 #if defined(RTEMS_SMP)215 _ISR_Local_disable(level);216 #endif217 218 set_thread_executing(219 (Thread_Control *) _Chain_First(&scheduler_context->Ready[LOW_PRIORITY])220 );221 222 _Thread_Dispatch_necessary = 1;223 224 #if defined(RTEMS_SMP)225 _ISR_Local_enable(level);226 #endif227 228 Interrupt_occurred = 0;229 benchmark_timer_initialize();230 Cause_tm27_intr();231 232 /*233 * goes to Isr_handler and then returns234 */235 236 TEST_END();237 rtems_test_exit( 0 );238 }239 240 /*241 * NOTE: When this task is executing, some of the assumptions made242 * regarding the placement of the currently executing task's TCB243 * on the ready chains have been violated. At least the assumption244 * that this task is at the head of the chain for its priority245 * has been violated.246 */247 248 rtems_task Task_2(249 rtems_task_argument argument250 )251 {252 Thread_Control *executing = _Thread_Get_executing();253 const Scheduler_Control *scheduler;254 Scheduler_priority_Context *scheduler_context;255 ISR_lock_Context state_lock_context;256 ISR_lock_Context scheduler_lock_context;257 258 _Thread_State_acquire( executing, &state_lock_context );259 scheduler = _Thread_Scheduler_get_home( executing );260 scheduler_context = _Scheduler_priority_Get_context( scheduler );261 _Thread_State_release( executing, &state_lock_context );262 263 #if (MUST_WAIT_FOR_INTERRUPT == 1)264 while ( Interrupt_occurred == 0 );265 #endif266 end_time = benchmark_timer_read();267 268 put_time(269 "rtems interrupt: entry overhead returns to preempting task",270 Interrupt_enter_time,271 1,272 0,273 timer_overhead274 );275 276 put_time(277 "rtems interrupt: exit overhead returns to preempting task",278 end_time,279 1,280 0,281 0282 );283 284 fflush( stdout );285 286 /*287 * Switch back to the other task to exit the test.288 */289 290 _Thread_State_acquire( executing, &state_lock_context );291 _Scheduler_Acquire_critical( scheduler, &scheduler_lock_context );292 293 set_thread_executing(294 (Thread_Control *) _Chain_First(&scheduler_context->Ready[LOW_PRIORITY])295 );296 297 _Thread_Dispatch_necessary = 1;298 299 _Scheduler_Release_critical( scheduler, &scheduler_lock_context );300 _Thread_State_release( executing, &state_lock_context );301 302 _Thread_Dispatch();303 304 }305 306 125 /* The Isr_handler() and Isr_handler_inner() routines are structured 307 126 * so that there will be as little entry overhead as possible included … … 309 128 */ 310 129 311 void Isr_handler_inner( void ); 312 313 rtems_isr Isr_handler( 314 rtems_vector_number vector 315 ) 316 { 317 end_time = benchmark_timer_read(); 318 319 Interrupt_occurred = 1; 320 Isr_handler_inner(); 321 } 322 323 void Isr_handler_inner( void ) 130 static void Isr_handler_inner( void ) 324 131 { 325 132 … … 350 157 benchmark_timer_initialize(); 351 158 } 159 160 #ifdef TM27_USE_VECTOR_HANDLER 161 static rtems_isr Isr_handler( rtems_vector_number arg ) 162 #else 163 static void Isr_handler( void *arg ) 164 #endif 165 { 166 (void) arg; 167 168 end_time = benchmark_timer_read(); 169 170 Interrupt_occurred = 1; 171 Isr_handler_inner(); 172 } 173 174 rtems_task Task_1( 175 rtems_task_argument argument 176 ) 177 { 178 Scheduler_priority_Context *scheduler_context = 179 _Scheduler_priority_Get_context( _Thread_Scheduler_get_home( _Thread_Get_executing() ) ); 180 #if defined(RTEMS_SMP) 181 rtems_interrupt_level level; 182 #endif 183 184 Install_tm27_vector( Isr_handler ); 185 186 /* 187 * No preempt .. no nesting 188 */ 189 190 Interrupt_nest = 0; 191 192 Interrupt_occurred = 0; 193 194 benchmark_timer_initialize(); 195 Cause_tm27_intr(); 196 /* goes to Isr_handler */ 197 198 #if (MUST_WAIT_FOR_INTERRUPT == 1) 199 while ( Interrupt_occurred == 0 ); 200 #endif 201 Interrupt_return_time = benchmark_timer_read(); 202 203 put_time( 204 "rtems interrupt: entry overhead returns to interrupted task", 205 Interrupt_enter_time, 206 1, 207 0, 208 timer_overhead 209 ); 210 211 put_time( 212 "rtems interrupt: exit overhead returns to interrupted task", 213 Interrupt_return_time, 214 1, 215 0, 216 timer_overhead 217 ); 218 219 /* 220 * No preempt .. nested 221 */ 222 223 _Thread_Dispatch_disable(); 224 225 Interrupt_nest = 1; 226 227 Interrupt_occurred = 0; 228 benchmark_timer_initialize(); 229 Cause_tm27_intr(); 230 /* goes to Isr_handler */ 231 232 #if (MUST_WAIT_FOR_INTERRUPT == 1) 233 while ( Interrupt_occurred == 0 ); 234 #endif 235 Interrupt_return_time = benchmark_timer_read(); 236 237 _Thread_Dispatch_enable( _Per_CPU_Get() ); 238 239 put_time( 240 "rtems interrupt: entry overhead returns to nested interrupt", 241 Interrupt_enter_nested_time, 242 1, 243 0, 244 0 245 ); 246 247 put_time( 248 "rtems interrupt: exit overhead returns to nested interrupt", 249 Interrupt_return_nested_time, 250 1, 251 0, 252 0 253 ); 254 255 /* 256 * Does a preempt .. not nested 257 */ 258 259 #if defined(RTEMS_SMP) 260 _ISR_Local_disable(level); 261 #endif 262 263 set_thread_executing( 264 (Thread_Control *) _Chain_First(&scheduler_context->Ready[LOW_PRIORITY]) 265 ); 266 267 _Thread_Dispatch_necessary = 1; 268 269 #if defined(RTEMS_SMP) 270 _ISR_Local_enable(level); 271 #endif 272 273 Interrupt_occurred = 0; 274 benchmark_timer_initialize(); 275 Cause_tm27_intr(); 276 277 /* 278 * goes to Isr_handler and then returns 279 */ 280 281 TEST_END(); 282 rtems_test_exit( 0 ); 283 } 284 285 /* 286 * NOTE: When this task is executing, some of the assumptions made 287 * regarding the placement of the currently executing task's TCB 288 * on the ready chains have been violated. At least the assumption 289 * that this task is at the head of the chain for its priority 290 * has been violated. 291 */ 292 293 rtems_task Task_2( 294 rtems_task_argument argument 295 ) 296 { 297 Thread_Control *executing = _Thread_Get_executing(); 298 const Scheduler_Control *scheduler; 299 Scheduler_priority_Context *scheduler_context; 300 ISR_lock_Context state_lock_context; 301 ISR_lock_Context scheduler_lock_context; 302 303 _Thread_State_acquire( executing, &state_lock_context ); 304 scheduler = _Thread_Scheduler_get_home( executing ); 305 scheduler_context = _Scheduler_priority_Get_context( scheduler ); 306 _Thread_State_release( executing, &state_lock_context ); 307 308 #if (MUST_WAIT_FOR_INTERRUPT == 1) 309 while ( Interrupt_occurred == 0 ); 310 #endif 311 end_time = benchmark_timer_read(); 312 313 put_time( 314 "rtems interrupt: entry overhead returns to preempting task", 315 Interrupt_enter_time, 316 1, 317 0, 318 timer_overhead 319 ); 320 321 put_time( 322 "rtems interrupt: exit overhead returns to preempting task", 323 end_time, 324 1, 325 0, 326 0 327 ); 328 329 fflush( stdout ); 330 331 /* 332 * Switch back to the other task to exit the test. 333 */ 334 335 _Thread_State_acquire( executing, &state_lock_context ); 336 _Scheduler_Acquire_critical( scheduler, &scheduler_lock_context ); 337 338 set_thread_executing( 339 (Thread_Control *) _Chain_First(&scheduler_context->Ready[LOW_PRIORITY]) 340 ); 341 342 _Thread_Dispatch_necessary = 1; 343 344 _Scheduler_Release_critical( scheduler, &scheduler_lock_context ); 345 _Thread_State_release( executing, &state_lock_context ); 346 347 _Thread_Dispatch(); 348 349 } -
testsuites/validation/tx-call-within-isr.c
r9ecb73f r10ee41a8 77 77 } 78 78 79 static void CallWithinISRHandler( rtems_vector_number vector ) 79 #ifdef TM27_USE_VECTOR_HANDLER 80 static rtems_isr CallWithinISRHandler( rtems_vector_number arg ) 81 #else 82 static void CallWithinISRHandler( void *arg ) 83 #endif 80 84 { 81 85 CallWithinISRContext *ctx; 82 86 83 (void) vector;87 (void) arg; 84 88 ctx = &CallWithinISRInstance; 85 89 … … 149 153 (void) handler_arg; 150 154 151 if ( handler == (rtems_interrupt_handler)CallWithinISRHandler ) {155 if ( handler == CallWithinISRHandler ) { 152 156 *(bool *) arg = true; 153 157 }
Note: See TracChangeset
for help on using the changeset viewer.