From 5bce8f62ac74bccc0811a6c51df9258620e175e5 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Thu, 18 Jul 2019 18:15:53 -0400 Subject: VM_Manager: Align allocated memory to 256bytes This commit ensures that all backing memory allocated for the Guest CPU is aligned to 256 bytes. This due to how gpu memory works and the heavy constraints it has in the alignment of physical memory. --- src/core/hle/kernel/shared_memory.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/core/hle/kernel/shared_memory.cpp') diff --git a/src/core/hle/kernel/shared_memory.cpp b/src/core/hle/kernel/shared_memory.cpp index f15c5ee362..45a9e19422 100644 --- a/src/core/hle/kernel/shared_memory.cpp +++ b/src/core/hle/kernel/shared_memory.cpp @@ -28,7 +28,7 @@ SharedPtr SharedMemory::Create(KernelCore& kernel, Process* owner_ shared_memory->other_permissions = other_permissions; if (address == 0) { - shared_memory->backing_block = std::make_shared>(size); + shared_memory->backing_block = std::make_shared(size); shared_memory->backing_block_offset = 0; // Refresh the address mappings for the current process. @@ -59,7 +59,7 @@ SharedPtr SharedMemory::Create(KernelCore& kernel, Process* owner_ } SharedPtr SharedMemory::CreateForApplet( - KernelCore& kernel, std::shared_ptr> heap_block, std::size_t offset, u64 size, + KernelCore& kernel, std::shared_ptr heap_block, std::size_t offset, u64 size, MemoryPermission permissions, MemoryPermission other_permissions, std::string name) { SharedPtr shared_memory(new SharedMemory(kernel)); -- cgit v1.2.3 From 5581a0d296e8aff00ed6bd21072e1605d992239d Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Fri, 19 Jul 2019 11:14:47 -0400 Subject: Kernel: Address Feedback --- src/common/alignment.h | 5 ++--- src/core/hle/kernel/physical_memory.h | 8 +++++++- src/core/hle/kernel/shared_memory.cpp | 4 ++-- 3 files changed, 11 insertions(+), 6 deletions(-) (limited to 'src/core/hle/kernel/shared_memory.cpp') diff --git a/src/common/alignment.h b/src/common/alignment.h index da2e61e104..0ce218c607 100644 --- a/src/common/alignment.h +++ b/src/common/alignment.h @@ -52,7 +52,6 @@ public: using const_reference = const T&; public: - pointer address(reference r) { return std::addressof(r); } @@ -62,11 +61,11 @@ public: } pointer allocate(size_type n) { - return static_cast(::operator new(n, std::align_val_t{Align})); + return static_cast(::operator new (n, std::align_val_t{Align})); } void deallocate(pointer p, size_type) { - ::operator delete(p, std::align_val_t{Align}); + ::operator delete (p, std::align_val_t{Align}); } void construct(pointer p, const value_type& wert) { diff --git a/src/core/hle/kernel/physical_memory.h b/src/core/hle/kernel/physical_memory.h index dd49c75a27..0905653102 100644 --- a/src/core/hle/kernel/physical_memory.h +++ b/src/core/hle/kernel/physical_memory.h @@ -8,6 +8,12 @@ namespace Kernel { +// This encapsulation serves 2 purposes: +// - First, to encapsulate host physical memory under a single type and set an +// standard for managing it. +// - Second to ensure all host backing memory used is aligned to 256 bytes due +// to strict alignment restrictions on GPU memory. + using PhysicalMemory = std::vector>; -} +} // namespace Kernel diff --git a/src/core/hle/kernel/shared_memory.cpp b/src/core/hle/kernel/shared_memory.cpp index 45a9e19422..a815c4eea3 100644 --- a/src/core/hle/kernel/shared_memory.cpp +++ b/src/core/hle/kernel/shared_memory.cpp @@ -59,8 +59,8 @@ SharedPtr SharedMemory::Create(KernelCore& kernel, Process* owner_ } SharedPtr SharedMemory::CreateForApplet( - KernelCore& kernel, std::shared_ptr heap_block, std::size_t offset, u64 size, - MemoryPermission permissions, MemoryPermission other_permissions, std::string name) { + KernelCore& kernel, std::shared_ptr heap_block, std::size_t offset, + u64 size, MemoryPermission permissions, MemoryPermission other_permissions, std::string name) { SharedPtr shared_memory(new SharedMemory(kernel)); shared_memory->owner_process = nullptr; -- cgit v1.2.3