KResourceLimit: Difference between revisions
No edit summary |
No edit summary |
||
(One intermediate revision by one other user not shown) | |||
Line 103: | Line 103: | ||
|- | |- | ||
| 0x60 | | 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. |