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:
işlemeyi yapan:
GitHub
ebeveyn
465633d707
işleme
0c1f87a7f6
@@ -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
|
||||
|
||||
@@ -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_
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Yeni konuda referans
Bir kullanıcı engelle