12 | | {| border="1" style="margin: 1em auto 1em auto;text-align: center;" |
13 | | |+ |
14 | | |- |
15 | | |'''Design Issues''' || '''Summary''' || '''Notes''' |
16 | | |- |
17 | | | [http://www.rtems.org/wiki/index.php/SMP#Low-Level_Start Low Level Start] || TBD || |
18 | | |- |
19 | | | [http://www.rtems.org/wiki/index.php/SMP#Processor_Affinity Processor Affinity] || Ongoing || |
20 | | |- |
21 | | | [http://www.rtems.org/wiki/index.php/SMP#Atomic_Operations Atomic Operations] || TBD || |
22 | | |- |
23 | | | [http://www.rtems.org/wiki/index.php/SMP#SMP_Locks SMP Locks] || TBD || |
24 | | |- |
25 | | | [http://www.rtems.org/wiki/index.php/SMP#ISR_Locks ISR Locks] || TBD || |
26 | | |- |
27 | | | [http://www.rtems.org/wiki/index.php/SMP#Giant_Lock_vs._Fine_Grained_Locking Giant Lock vs Fine Grained Locking] || TBD || |
28 | | |- |
29 | | | [http://www.rtems.org/wiki/index.php/SMP#Watchdog_Handler Watchdog Handler] || TBD || |
30 | | |- |
31 | | | [http://www.rtems.org/wiki/index.php/SMP#Per-CPU_Control Per-CPU Control] || TBD || |
32 | | |- |
33 | | | [http://www.rtems.org/wiki/index.php/SMP#Interrupt_Support Interrupt Support] || TBD || |
34 | | |- |
35 | | | [http://www.rtems.org/wiki/index.php/SMP#Global_Scheduler Global Scheduler] || TBD || |
36 | | |- |
37 | | | [http://www.rtems.org/wiki/index.php/SMP#Clustered_Scheduling Clustered Scheduling] || TBD || |
38 | | |- |
39 | | | [http://www.rtems.org/wiki/index.php/SMP#Task_Variables Task Variables] || TBD || |
40 | | |- |
41 | | | [http://www.rtems.org/wiki/index.php/SMP#Non-Preempt_Mode_for_Mutual_Exclusion Non-Preempt Mode for Mutual Exclusion] || TBD || |
42 | | |- |
43 | | | [http://www.rtems.org/wiki/index.php/SMP#Thread_Restart Thread Restart] || TBD || |
44 | | |- |
45 | | | [http://www.rtems.org/wiki/index.php/SMP#Thread_Delete Thread Delete] || TBD || |
46 | | |- |
47 | | | [http://www.rtems.org/wiki/index.php/SMP#Semaphores_and_Mutexes Semaphores and Mutexes] || TBD || |
48 | | |- |
49 | | |} |
50 | | |
51 | | |
52 | | {| border="1" style="margin: 1em auto 1em auto;text-align: center;" |
53 | | |+ |
54 | | |- |
55 | | |'''Implementation Status''' || '''Summary''' || '''Notes''' |
56 | | |- |
57 | | | [http://www.rtems.org/wiki/index.php/SMP#Tool_Chain Tool Chain] || TBD || |
58 | | |- |
59 | | | [http://www.rtems.org/wiki/index.php/SMP#Profiling Profiling] || Complete || CPU counter support is complete. The profiling support is complete. |
60 | | |- |
61 | | | [http://www.rtems.org/wiki/index.php/SMP#Interrupt_Support_2 Interrupt Support] || TBD || |
62 | | |- |
63 | | | [http://www.rtems.org/wiki/index.php/SMP#Clustered_Scheduling_2 Clustered Scheduling] || Complete || |
64 | | |- |
65 | | | [http://www.rtems.org/wiki/index.php/SMP#Multiprocessor_Resource_Sharing_Protocol_-_MrsP Multiprocessor Resource Sharing Protocol - MrsP] || Complete || |
66 | | |- |
67 | | | [http://www.rtems.org/wiki/index.php/SMP#Fine_Grained_Locking Fine Grained Locking] || TBD || |
68 | | |- |
69 | | | [http://www.rtems.org/wiki/index.php/SMP#Post-Switch_Actions Post-Switch Actions] || Complete || Implemented as post-switch thread-actions |
70 | | |- |
71 | | | [http://www.rtems.org/wiki/index.php/SMP#Thread_Delete.2FRestart Thread Delete/Restart] || Complete || |
72 | | |- |
73 | | | [http://www.rtems.org/wiki/index.php/SMP#Barrier_Synchronization Barrier Synchronization] || Complete || |
74 | | |- |
75 | | | [http://www.rtems.org/wiki/index.php/SMP#Low-Level_Broadcasts Low-Level Broadcasts] || TBD || |
76 | | |- |
77 | | | [http://www.rtems.org/wiki/index.php/SMP#Termios_Framework Termios Framework] || Complete || |
78 | | |- |
79 | | |} |
| 12 | |
| 13 | |
| 14 | || '''Design Issues''' || '''Summary''' || '''Notes''' || |
| 15 | || [http://www.rtems.org/wiki/index.php/SMP#Low-Level_Start Low Level Start] || TBD || || |
| 16 | || [http://www.rtems.org/wiki/index.php/SMP#Processor_Affinity Processor Affinity] || Ongoing || || |
| 17 | || [http://www.rtems.org/wiki/index.php/SMP#Atomic_Operations Atomic Operations] || TBD || || |
| 18 | || [http://www.rtems.org/wiki/index.php/SMP#SMP_Locks SMP Locks] || TBD || || |
| 19 | || [http://www.rtems.org/wiki/index.php/SMP#ISR_Locks ISR Locks] || TBD || || |
| 20 | || [http://www.rtems.org/wiki/index.php/SMP#Giant_Lock_vs._Fine_Grained_Locking Giant Lock vs Fine Grained Locking] || TBD || || |
| 21 | || [http://www.rtems.org/wiki/index.php/SMP#Watchdog_Handler Watchdog Handler] || TBD || || |
| 22 | || [http://www.rtems.org/wiki/index.php/SMP#Per-CPU_Control Per-CPU Control] || TBD || || |
| 23 | || [http://www.rtems.org/wiki/index.php/SMP#Interrupt_Support Interrupt Support] || TBD || || |
| 24 | || [http://www.rtems.org/wiki/index.php/SMP#Global_Scheduler Global Scheduler] || TBD || || |
| 25 | || [http://www.rtems.org/wiki/index.php/SMP#Clustered_Scheduling Clustered Scheduling] || TBD || || |
| 26 | || [http://www.rtems.org/wiki/index.php/SMP#Task_Variables Task Variables] || TBD || || |
| 27 | || [http://www.rtems.org/wiki/index.php/SMP#Non-Preempt_Mode_for_Mutual_Exclusion Non-Preempt Mode for Mutual Exclusion] || TBD || || |
| 28 | || [http://www.rtems.org/wiki/index.php/SMP#Thread_Restart Thread Restart] || TBD || || |
| 29 | || [http://www.rtems.org/wiki/index.php/SMP#Thread_Delete Thread Delete] || TBD || || |
| 30 | || [http://www.rtems.org/wiki/index.php/SMP#Semaphores_and_Mutexes Semaphores and Mutexes] || TBD || || |
| 31 | || |
| 32 | |
| 33 | |
| 34 | |
| 35 | || '''Implementation Status''' || '''Summary''' || '''Notes''' || |
| 36 | || [http://www.rtems.org/wiki/index.php/SMP#Tool_Chain Tool Chain] || TBD || || |
| 37 | || [http://www.rtems.org/wiki/index.php/SMP#Profiling Profiling] || Complete || CPU counter support is complete. The profiling support is complete. |
| 38 | || [http://www.rtems.org/wiki/index.php/SMP#Interrupt_Support_2 Interrupt Support] || TBD || || |
| 39 | || [http://www.rtems.org/wiki/index.php/SMP#Clustered_Scheduling_2 Clustered Scheduling] || Complete || || |
| 40 | || [http://www.rtems.org/wiki/index.php/SMP#Multiprocessor_Resource_Sharing_Protocol_-_MrsP Multiprocessor Resource Sharing Protocol - MrsP] || Complete || || |
| 41 | || [http://www.rtems.org/wiki/index.php/SMP#Fine_Grained_Locking Fine Grained Locking] || TBD || || |
| 42 | || [http://www.rtems.org/wiki/index.php/SMP#Post-Switch_Actions Post-Switch Actions] || Complete || Implemented as post-switch thread-actions |
| 43 | || [http://www.rtems.org/wiki/index.php/SMP#Thread_Delete.2FRestart Thread Delete/Restart] || Complete || || |
| 44 | || [http://www.rtems.org/wiki/index.php/SMP#Barrier_Synchronization Barrier Synchronization] || Complete || || |
| 45 | || [http://www.rtems.org/wiki/index.php/SMP#Low-Level_Broadcasts Low-Level Broadcasts] || TBD || || |
| 46 | || [http://www.rtems.org/wiki/index.php/SMP#Termios_Framework Termios Framework] || Complete || || |
1492 | | <span style="color:lime">level = ISR_disable()</span> |
1493 | | wait_queue = thread.get_wait_queue() |
1494 | | if wait_queue != NULL: |
1495 | | wait_queue.extract(executing) |
1496 | | if thread.is_timer_active(): |
1497 | | thread.deactivate_timer() |
1498 | | <span style="color:lime">ISR_enable(level)</span> |
1499 | | thread.remove_timer() |
1500 | | else: |
1501 | | <span style="color:lime">ISR_enable(level)</span> |
1502 | | <span style="color:fuchsia">level = ISR_disable()</span> |
1503 | | if thread.is_state_set(MUTEX_BLOCKING_STATE): |
1504 | | thread.clear_state(MUTEX_BLOCKING_STATE) |
1505 | | if thread.is_ready(): |
1506 | | scheduler_unblock(thread) |
1507 | | <span style="color:fuchsia">ISR_enable(level)</span> |
1508 | | else: |
1509 | | <span style="color:lime">ISR_enable(level)</span> |
1510 | | else: |
1511 | | <span style="color:red">ISR_enable(level)</span> |
1512 | | |
1513 | | The thread.remove_timer() operation is quite complex and a problem area of its |
1514 | | own. See discussion about the [wiki:Watchdog_Handler Watchdog Handler]. |
1515 | | |
1516 | | The scheduler operation points are in a good shape. Here we can easily use one |
1517 | | SMP lock for the thread state and one SMP lock for the scheduler state. |
1518 | | |
1519 | | The big problem is that the mutex object state changes and the thread enqueue |
1520 | | operation are split up into several parts. This was done to ensure a next to |
1521 | | optimal interrupt latency with only constant-time sections of disabled |
1522 | | interrupts. The trade- |
| 1459 | <span style |