SceKernelThreadMgr

PSVita supports multi-threading in the non-secure kernel but not in the secure kernel. There is no user/POSIX threads; all threads are implemented as kernel threads and processes are functionally the same as threads. Threads can be specified to run on a specific core with the CPU affinity mask option when creating the thread and by default threads can run on any core. The kernel process can also run on any core. Additionally, the secure kernel can also run on any core.

Module
This module exists only in non-secure world. The SELF can be found in.

Libraries
This module is accessible by usermode.

_sceKernelExtendKernelStackWideForDriver
Temp name was sceKernelRunWithStackForDriver.

This takes a function and runs it exclusively on the current core on its own stack.

sceKernelExtendKernelStackWideForDriver
Temp name was sceKernelRunWithStack2ForDriver.

sceKernelIsThreadDebugSuspendedForDriver
Used by SceCoredump maybe to get the state at the time of process crash.

sceKernelGetThreadIdListForDriver
This function is used to query and obtain the number of thread within a process.

sceKernelGetThreadCpuRegistersForDriver
This function is used to get the state of the registers for a SUSPENDED thread. It returns the registers in a two part structure. It's uncertian what the difference is between the two parts. It seems like its a user/kernel separation, but it's uncertain. It could also be a current/exception difference, but it is unconvincing. In normal usage on a suspended thread it seems to be the user aspect that contains valid values. When you query a suspended thread that has no had the opportunity to start yet, the kernel side is filled.

sceKernelChangeThreadSuspendStatusForDriver
This function allows you to change the status of a suspended thread. Most of the valid suspend bits are unknown, but some can be used to prevent the kernel rethrowing exceptions or pull threads into the running/ready state.

sceKernelFinalizeFastMutexForDriver
Temp name was sceKernelDeleteFastMutexForDriver.

sceKernelSetThreadAccessLevelForDriver
Temp name was sceKernelSetPermissionForDriver.

sceKernelGetProcessIdForDriver
Returns the process ID.

sceKernelSetProcessIdToTLSForDriver
Sets given pid into TLS.

sceKernelGetProcessIdFromTLSForDriver
Gets pid from TLS.

sceKernelRegisterTimerForDriver
// seen: unk = 2 so maybe UDCD bus

sceKernelGetTHBPForDriver
Used by SceDeci4pSDbgp.

Get thread hardware break point.

SceThreadmgrForDriver_86DAE59B
Get maybe current CPU mask.

SceThreadmgrForKernel_86DAE59B
Get maybe current CPU mask.

sceKernelGetCurrentThreadUnkInfoForKernel
Get some current thread information.

sceKernelGetThreadIdListForKernel
This function is used to query and obtain the number of thread within a process.

sceKernelSetThreadAccessLevelForKernel
Temp name was sceKernelSetPermissionForKernel.

sceKernelGetProcessIdForKernel
Returns the process ID.

_sceKernelExtendKernelStackWideForKernel
Temp name was sceKernelRunWithStackForKernel.

This takes a function and runs it exclusively on the current core on its own stack.

sceKernelExtendKernelStackWideForKernel
Temp name was sceKernelRunWithStack2ForKernel.

sceKernelSetThreadDebugCallbackForKernel
This is a guessed name.

Code example:

_sceKernelDeleteThread
Simply calls sceKernelDeleteThread;

_sceKernelChangeThreadCpuAffinityMask
Simply calls sceKernelChangeThreadCpuAffinityMask.