Changes

542 bytes added ,  00:11, 12 March 2017
no edit summary
Line 7: Line 7:  
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Offset
+
! Offset
 
! Type
 
! Type
! Description
+
! Description
 
|-
 
|-
 
| 0x0
 
| 0x0
Line 45: Line 45:  
| 0x34
 
| 0x34
 
| u8
 
| u8
| Whether the thread is in the scheduler's queue and is ready to run
+
| 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=