Fix hsa_amd_vmem_get_access to accept offset pointers
Modify hsa_amd_vmem_get_access to handle pointers that are within VA range of an existing memory mapping Change-Id: I9f806ec39f6e9a33da8d86dd65d9a472438fa8ed
This commit is contained in:
@@ -2771,13 +2771,20 @@ hsa_status_t Runtime::VMemorySetAccess(void* va, size_t size,
|
||||
hsa_status_t Runtime::VMemoryGetAccess(const void* va, hsa_access_permission_t* perms,
|
||||
hsa_agent_t agent_handle) {
|
||||
*perms = HSA_ACCESS_PERMISSION_NONE;
|
||||
bool mappedHandleFound = false;
|
||||
|
||||
ScopedAcquire<KernelSharedMutex> lock(&memory_lock_);
|
||||
|
||||
auto mappedHandleIt = mapped_handle_map_.find(va);
|
||||
if (mappedHandleIt == mapped_handle_map_.end()) {
|
||||
return HSA_STATUS_ERROR_INVALID_ALLOCATION;
|
||||
auto mappedHandleIt = mapped_handle_map_.upper_bound(va);
|
||||
if (mappedHandleIt != mapped_handle_map_.begin()) {
|
||||
mappedHandleIt--;
|
||||
if ((mappedHandleIt->first <= va) &&
|
||||
reinterpret_cast<const uint8_t*>(va) <=
|
||||
(reinterpret_cast<const uint8_t*>(mappedHandleIt->first) + mappedHandleIt->second.size)) {
|
||||
mappedHandleFound = true;
|
||||
}
|
||||
}
|
||||
if (!mappedHandleFound) return HSA_STATUS_ERROR_INVALID_ALLOCATION;
|
||||
|
||||
Agent* agent = Agent::Convert(agent_handle);
|
||||
if (agent == NULL || !agent->IsValid() || agent->device_type() != core::Agent::kAmdGpuDevice)
|
||||
|
||||
Reference in New Issue
Block a user