KResourceLimit: Difference between revisions
mNo edit summary |
No edit summary |
||
(6 intermediate revisions by 2 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. |