SWDEV-558848 - vmm api support for rocr on windows (#1761)

* SWDEV-558848 - vmm api support for rocr on windows

* Fixes to VMM handle Map/Unmap Set/Get Access

* Fix GetShareableHandle to use pointer for shareable handle

* Update os specific map/unmap memory calls

* clang format update

* Minor syntax fixes from code review

Co-authored-by: Yiannis Papadopoulos <102817138+ypapadop-amd@users.noreply.github.com>

---------

Co-authored-by: Rahul Manocha <rmanocha@amd.com>
Co-authored-by: Yiannis Papadopoulos <102817138+ypapadop-amd@users.noreply.github.com>
Bu işleme şunda yer alıyor:
Rahul Manocha
2025-12-10 08:39:51 -08:00
işlemeyi yapan: GitHub
ebeveyn 465633d707
işleme 0c1f87a7f6
15 değiştirilmiş dosya ile 121 ekleme ve 52 silme
+10
Dosyayı Görüntüle
@@ -849,6 +849,16 @@ size_t PageSize() {
return g_page_size_;
}
bool UnmapMemory(void* va, size_t size) { return ::munmap(va, size) == 0; }
bool MapMemory(void* va, size_t size, MemProt perms, int fd, uint64_t cpu_addr) {
void* mapped_ptr =
mmap(va, size, MemProtToOsProt(perms), MAP_SHARED | MAP_FIXED, fd, cpu_addr);
if (mapped_ptr != va)
return false;
return true;
}
void* ReserveMemory(void* start, size_t size, size_t alignment, MemProt prot) {
size = AlignUp(size, PageSize());
// check for invalid input size
+16 -2
Dosyayı Görüntüle
@@ -50,9 +50,10 @@
#include <sys/mman.h>
#endif
#include "os.h"
namespace rocr {
#ifdef __linux__
#if defined(__linux__)
/// @brief Converts @ref hsa_access_permission_t to mmap memory protection
/// flags.
__forceinline int PermissionsToMmapFlags(hsa_access_permission_t perms) {
@@ -69,7 +70,20 @@ __forceinline int PermissionsToMmapFlags(hsa_access_permission_t perms) {
}
}
#endif
__forceinline rocr::os::MemProt PermissionsToMemProt(hsa_access_permission_t perms) {
switch (perms) {
case HSA_ACCESS_PERMISSION_RO:
return rocr::os::MEM_PROT_READ;
case HSA_ACCESS_PERMISSION_WO:
return rocr::os::MEM_PROT_RW;
case HSA_ACCESS_PERMISSION_RW:
return rocr::os::MEM_PROT_RW;
case HSA_ACCESS_PERMISSION_NONE:
return rocr::os::MEM_PROT_NONE;
default:
return rocr::os::MEM_PROT_NONE;
}
}
} // namespace rocr
#endif // HSA_RUNTIME_CORE_UTIL_MEMORY_H_
+3
Dosyayı Görüntüle
@@ -351,6 +351,9 @@ bool ReleaseMemory(void* addr, size_t size);
bool CommitMemory(void* addr, size_t size, MemProt prot = MEM_PROT_NONE);
/// Uncommit a chunk of memory previously committed with commitMemory.
bool UncommitMemory(void* addr, size_t size);
/// Changes the Protection of a region of committed pages in virtual address space
bool UnmapMemory(void* addr, size_t size);
bool MapMemory(void* addr, size_t size, MemProt prot, int fd, uint64_t cpu_addr);
uint64_t HostTotalPhysicalMemory();
+8
Dosyayı Görüntüle
@@ -459,6 +459,14 @@ uint64_t HostTotalPhysicalMemory() {
return totalPhys;
}
bool UnmapMemory(void* addr, size_t size) { return VirtualFree(addr, size, MEM_RELEASE) != 0; }
bool MapMemory(void* addr, size_t size, MemProt perms, int fd [[maybe_unused]],
uint64_t cpu_addr [[maybe_unused]]) {
DWORD OldProtect;
return VirtualProtect(addr, size, memProtToOsProt(perms), &OldProtect) != 0;
}
int Ffs(int i) {
int res = 0;
unsigned long index;