diff options
| author | 2022-12-06 11:26:38 -0500 | |
|---|---|---|
| committer | 2022-12-06 11:26:38 -0500 | |
| commit | a86af1b776fadb4d5804ef2c1fb74e0c197cc51d (patch) | |
| tree | 86973b1879caef999ac9f1d413b48538e2644542 | |
| parent | Merge pull request #9395 from abouvier/cmake-find (diff) | |
| parent | kernel/k_shared_memory: Ensure device_memory is always initialized (diff) | |
| download | yuzu-a86af1b776fadb4d5804ef2c1fb74e0c197cc51d.tar.gz yuzu-a86af1b776fadb4d5804ef2c1fb74e0c197cc51d.tar.xz yuzu-a86af1b776fadb4d5804ef2c1fb74e0c197cc51d.zip | |
Merge pull request #9386 from lioncash/init
kernel: Ensure relevant class members are always initialized on construction
| -rw-r--r-- | src/core/hle/kernel/k_memory_block.h | 33 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_memory_block_manager.h | 9 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_shared_memory.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_thread.h | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/physical_core.h | 2 |
6 files changed, 25 insertions, 27 deletions
diff --git a/src/core/hle/kernel/k_memory_block.h b/src/core/hle/kernel/k_memory_block.h index 3b6e7baff..87ca65592 100644 --- a/src/core/hle/kernel/k_memory_block.h +++ b/src/core/hle/kernel/k_memory_block.h | |||
| @@ -280,18 +280,19 @@ struct KMemoryInfo { | |||
| 280 | 280 | ||
| 281 | class KMemoryBlock : public Common::IntrusiveRedBlackTreeBaseNode<KMemoryBlock> { | 281 | class KMemoryBlock : public Common::IntrusiveRedBlackTreeBaseNode<KMemoryBlock> { |
| 282 | private: | 282 | private: |
| 283 | u16 m_device_disable_merge_left_count; | 283 | u16 m_device_disable_merge_left_count{}; |
| 284 | u16 m_device_disable_merge_right_count; | 284 | u16 m_device_disable_merge_right_count{}; |
| 285 | VAddr m_address; | 285 | VAddr m_address{}; |
| 286 | size_t m_num_pages; | 286 | size_t m_num_pages{}; |
| 287 | KMemoryState m_memory_state; | 287 | KMemoryState m_memory_state{KMemoryState::None}; |
| 288 | u16 m_ipc_lock_count; | 288 | u16 m_ipc_lock_count{}; |
| 289 | u16 m_device_use_count; | 289 | u16 m_device_use_count{}; |
| 290 | u16 m_ipc_disable_merge_count; | 290 | u16 m_ipc_disable_merge_count{}; |
| 291 | KMemoryPermission m_permission; | 291 | KMemoryPermission m_permission{KMemoryPermission::None}; |
| 292 | KMemoryPermission m_original_permission; | 292 | KMemoryPermission m_original_permission{KMemoryPermission::None}; |
| 293 | KMemoryAttribute m_attribute; | 293 | KMemoryAttribute m_attribute{KMemoryAttribute::None}; |
| 294 | KMemoryBlockDisableMergeAttribute m_disable_merge_attribute; | 294 | KMemoryBlockDisableMergeAttribute m_disable_merge_attribute{ |
| 295 | KMemoryBlockDisableMergeAttribute::None}; | ||
| 295 | 296 | ||
| 296 | public: | 297 | public: |
| 297 | static constexpr int Compare(const KMemoryBlock& lhs, const KMemoryBlock& rhs) { | 298 | static constexpr int Compare(const KMemoryBlock& lhs, const KMemoryBlock& rhs) { |
| @@ -367,12 +368,8 @@ public: | |||
| 367 | 368 | ||
| 368 | constexpr KMemoryBlock(VAddr addr, size_t np, KMemoryState ms, KMemoryPermission p, | 369 | constexpr KMemoryBlock(VAddr addr, size_t np, KMemoryState ms, KMemoryPermission p, |
| 369 | KMemoryAttribute attr) | 370 | KMemoryAttribute attr) |
| 370 | : Common::IntrusiveRedBlackTreeBaseNode<KMemoryBlock>(), | 371 | : Common::IntrusiveRedBlackTreeBaseNode<KMemoryBlock>(), m_address(addr), m_num_pages(np), |
| 371 | m_device_disable_merge_left_count(), m_device_disable_merge_right_count(), | 372 | m_memory_state(ms), m_permission(p), m_attribute(attr) {} |
| 372 | m_address(addr), m_num_pages(np), m_memory_state(ms), m_ipc_lock_count(0), | ||
| 373 | m_device_use_count(0), m_ipc_disable_merge_count(), m_permission(p), | ||
| 374 | m_original_permission(KMemoryPermission::None), m_attribute(attr), | ||
| 375 | m_disable_merge_attribute() {} | ||
| 376 | 373 | ||
| 377 | constexpr void Initialize(VAddr addr, size_t np, KMemoryState ms, KMemoryPermission p, | 374 | constexpr void Initialize(VAddr addr, size_t np, KMemoryState ms, KMemoryPermission p, |
| 378 | KMemoryAttribute attr) { | 375 | KMemoryAttribute attr) { |
diff --git a/src/core/hle/kernel/k_memory_block_manager.h b/src/core/hle/kernel/k_memory_block_manager.h index 9b5873883..d382722a6 100644 --- a/src/core/hle/kernel/k_memory_block_manager.h +++ b/src/core/hle/kernel/k_memory_block_manager.h | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | #pragma once | 4 | #pragma once |
| 5 | 5 | ||
| 6 | #include <array> | ||
| 6 | #include <functional> | 7 | #include <functional> |
| 7 | 8 | ||
| 8 | #include "common/common_funcs.h" | 9 | #include "common/common_funcs.h" |
| @@ -17,9 +18,9 @@ public: | |||
| 17 | static constexpr size_t MaxBlocks = 2; | 18 | static constexpr size_t MaxBlocks = 2; |
| 18 | 19 | ||
| 19 | private: | 20 | private: |
| 20 | KMemoryBlock* m_blocks[MaxBlocks]; | 21 | std::array<KMemoryBlock*, MaxBlocks> m_blocks{}; |
| 21 | size_t m_index; | 22 | size_t m_index{MaxBlocks}; |
| 22 | KMemoryBlockSlabManager* m_slab_manager; | 23 | KMemoryBlockSlabManager* m_slab_manager{}; |
| 23 | 24 | ||
| 24 | private: | 25 | private: |
| 25 | Result Initialize(size_t num_blocks) { | 26 | Result Initialize(size_t num_blocks) { |
| @@ -41,7 +42,7 @@ private: | |||
| 41 | public: | 42 | public: |
| 42 | KMemoryBlockManagerUpdateAllocator(Result* out_result, KMemoryBlockSlabManager* sm, | 43 | KMemoryBlockManagerUpdateAllocator(Result* out_result, KMemoryBlockSlabManager* sm, |
| 43 | size_t num_blocks = MaxBlocks) | 44 | size_t num_blocks = MaxBlocks) |
| 44 | : m_blocks(), m_index(MaxBlocks), m_slab_manager(sm) { | 45 | : m_slab_manager(sm) { |
| 45 | *out_result = this->Initialize(num_blocks); | 46 | *out_result = this->Initialize(num_blocks); |
| 46 | } | 47 | } |
| 47 | 48 | ||
diff --git a/src/core/hle/kernel/k_shared_memory.h b/src/core/hle/kernel/k_shared_memory.h index 5620c3660..a96c55a3e 100644 --- a/src/core/hle/kernel/k_shared_memory.h +++ b/src/core/hle/kernel/k_shared_memory.h | |||
| @@ -74,7 +74,7 @@ public: | |||
| 74 | static void PostDestroy([[maybe_unused]] uintptr_t arg) {} | 74 | static void PostDestroy([[maybe_unused]] uintptr_t arg) {} |
| 75 | 75 | ||
| 76 | private: | 76 | private: |
| 77 | Core::DeviceMemory* device_memory; | 77 | Core::DeviceMemory* device_memory{}; |
| 78 | KProcess* owner_process{}; | 78 | KProcess* owner_process{}; |
| 79 | KPageGroup page_list; | 79 | KPageGroup page_list; |
| 80 | Svc::MemoryPermission owner_permission{}; | 80 | Svc::MemoryPermission owner_permission{}; |
diff --git a/src/core/hle/kernel/k_thread.h b/src/core/hle/kernel/k_thread.h index f38c92bff..dc52b4ed3 100644 --- a/src/core/hle/kernel/k_thread.h +++ b/src/core/hle/kernel/k_thread.h | |||
| @@ -784,8 +784,8 @@ private: | |||
| 784 | std::vector<KSynchronizationObject*> wait_objects_for_debugging; | 784 | std::vector<KSynchronizationObject*> wait_objects_for_debugging; |
| 785 | VAddr mutex_wait_address_for_debugging{}; | 785 | VAddr mutex_wait_address_for_debugging{}; |
| 786 | ThreadWaitReasonForDebugging wait_reason_for_debugging{}; | 786 | ThreadWaitReasonForDebugging wait_reason_for_debugging{}; |
| 787 | uintptr_t argument; | 787 | uintptr_t argument{}; |
| 788 | VAddr stack_top; | 788 | VAddr stack_top{}; |
| 789 | 789 | ||
| 790 | public: | 790 | public: |
| 791 | using ConditionVariableThreadTreeType = ConditionVariableThreadTree; | 791 | using ConditionVariableThreadTreeType = ConditionVariableThreadTree; |
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index b77723503..288f97df5 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -891,7 +891,7 @@ struct KernelCore::Impl { | |||
| 891 | Common::ThreadWorker service_threads_manager; | 891 | Common::ThreadWorker service_threads_manager; |
| 892 | Common::Barrier service_thread_barrier; | 892 | Common::Barrier service_thread_barrier; |
| 893 | 893 | ||
| 894 | std::array<KThread*, Core::Hardware::NUM_CPU_CORES> shutdown_threads; | 894 | std::array<KThread*, Core::Hardware::NUM_CPU_CORES> shutdown_threads{}; |
| 895 | std::array<std::unique_ptr<Kernel::KScheduler>, Core::Hardware::NUM_CPU_CORES> schedulers{}; | 895 | std::array<std::unique_ptr<Kernel::KScheduler>, Core::Hardware::NUM_CPU_CORES> schedulers{}; |
| 896 | 896 | ||
| 897 | bool is_multicore{}; | 897 | bool is_multicore{}; |
diff --git a/src/core/hle/kernel/physical_core.h b/src/core/hle/kernel/physical_core.h index 2fc8d4be2..fb2ba4c6b 100644 --- a/src/core/hle/kernel/physical_core.h +++ b/src/core/hle/kernel/physical_core.h | |||
| @@ -85,7 +85,7 @@ private: | |||
| 85 | std::mutex guard; | 85 | std::mutex guard; |
| 86 | std::condition_variable on_interrupt; | 86 | std::condition_variable on_interrupt; |
| 87 | std::unique_ptr<Core::ARM_Interface> arm_interface; | 87 | std::unique_ptr<Core::ARM_Interface> arm_interface; |
| 88 | bool is_interrupted; | 88 | bool is_interrupted{}; |
| 89 | }; | 89 | }; |
| 90 | 90 | ||
| 91 | } // namespace Kernel | 91 | } // namespace Kernel |