// HSA runtime supports only 5 signals per barrier packet
#define NumSignalsPerBarrier 5
-// This define is copied from hsa runtime (libhsakmt/src/libhsakmt.h)
-// This is the mapping function used by runtime for mapping
-// queueID to dooorbell address
-#define VOID_PTR_ADD32(ptr,n) (void*)((uint32_t*)(ptr) + n)/*ptr + offset*/
-
class HSADevice;
class HWScheduler;
// Map queue ID to doorbell.
// We are only using offset to pio base address as doorbell
// We use the same mapping function used by hsa runtime to do this mapping
- Addr db_offset = (Addr)(VOID_PTR_ADD32(0, queue_id));
+ //
+ // Originally
+ // #define VOID_PTR_ADD32(ptr,n) \
+ // (void*)((uint32_t*)(ptr) + n)/*ptr + offset*/
+ // (Addr)VOID_PTR_ADD32(0, queue_id)
+ Addr db_offset = queue_id;
if (dbMap.find(db_offset) != dbMap.end()) {
panic("Creating an already existing queue (queueID %d)", queue_id);
}
void
HWScheduler::unregisterQueue(uint64_t queue_id)
{
- Addr db_offset = (Addr)(VOID_PTR_ADD32(0, queue_id));
+ // Pointer arithmetic on a null pointer is undefined behavior. Clang
+ // compilers therefore complain if the following reads:
+ // `(Addr)(VOID_PRT_ADD32(0, queue_id))`
+ //
+ // Originally
+ // #define VOID_PTR_ADD32(ptr,n) \
+ // (void*)((uint32_t*)(ptr) + n)/*ptr + offset*/
+ // (Addr)VOID_PTR_ADD32(0, queue_id)
+ Addr db_offset = queue_id;
auto dbmap_iter = dbMap.find(db_offset);
if (dbmap_iter == dbMap.end()) {
panic("Destroying a non-existing queue (db_offset %x)",