KThread: Difference between revisions
mNo edit summary |
No edit summary |
||
Line 7: | Line 7: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Offset | ||
! Type | ! Type | ||
! | ! Description | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
Line 45: | Line 45: | ||
| 0x34 | | 0x34 | ||
| u8 | | u8 | ||
| | | Scheduling mask | ||
|- | |- | ||
| 0x35 | | 0x35 | ||
Line 174: | Line 174: | ||
With the following declarations: <code>struct KThreadLinkedList { KThread *first, *last; };</code> and <code>struct KThreadLinkedListNode { KThread *prev, *next; };</code>. | With the following declarations: <code>struct KThreadLinkedList { KThread *first, *last; };</code> and <code>struct KThreadLinkedListNode { KThread *prev, *next; };</code>. | ||
=Thread Scheduling Mask= | |||
The thread scheduling mask is made of a low nibble (enum) and a high nibble (bitfield). | |||
Low nibble: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 | |||
| The thread is not scheduled | |||
|- | |||
| 1 | |||
| The thread is scheduled | |||
|- | |||
| 2 | |||
| The thread is being terminated | |||
|} | |||
High nibble: | |||
{| class="wikitable" border="1" | |||
|- | |||
! Mask | |||
! Description | |||
|- | |||
| 0 | |||
| Nothing special | |||
|- | |||
| 0x8 (bit 3) | |||
| The thread has been debug-locked | |||
|} | |||
A thread is scheduled *if and only if* its (full) scheduling mask is exactly 1. This allows debug-(un)locking of threads to be done transparently. | |||
=Thread Affinity Mask= | =Thread Affinity Mask= | ||