diff --git a/stratosphere/pm/source/pm_resource_limits.cpp b/stratosphere/pm/source/pm_resource_limits.cpp index d4649bf..d6d5b70 100644 --- a/stratosphere/pm/source/pm_resource_limits.cpp +++ b/stratosphere/pm/source/pm_resource_limits.cpp @@ -122,6 +122,9 @@ memcpy(&g_resource_limits, &g_resource_limits_deprecated, sizeof(g_resource_limits)); } + /* 7.0.0+: Nintendo restricts the number of system threads here, from 0x260 -> 0x60. */ + /* We will not do this. */ + if (kernelAbove600()) { /* NOTE: 5 is a fake type, official code does not do this. */ /* This is done for ease of backwards compatibility. */ diff --git a/stratosphere/pm/source/pm_shell.cpp b/stratosphere/pm/source/pm_shell.cpp index a1e6dbd..0dc429a 100644 --- a/stratosphere/pm/source/pm_shell.cpp +++ b/stratosphere/pm/source/pm_shell.cpp @@ -104,3 +104,10 @@ Result ShellService::BoostSystemMemoryResourceLimit(u64 sysmem_size) { return ResourceLimitUtils::BoostSystemMemoryResourceLimit(sysmem_size); } + +Result ShellService::BoostSystemThreadsResourceLimit() { + /* Starting in 7.0.0, Nintendo reduces the number of system threads from 0x260 to 0x60, */ + /* Until this command is called to double that amount to 0xC0. */ + /* We will simply not reduce the number of system threads available for no reason. */ + return 0x0; +} diff --git a/stratosphere/pm/source/pm_shell.hpp b/stratosphere/pm/source/pm_shell.hpp index cd707a5..3316e16 100644 --- a/stratosphere/pm/source/pm_shell.hpp +++ b/stratosphere/pm/source/pm_shell.hpp @@ -43,7 +43,9 @@ Shell_Cmd_5X_GetProcessEventType = 4, Shell_Cmd_5X_NotifyBootFinished = 5, Shell_Cmd_5X_GetApplicationProcessId = 6, - Shell_Cmd_5X_BoostSystemMemoryResourceLimit = 7 + Shell_Cmd_5X_BoostSystemMemoryResourceLimit = 7, + + Shell_Cmd_BoostSystemThreadsResourceLimit = 8 }; class ShellService final : public IServiceObject { @@ -59,6 +61,7 @@ void NotifyBootFinished(); Result GetApplicationProcessId(Out pid); Result BoostSystemMemoryResourceLimit(u64 sysmem_size); + Result BoostSystemThreadsResourceLimit(); public: DEFINE_SERVICE_DISPATCH_TABLE { /* 1.0.0-4.0.0 */ @@ -84,5 +87,8 @@ MakeServiceCommandMeta(), MakeServiceCommandMeta(), MakeServiceCommandMeta(), + + /* 7.0.0-* */ + MakeServiceCommandMeta(), }; };