Skip to content

Commit 339e178

Browse files
committed
Address comments of @bing-ma.
Improve logic of asan_hsa_amd_ipc_memory_create based on observations.
1 parent 68487be commit 339e178

File tree

3 files changed

+15
-36
lines changed

3 files changed

+15
-36
lines changed

compiler-rt/lib/asan/asan_allocator.cpp

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,9 +1400,6 @@ DECLARE_REAL(hsa_status_t, hsa_amd_ipc_memory_detach, void *mapped_ptr)
14001400
DECLARE_REAL(hsa_status_t, hsa_amd_vmem_address_reserve_align, void** ptr,
14011401
size_t size, uint64_t address, uint64_t alignment, uint64_t flags)
14021402
DECLARE_REAL(hsa_status_t, hsa_amd_vmem_address_free, void* ptr, size_t size)
1403-
DECLARE_REAL(hsa_status_t, hsa_amd_pointer_info, const void* ptr,
1404-
hsa_amd_pointer_info_t* info, void* (*alloc)(size_t),
1405-
uint32_t* num_agents_accessible, hsa_agent_t** accessible)
14061403

14071404
namespace __asan {
14081405

@@ -1457,16 +1454,23 @@ static struct AP32<LocalAddressSpaceView> AP_;
14571454

14581455
hsa_status_t asan_hsa_amd_ipc_memory_create(void* ptr, size_t len,
14591456
hsa_amd_ipc_memory_t* handle) {
1460-
void *ptr_;
1457+
static_assert(AP_.kMetadataSize == 0, "Expression below requires this");
1458+
void* ptr_ = get_allocator().GetBlockBegin(ptr);
14611459
size_t len_ = get_allocator().GetActuallyAllocatedSize(ptr);
1462-
if (len_ && len_ != len) {
1463-
static_assert(AP_.kMetadataSize == 0, "Expression below requires this");
1464-
ptr_ = reinterpret_cast<void *>(reinterpret_cast<uptr>(ptr) - kPageSize_);
1465-
} else {
1466-
ptr_ = ptr;
1467-
len_ = len;
1460+
1461+
uptr p = reinterpret_cast<uptr>(ptr);
1462+
uptr p_ = reinterpret_cast<uptr>(ptr_);
1463+
1464+
if (p == p_)
1465+
return REAL(hsa_amd_ipc_memory_create)(ptr_, len_, handle);
1466+
1467+
if (p == p_ + kPageSize_) {
1468+
AsanChunk* m = instance.GetAsanChunkByAddr(p_);
1469+
if (m && len == m->UsedSize())
1470+
return REAL(hsa_amd_ipc_memory_create)(ptr_, len_, handle);
1471+
return REAL(hsa_amd_ipc_memory_create)(ptr_, len, handle);
14681472
}
1469-
return REAL(hsa_amd_ipc_memory_create)(ptr_, len_, handle);
1473+
return REAL(hsa_amd_ipc_memory_create)(ptr, len, handle);
14701474
}
14711475

14721476
hsa_status_t asan_hsa_amd_ipc_memory_attach(const hsa_amd_ipc_memory_t *handle,
@@ -1543,15 +1547,5 @@ hsa_status_t asan_hsa_amd_vmem_address_free(void* ptr, size_t size,
15431547
}
15441548
return REAL(hsa_amd_vmem_address_free)(ptr, size);
15451549
}
1546-
1547-
hsa_status_t asan_hsa_amd_pointer_info(const void* ptr,
1548-
hsa_amd_pointer_info_t* info,
1549-
void* (*alloc)(size_t),
1550-
uint32_t* num_agents_accessible,
1551-
hsa_agent_t** accessible) {
1552-
void* p = get_allocator().GetBlockBegin(ptr);
1553-
return REAL(hsa_amd_pointer_info)(p ? p : ptr, info, alloc,
1554-
num_agents_accessible, accessible);
1555-
}
15561550
} // namespace __asan
15571551
#endif

compiler-rt/lib/asan/asan_allocator.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -341,11 +341,6 @@ hsa_status_t asan_hsa_amd_vmem_address_reserve_align(void** ptr, size_t size,
341341
BufferedStackTrace* stack);
342342
hsa_status_t asan_hsa_amd_vmem_address_free(void* ptr, size_t size,
343343
BufferedStackTrace* stack);
344-
hsa_status_t asan_hsa_amd_pointer_info(const void* ptr,
345-
hsa_amd_pointer_info_t* info,
346-
void* (*alloc)(size_t),
347-
uint32_t* num_agents_accessible,
348-
hsa_agent_t** accessible);
349344
} // namespace __asan
350345
#endif
351346

compiler-rt/lib/asan/asan_interceptors.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -948,15 +948,6 @@ INTERCEPTOR(hsa_status_t, hsa_amd_vmem_address_free, void* ptr, size_t size) {
948948
return asan_hsa_amd_vmem_address_free(ptr, size, &stack);
949949
}
950950

951-
INTERCEPTOR(hsa_status_t, hsa_amd_pointer_info, const void* ptr,
952-
hsa_amd_pointer_info_t* info, void* (*alloc)(size_t),
953-
uint32_t* num_agents_accessible, hsa_agent_t** accessible) {
954-
AsanInitFromRtl();
955-
ENSURE_HSA_INITED();
956-
return asan_hsa_amd_pointer_info(ptr, info, alloc, num_agents_accessible,
957-
accessible);
958-
}
959-
960951
void InitializeAmdgpuInterceptors() {
961952
ASAN_INTERCEPT_FUNC(hsa_memory_copy);
962953
ASAN_INTERCEPT_FUNC(hsa_amd_memory_pool_allocate);
@@ -971,7 +962,6 @@ void InitializeAmdgpuInterceptors() {
971962
ASAN_INTERCEPT_FUNC(hsa_amd_ipc_memory_detach);
972963
ASAN_INTERCEPT_FUNC(hsa_amd_vmem_address_reserve_align);
973964
ASAN_INTERCEPT_FUNC(hsa_amd_vmem_address_free);
974-
ASAN_INTERCEPT_FUNC(hsa_amd_pointer_info);
975965
}
976966

977967
void ENSURE_HSA_INITED() {

0 commit comments

Comments
 (0)