Make queue memory allocation non-paged

Non-paged allocation for queue memory necessary for binding wptr to
GART. Required to support usermode queue oversubscription with MES for
GFX11.

Adds AllocateNonPaged entry to MemoryRegion::AllocateEnum for clarity;
aliases AllocateIPC.

Signed-off-by: Graham Sider <Graham.Sider@amd.com>
Change-Id: I1a97a1820da26cf2433d9c237b2e6d2b0b8628b4


[ROCm/ROCR-Runtime commit: 061aa04147]
Cette révision appartient à :
Graham Sider
2022-06-08 13:12:53 -04:00
révisé par David Yat Sin
Parent c4ae784f4b
révision ff52cbb201
4 fichiers modifiés avec 6 ajouts et 3 suppressions
+2 -2
Voir le fichier
@@ -141,10 +141,10 @@ class Shared final : private BaseShared {
template <typename T> class Shared<T, PageAllocator<T>> final : private BaseShared {
public:
Shared() {
Shared(int flags = 0) {
assert(allocate_ != nullptr && free_ != nullptr && "Shared object allocator is not set");
shared_object_ = PageAllocator<T>::alloc();
shared_object_ = PageAllocator<T>::alloc(flags);
}
~Shared() {
+1
Voir le fichier
@@ -89,6 +89,7 @@ class MemoryRegion : public Checked<0x9C961F19EE175BB3> {
AllocateDoubleMap = (1 << 2), // Map twice VA allocation to backing store
AllocateDirect = (1 << 3), // Bypass fragment cache.
AllocateIPC = (1 << 4), // System memory that can be IPC-shared
AllocateNonPaged = (1 << 4), // Non-paged system memory (AllocateIPC alias)
AllocatePCIeRW = (1 << 5), // Enforce pseudo fine grain/RW memory
};
+2
Voir le fichier
@@ -49,6 +49,7 @@
#include "core/common/shared.h"
#include "core/inc/checked.h"
#include "core/inc/memory_region.h"
#include "core/util/utils.h"
#include "inc/amd_hsa_queue.h"
@@ -126,6 +127,7 @@ struct SharedQueue {
class LocalQueue {
public:
LocalQueue() : local_queue_(MemoryRegion::AllocateNonPaged) {}
SharedQueue* queue() const { return local_queue_.shared_object(); }
private:
+1 -1
Voir le fichier
@@ -185,7 +185,7 @@ hsa_status_t MemoryRegion::AllocateImpl(size_t& size, AllocateFlags alloc_flags,
(alloc_flags & AllocateExecutable ? 1 : 0);
kmt_alloc_flags.ui32.AQLQueueMemory =
(alloc_flags & AllocateDoubleMap ? 1 : 0);
if (IsSystem() && (alloc_flags & AllocateIPC))
if (IsSystem() && (alloc_flags & AllocateNonPaged))
kmt_alloc_flags.ui32.NonPaged = 1;
// Allocate pseudo fine grain memory