KResourceLimit: Difference between revisions
No edit summary  | 
				No edit summary  | 
				||
| (7 intermediate revisions by 3 users not shown) | |||
| Line 1: | Line 1: | ||
[[Category:Kernel objects]]  | [[Category:Kernel auto objects]]  | ||
class [[KResourceLimit]] extends [[KAutoObject]];  | class [[KResourceLimit]] extends [[KAutoObject]];  | ||
| Line 99: | Line 99: | ||
|-  | |-  | ||
| 0x58  | | 0x58  | ||
|   | | KObjectMutex  | ||
|   | | Mutex  | ||
|-  | |-  | ||
|   | | 0x60  | ||
|   | | KPreemptionTimer  | ||
|   | | Preemption timer for the current core, see below  | ||
|}  | |||
There are 4 KResourceLimit objects created on the kernel heap.  Each is used for a different category specified by the exheader's resource limit category specifier in the exheader [[NCCH/Extended_Header#ARM11_Local_System_Capabilities|ARM11 Local System Capabilities]].  | |||
'''KPreemptionTimer''':  | |||
{| class="wikitable" border="1"  | |||
|-  | |-  | ||
!  Offset  | |||
! Type  | |||
!  Description  | |||
|-  | |-  | ||
|   | | 0x0  | ||
| u32  | | u32  | ||
|   | | Max CPU time in ticks for preemption type 0 (default preemption type)  | ||
|-  | |-  | ||
|   | | 0x4  | ||
| u32  | | u32  | ||
|   | | Current timer (in watchdog timer ticks)  | ||
|-  | |-  | ||
|   | | 0x8  | ||
| u32  | | u32  | ||
|   | | Last remembered watchdog timer counter value  | ||
|-  | |-  | ||
|   | | 0xC  | ||
| u32  | | u32    | ||
|   | | Max CPU time in ticks for preemption type 1  | ||
|}  | |}  | ||
A call to svcSetResourceLimitValues with a limit value of 1000 for CPU time must be done first to set up some global variables and the associated [[KTimeableInterruptEvent]] instances, and another call needs to be made to actually enable preemption.  | |||
Preemption type 0: this is the default, preempts threads on core1 and allow them to run only 2ms * (timeLimit / 100).  | |||
Preemption type 1: ''seems'' to be borked, it was apparently intended to preempt threads on all cores but seems to only preempt the kernel thread running the preemptor itself and threads on core1... (time slice: 12.5ms * (timeLimit / 100))  | |||
"Firm" dev consoles can switch between these two types using svcKernelSetState type 6.  | |||