KResourceLimit: Difference between revisions
Filled in all the resource limits |
No edit summary |
||
(10 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 19: | Line 19: | ||
|- | |- | ||
| 0x8 | | 0x8 | ||
| | | s32 | ||
| Max Priority | | Max Priority | ||
|- | |- | ||
| 0xC | | 0xC | ||
| | | s32 | ||
| Max commit | | Max commit | ||
|- | |- | ||
| 0x10 | | 0x10 | ||
| | | s32 | ||
| Max thread | | Max thread | ||
|- | |- | ||
| 0x14 | | 0x14 | ||
| | | s32 | ||
| Max event | | Max event | ||
|- | |- | ||
| 0x18 | | 0x18 | ||
| | | s32 | ||
| Max mutex | | Max mutex | ||
|- | |- | ||
| 0x1C | | 0x1C | ||
| | | s32 | ||
| Max semaphore | | Max semaphore | ||
|- | |- | ||
| 0x20 | | 0x20 | ||
| | | s32 | ||
| Max timer | | Max timer | ||
|- | |- | ||
| 0x24 | | 0x24 | ||
| | | s32 | ||
| Max shared memory | | Max shared memory | ||
|- | |- | ||
| 0x28 | | 0x28 | ||
| | | s32 | ||
| Max address arbiter | | Max address arbiter | ||
|- | |- | ||
| 0x2C | | 0x2C | ||
| | | s32 | ||
| Max CPU time | | Max CPU time | ||
|- | |- | ||
| 0x30 | | 0x30 | ||
| | | s32 | ||
| Current Priority | | Current Priority | ||
|- | |- | ||
| 0x34 | | 0x34 | ||
| | | s32 | ||
| Current commit | | Current commit | ||
|- | |- | ||
| 0x38 | | 0x38 | ||
| | | s32 | ||
| Current thread | | Current thread | ||
|- | |- | ||
| 0x3C | | 0x3C | ||
| | | s32 | ||
| Current event | | Current event | ||
|- | |- | ||
| 0x40 | | 0x40 | ||
| | | s32 | ||
| Current mutex | | Current mutex | ||
|- | |- | ||
| 0x44 | | 0x44 | ||
| | | s32 | ||
| Current semaphore | | Current semaphore | ||
|- | |- | ||
| 0x48 | | 0x48 | ||
| | | s32 | ||
| Current timer | | Current timer | ||
|- | |- | ||
| 0x4C | | 0x4C | ||
| | | s32 | ||
| Current shared memory | | Current shared memory | ||
|- | |- | ||
| 0x50 | | 0x50 | ||
| | | s32 | ||
| Current address arbiter | | Current address arbiter | ||
|- | |- | ||
| 0x54 | | 0x54 | ||
| s32 | |||
| 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 | | 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. |