KResourceLimit: Difference between revisions
No edit summary |
No edit summary |
||
(9 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 98: | Line 98: | ||
| Current CPU time | | Current CPU time | ||
|- | |- | ||
| 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 | |||
| Max CPU time in ticks for preemption type 0 (default preemption type) | |||
|- | |||
| 0x4 | |||
| u32 | |||
| Current timer (in watchdog timer ticks) | |||
|- | |||
| 0x8 | |||
| u32 | |||
| Last remembered watchdog timer counter value | |||
|- | |||
| 0xC | |||
| 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. |