wsl/hsakmt: implement ipc signal
IPC Signal only support sys ram backend and CPU&GPU both accessible, IPC Memory only support vram backend and only GPU accessible. Reviewed-by: Flora Cui <flora.cui@amd.com> Signed-off-by: tiancyin <tianci.yin@amd.com>
This commit is contained in:
+12
-1
@@ -110,6 +110,7 @@ public:
|
||||
uint64_t PrivateApertureSize() { return device_info_.private_aperture_size; }
|
||||
uint64_t SharedApertureBase() { return device_info_.shared_aperture_base; }
|
||||
uint64_t SharedApertureSize() { return device_info_.shared_aperture_size; }
|
||||
uint64_t SystemHeapSize() { return system_heap_space_size_; }
|
||||
uint32_t LdsSize() { return device_info_.lds_size; }
|
||||
uint64_t GPUCounterFrequency() { return device_info_.gpu_counter_frequency; }
|
||||
uint32_t GetSwsQueueSize(void) const { return device_info_.user_queue_size; }
|
||||
@@ -184,10 +185,18 @@ public:
|
||||
|
||||
const thunk_proxy::DeviceInfo& DeviceInfo() const { return device_info_; }
|
||||
|
||||
ErrorCode ReserveIPCSysMem(gpusize size,
|
||||
gpusize *out_gpu_virtual_addr,
|
||||
gpusize alignment,
|
||||
int &memfd,
|
||||
bool lock=false);
|
||||
|
||||
ErrorCode FreeIPCSysMem(gpusize gpu_addr, gpusize size, int &memfd);
|
||||
|
||||
ErrorCode ReserveGpuVirtualAddress(thunk_proxy::AllocDomain domain,
|
||||
gpusize hit_base_addr,
|
||||
gpusize size,
|
||||
gpusize *out_gpu_virtual_addr,
|
||||
gpusize *out_gpu_virtual_addr,
|
||||
gpusize alignment,
|
||||
bool lock=false);
|
||||
|
||||
@@ -219,6 +228,8 @@ private:
|
||||
bool InitHandleApertureSpace(void);
|
||||
bool CommitSystemHeapSpace(void* addr, int64_t size, bool lock=false);
|
||||
bool DecommitSystemHeapSpace(void* addr, int64_t size);
|
||||
bool CommitSystemHeapSpaceIPC(void* addr, int64_t size, int &fd, bool lock=false);
|
||||
bool DecommitSystemHeapSpaceIPC(void* addr, int64_t size, int &memfd);
|
||||
bool FreeLocalHeapSpace(void);
|
||||
void InitVaMgr();
|
||||
void InitHandleApertureMgr();
|
||||
|
||||
+8
-3
@@ -63,7 +63,8 @@ union GpuMemoryCreateFlags {
|
||||
uint64_t locked : 1; // lock virtual address space into RAM, preventing that memory from being paged to the swap area
|
||||
uint64_t physical_contiguous : 1; // contiguous physical pages
|
||||
uint64_t imported_vram_alloc_va : 1; // import buffer form dmabuf fd and allocate valid va (not from handle aperture)
|
||||
uint64_t unused : 58;
|
||||
uint64_t imported_sys_memfd : 1; // allocate system memory for IPC signal
|
||||
uint64_t unused : 57;
|
||||
};
|
||||
uint64_t reserved;
|
||||
};
|
||||
@@ -78,7 +79,8 @@ union GpuMemoryDescFlags {
|
||||
uint32_t is_queue_referenced : 1;
|
||||
uint32_t is_physical_contiguous : 1;
|
||||
uint32_t is_imported_vram_alloc_va : 1; // 0 - va from handle aperture; 1 - va from local heap;
|
||||
uint32_t unused : 24;
|
||||
uint32_t is_imported_sys_memfd : 1; // 0 - ignored; 1 - va from system heap
|
||||
uint32_t unused : 23;
|
||||
};
|
||||
|
||||
uint32_t reserved;
|
||||
@@ -103,7 +105,7 @@ struct GpuMemoryCreateInfo {
|
||||
gpusize alignment;
|
||||
int mem_flags;
|
||||
int engine_flag;
|
||||
int dmabuf_fd; // Import from dmabuf
|
||||
int dmabuf_fd; // Import from dmabuf
|
||||
|
||||
void *user_ptr;
|
||||
gpusize va_hint;
|
||||
@@ -162,6 +164,7 @@ public:
|
||||
inline bool IsLocal() const { return desc_.domain == thunk_proxy::kLocal; }
|
||||
inline bool IsUserMemory() const { return desc_.domain == thunk_proxy::kUserMemory; }
|
||||
inline bool IsSystem() const { return desc_.domain == thunk_proxy::kSystem; }
|
||||
inline bool IsSysMemFd() const { return desc_.flags.is_imported_sys_memfd; }
|
||||
inline bool IsUserQueue() const { return desc_.domain == thunk_proxy::kUserQueue; }
|
||||
inline bool IsPhysicalOnly() const { return desc_.flags.is_physical_only; }
|
||||
inline bool IsPhysicalContiguous() const { return desc_.flags.is_physical_contiguous; }
|
||||
@@ -221,6 +224,8 @@ private:
|
||||
|
||||
WinResourceHandle resource_; // Handle to a resource object that wraps the allocation. Used for shared resources
|
||||
|
||||
int mem_fd_; // IPC sigal's sys mem fd
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(GpuMemory);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user