From ab25a959f2576923964230329c1fbfd12a8a1ef1 Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Mon, 21 Mar 2022 23:52:16 -0700 Subject: [PATCH] pm/kern: update for 14.0.0 --- .../mesosphere/kern_k_memory_layout.hpp | 4 ++-- .../source/init/kern_init_slab_setup.cpp | 2 +- .../pm/impl/pm_debug_monitor_interface.hpp | 2 ++ .../pm/impl/pm_information_interface.hpp | 12 ++++++---- .../pm/impl/pm_shell_interface.hpp | 23 ++++++++++--------- .../include/stratosphere/pm/pm_dmnt_api.hpp | 1 + .../include/stratosphere/pm/pm_info_api.hpp | 3 +++ .../include/stratosphere/pm/pm_shell_api.hpp | 1 + .../include/stratosphere/pm/pm_types.hpp | 8 +++++++ libstratosphere/source/pm/pm_dmnt_api.cpp | 6 +++++ libstratosphere/source/pm/pm_info_api.cpp | 12 ++++++++++ libstratosphere/source/pm/pm_shell_api.cpp | 5 ++++ 12 files changed, 60 insertions(+), 19 deletions(-) diff --git a/libmesosphere/include/mesosphere/kern_k_memory_layout.hpp b/libmesosphere/include/mesosphere/kern_k_memory_layout.hpp index 34d3d2e6..e451b962 100644 --- a/libmesosphere/include/mesosphere/kern_k_memory_layout.hpp +++ b/libmesosphere/include/mesosphere/kern_k_memory_layout.hpp @@ -49,8 +49,8 @@ namespace ams::kern { constexpr size_t KernelSlabHeapGapsSizeMax = 2_MB - 64_KB; constexpr size_t KernelSlabHeapSize = KernelSlabHeapDataSize + KernelSlabHeapGapsSizeMax; - /* NOTE: This is calculated from KThread slab counts, assuming KThread size <= 0x860. */ - constexpr size_t KernelSlabHeapAdditionalSize = 0x68000; + /* NOTE: This is calculated from KThread slab counts, assuming KThread size <= 0x800. */ + constexpr size_t KernelSlabHeapAdditionalSize = 0x148000; constexpr size_t KernelResourceSize = KernelPageTableHeapSize + KernelInitialPageHeapSize + KernelSlabHeapSize; diff --git a/libmesosphere/source/init/kern_init_slab_setup.cpp b/libmesosphere/source/init/kern_init_slab_setup.cpp index 781df17f..03126081 100644 --- a/libmesosphere/source/init/kern_init_slab_setup.cpp +++ b/libmesosphere/source/init/kern_init_slab_setup.cpp @@ -72,7 +72,7 @@ namespace ams::kern::init { constexpr size_t SlabCountKIoPool = 1; constexpr size_t SlabCountKIoRegion = 6; - constexpr size_t SlabCountExtraKThread = 160; + constexpr size_t SlabCountExtraKThread = (1024 + 256 + 256) - SlabCountKThread; namespace test { diff --git a/libstratosphere/include/stratosphere/pm/impl/pm_debug_monitor_interface.hpp b/libstratosphere/include/stratosphere/pm/impl/pm_debug_monitor_interface.hpp index 08e899d7..e6555f7f 100644 --- a/libstratosphere/include/stratosphere/pm/impl/pm_debug_monitor_interface.hpp +++ b/libstratosphere/include/stratosphere/pm/impl/pm_debug_monitor_interface.hpp @@ -27,6 +27,7 @@ AMS_SF_METHOD_INFO(C, H, 4, Result, GetApplicationProcessId, (sf::Out out), (out)) \ AMS_SF_METHOD_INFO(C, H, 5, Result, HookToCreateApplicationProcess, (sf::OutCopyHandle out_hook), (out_hook)) \ AMS_SF_METHOD_INFO(C, H, 6, Result, ClearHook, (u32 which), (which), hos::Version_6_0_0) \ + AMS_SF_METHOD_INFO(C, H, 7, Result, GetProgramId, (sf::Out out, os::ProcessId process_id), (out, process_id)) \ AMS_SF_METHOD_INFO(C, H, 65000, Result, AtmosphereGetProcessInfo, (sf::OutCopyHandle out_process_handle, sf::Out out_loc, sf::Out out_status, os::ProcessId process_id), (out_process_handle, out_loc, out_status, process_id)) \ AMS_SF_METHOD_INFO(C, H, 65001, Result, AtmosphereGetCurrentLimitInfo, (sf::Out out_cur_val, sf::Out out_lim_val, u32 group, u32 resource), (out_cur_val, out_lim_val, group, resource)) @@ -40,6 +41,7 @@ AMS_SF_DEFINE_INTERFACE(ams::pm::impl, IDebugMonitorInterface, AMS_PM_I_DEBUG_MO AMS_SF_METHOD_INFO(C, H, 4, Result, HookToCreateProcess, (sf::OutCopyHandle out_hook, ncm::ProgramId program_id), (out_hook, program_id)) \ AMS_SF_METHOD_INFO(C, H, 5, Result, GetApplicationProcessId, (sf::Out out), (out)) \ AMS_SF_METHOD_INFO(C, H, 6, Result, HookToCreateApplicationProcess, (sf::OutCopyHandle out_hook), (out_hook)) \ + AMS_SF_METHOD_INFO(C, H, 7, Result, GetProgramId, (sf::Out out, os::ProcessId process_id), (out, process_id)) \ AMS_SF_METHOD_INFO(C, H, 65000, Result, AtmosphereGetProcessInfo, (sf::OutCopyHandle out_process_handle, sf::Out out_loc, sf::Out out_status, os::ProcessId process_id), (out_process_handle, out_loc, out_status, process_id)) \ AMS_SF_METHOD_INFO(C, H, 65001, Result, AtmosphereGetCurrentLimitInfo, (sf::Out out_cur_val, sf::Out out_lim_val, u32 group, u32 resource), (out_cur_val, out_lim_val, group, resource)) diff --git a/libstratosphere/include/stratosphere/pm/impl/pm_information_interface.hpp b/libstratosphere/include/stratosphere/pm/impl/pm_information_interface.hpp index 23c7065c..7a28ff57 100644 --- a/libstratosphere/include/stratosphere/pm/impl/pm_information_interface.hpp +++ b/libstratosphere/include/stratosphere/pm/impl/pm_information_interface.hpp @@ -19,10 +19,12 @@ #include #include -#define AMS_PM_I_INFORMATION_INTERFACE_INTERFACE_INFO(C, H) \ - AMS_SF_METHOD_INFO(C, H, 0, Result, GetProgramId, (sf::Out out, os::ProcessId process_id), (out, process_id)) \ - AMS_SF_METHOD_INFO(C, H, 65000, Result, AtmosphereGetProcessId, (sf::Out out, ncm::ProgramId program_id), (out, program_id)) \ - AMS_SF_METHOD_INFO(C, H, 65001, Result, AtmosphereHasLaunchedBootProgram, (sf::Out out, ncm::ProgramId program_id), (out, program_id)) \ - AMS_SF_METHOD_INFO(C, H, 65002, Result, AtmosphereGetProcessInfo, (sf::Out out_loc, sf::Out out_status, os::ProcessId process_id), (out_loc, out_status, process_id)) +#define AMS_PM_I_INFORMATION_INTERFACE_INTERFACE_INFO(C, H) \ + AMS_SF_METHOD_INFO(C, H, 0, Result, GetProgramId, (sf::Out out, os::ProcessId process_id), (out, process_id)) \ + AMS_SF_METHOD_INFO(C, H, 1, Result, GetAppletCurrentResourceLimitValues, (sf::Out out), (out)) \ + AMS_SF_METHOD_INFO(C, H, 2, Result, GetAppletPeakResourceLimitValues, (sf::Out out), (out)) \ + AMS_SF_METHOD_INFO(C, H, 65000, Result, AtmosphereGetProcessId, (sf::Out out, ncm::ProgramId program_id), (out, program_id)) \ + AMS_SF_METHOD_INFO(C, H, 65001, Result, AtmosphereHasLaunchedBootProgram, (sf::Out out, ncm::ProgramId program_id), (out, program_id)) \ + AMS_SF_METHOD_INFO(C, H, 65002, Result, AtmosphereGetProcessInfo, (sf::Out out_loc, sf::Out out_status, os::ProcessId process_id), (out_loc, out_status, process_id)) AMS_SF_DEFINE_INTERFACE(ams::pm::impl, IInformationInterface, AMS_PM_I_INFORMATION_INTERFACE_INTERFACE_INFO) diff --git a/libstratosphere/include/stratosphere/pm/impl/pm_shell_interface.hpp b/libstratosphere/include/stratosphere/pm/impl/pm_shell_interface.hpp index 5bd0dc95..45684f8f 100644 --- a/libstratosphere/include/stratosphere/pm/impl/pm_shell_interface.hpp +++ b/libstratosphere/include/stratosphere/pm/impl/pm_shell_interface.hpp @@ -19,17 +19,18 @@ #include #include -#define AMS_PM_I_SHELL_INTERFACE_INTERFACE_INFO(C, H) \ - AMS_SF_METHOD_INFO(C, H, 0, Result, LaunchProgram, (sf::Out out_process_id, const ncm::ProgramLocation &loc, u32 flags), (out_process_id, loc, flags)) \ - AMS_SF_METHOD_INFO(C, H, 1, Result, TerminateProcess, (os::ProcessId process_id), (process_id)) \ - AMS_SF_METHOD_INFO(C, H, 2, Result, TerminateProgram, (ncm::ProgramId program_id), (program_id)) \ - AMS_SF_METHOD_INFO(C, H, 3, void, GetProcessEventHandle, (sf::OutCopyHandle out), (out)) \ - AMS_SF_METHOD_INFO(C, H, 4, void, GetProcessEventInfo, (sf::Out out), (out)) \ - AMS_SF_METHOD_INFO(C, H, 5, void, NotifyBootFinished, (), ()) \ - AMS_SF_METHOD_INFO(C, H, 6, Result, GetApplicationProcessIdForShell, (sf::Out out), (out)) \ - AMS_SF_METHOD_INFO(C, H, 7, Result, BoostSystemMemoryResourceLimit, (u64 boost_size), (boost_size)) \ - AMS_SF_METHOD_INFO(C, H, 8, Result, BoostApplicationThreadResourceLimit, (), (), hos::Version_7_0_0) \ - AMS_SF_METHOD_INFO(C, H, 9, void, GetBootFinishedEventHandle, (sf::OutCopyHandle out), (out), hos::Version_8_0_0) +#define AMS_PM_I_SHELL_INTERFACE_INTERFACE_INFO(C, H) \ + AMS_SF_METHOD_INFO(C, H, 0, Result, LaunchProgram, (sf::Out out_process_id, const ncm::ProgramLocation &loc, u32 flags), (out_process_id, loc, flags)) \ + AMS_SF_METHOD_INFO(C, H, 1, Result, TerminateProcess, (os::ProcessId process_id), (process_id)) \ + AMS_SF_METHOD_INFO(C, H, 2, Result, TerminateProgram, (ncm::ProgramId program_id), (program_id)) \ + AMS_SF_METHOD_INFO(C, H, 3, void, GetProcessEventHandle, (sf::OutCopyHandle out), (out)) \ + AMS_SF_METHOD_INFO(C, H, 4, void, GetProcessEventInfo, (sf::Out out), (out)) \ + AMS_SF_METHOD_INFO(C, H, 5, void, NotifyBootFinished, (), ()) \ + AMS_SF_METHOD_INFO(C, H, 6, Result, GetApplicationProcessIdForShell, (sf::Out out), (out)) \ + AMS_SF_METHOD_INFO(C, H, 7, Result, BoostSystemMemoryResourceLimit, (u64 boost_size), (boost_size)) \ + AMS_SF_METHOD_INFO(C, H, 8, Result, BoostApplicationThreadResourceLimit, (), (), hos::Version_7_0_0) \ + AMS_SF_METHOD_INFO(C, H, 9, void, GetBootFinishedEventHandle, (sf::OutCopyHandle out), (out), hos::Version_8_0_0) \ + AMS_SF_METHOD_INFO(C, H, 10, Result, BoostSystemThreadResourceLimit, (), ()) AMS_SF_DEFINE_INTERFACE(ams::pm::impl, IShellInterface, AMS_PM_I_SHELL_INTERFACE_INTERFACE_INFO) diff --git a/libstratosphere/include/stratosphere/pm/pm_dmnt_api.hpp b/libstratosphere/include/stratosphere/pm/pm_dmnt_api.hpp index 78cbbdc2..7a896ae6 100644 --- a/libstratosphere/include/stratosphere/pm/pm_dmnt_api.hpp +++ b/libstratosphere/include/stratosphere/pm/pm_dmnt_api.hpp @@ -24,6 +24,7 @@ namespace ams::pm::dmnt { /* Debug Monitor API. */ Result StartProcess(os::ProcessId process_id); + Result GetProgramId(ncm::ProgramId *out_program_id, os::ProcessId process_id); Result GetProcessId(os::ProcessId *out_process_id, const ncm::ProgramId program_id); Result GetApplicationProcessId(os::ProcessId *out_process_id); Result HookToCreateApplicationProcess(os::NativeHandle *out_handle); diff --git a/libstratosphere/include/stratosphere/pm/pm_info_api.hpp b/libstratosphere/include/stratosphere/pm/pm_info_api.hpp index f18226c7..c771eb33 100644 --- a/libstratosphere/include/stratosphere/pm/pm_info_api.hpp +++ b/libstratosphere/include/stratosphere/pm/pm_info_api.hpp @@ -29,6 +29,9 @@ namespace ams::pm::info { Result GetProcessId(os::ProcessId *out_process_id, ncm::ProgramId program_id); Result HasLaunchedBootProgram(bool *out, ncm::ProgramId program_id); + Result GetAppletCurrentResourceLimitValues(pm::ResourceLimitValues *out); + Result GetAppletPeakResourceLimitValues(pm::ResourceLimitValues *out); + Result GetProcessInfo(ncm::ProgramLocation *out_loc, cfg::OverrideStatus *out_status, os::ProcessId process_id); /* Information convenience API. */ diff --git a/libstratosphere/include/stratosphere/pm/pm_shell_api.hpp b/libstratosphere/include/stratosphere/pm/pm_shell_api.hpp index cbcd2043..6e215222 100644 --- a/libstratosphere/include/stratosphere/pm/pm_shell_api.hpp +++ b/libstratosphere/include/stratosphere/pm/pm_shell_api.hpp @@ -30,5 +30,6 @@ namespace ams::pm::shell { Result GetApplicationProcessIdForShell(os::ProcessId *out); Result BoostSystemMemoryResourceLimit(u64 size); Result EnableApplicationExtraThread(); + Result EnableSystemExtraThread(); } diff --git a/libstratosphere/include/stratosphere/pm/pm_types.hpp b/libstratosphere/include/stratosphere/pm/pm_types.hpp index d61f9630..9266302f 100644 --- a/libstratosphere/include/stratosphere/pm/pm_types.hpp +++ b/libstratosphere/include/stratosphere/pm/pm_types.hpp @@ -52,6 +52,14 @@ namespace ams::pm { LaunchFlagsDeprecated_SignalOnStart = (1 << 5), }; + struct ResourceLimitValues { + u64 physical_memory; + u32 thread_count; + u32 event_count; + u32 transfer_memory_count; + u32 session_count; + }; + constexpr inline u32 LaunchFlagsMask = (1 << 6) - 1; enum class ProcessEvent : u32 { diff --git a/libstratosphere/source/pm/pm_dmnt_api.cpp b/libstratosphere/source/pm/pm_dmnt_api.cpp index 2f1b2935..e72ed069 100644 --- a/libstratosphere/source/pm/pm_dmnt_api.cpp +++ b/libstratosphere/source/pm/pm_dmnt_api.cpp @@ -25,6 +25,12 @@ namespace ams::pm::dmnt { return pmdmntStartProcess(static_cast(process_id)); } + Result GetProgramId(ncm::ProgramId *out_program_id, os::ProcessId process_id) { + /* TODO: return return pmdmntGetProgramId(reinterpret_cast(out_program_id), static_cast(process_id)); */ + AMS_UNUSED(out_program_id, process_id); + AMS_ABORT("TODO"); + } + Result GetProcessId(os::ProcessId *out_process_id, const ncm::ProgramId program_id) { return pmdmntGetProcessId(reinterpret_cast(out_process_id), static_cast(program_id)); } diff --git a/libstratosphere/source/pm/pm_info_api.cpp b/libstratosphere/source/pm/pm_info_api.cpp index 978defda..44c039eb 100644 --- a/libstratosphere/source/pm/pm_info_api.cpp +++ b/libstratosphere/source/pm/pm_info_api.cpp @@ -28,6 +28,18 @@ namespace ams::pm::info { return pminfoAtmosphereGetProcessId(reinterpret_cast(out_process_id), static_cast(program_id)); } + Result GetAppletCurrentResourceLimitValues(pm::ResourceLimitValues *out) { + /* TODO: return pminfoGetAppletCurrentResourceLimitValues(reinterpret_cast(out)); */ + AMS_UNUSED(out); + AMS_ABORT("TODO"); + } + + Result GetAppletPeakResourceLimitValues(pm::ResourceLimitValues *out) { + /* TODO: return pminfoGetAppletPeakResourceLimitValues(reinterpret_cast(out)); */ + AMS_UNUSED(out); + AMS_ABORT("TODO"); + } + Result GetProcessInfo(ncm::ProgramLocation *out_loc, cfg::OverrideStatus *out_status, os::ProcessId process_id) { *out_loc = {}; *out_status = {}; diff --git a/libstratosphere/source/pm/pm_shell_api.cpp b/libstratosphere/source/pm/pm_shell_api.cpp index 7dc4f2d9..dbee04e9 100644 --- a/libstratosphere/source/pm/pm_shell_api.cpp +++ b/libstratosphere/source/pm/pm_shell_api.cpp @@ -55,4 +55,9 @@ namespace ams::pm::shell { } #endif + Result EnableSystemExtraThread() { + /* TODO: return ::pmshellEnableSystemExtraThread(); */ + AMS_ABORT("TODO"); + } + }