misc: Fix db_offset calculation
authorKyle Roarty <kyleroarty1716@gmail.com>
Thu, 13 Aug 2020 22:49:34 +0000 (17:49 -0500)
committerKyle Roarty <kyleroarty1716@gmail.com>
Sat, 29 Aug 2020 01:49:49 +0000 (01:49 +0000)
db_offset used to be calculated through pointer arithmetic. Pointer
arithmetic increments the address by the size of the data type the
pointer is pointing at. In the previous db_offset calculation, that
was a uint32_t, which means the input was multiplied by 4, which is
sizeof(uint32_t)

This patch multiplies the input value by sizeof(uint32_t) before
assigning it to db_offset.

Change-Id: I9042560303ae6b8b1054b98e9a16a9da27843bb2
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/32678
Reviewed-by: Matt Sinclair <mattdsinclair@gmail.com>
Reviewed-by: Alexandru Duțu <alexandru.dutu@amd.com>
Maintainer: Matt Sinclair <mattdsinclair@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/dev/hsa/hw_scheduler.cc

index 8523be9cce423afa248612e8def7b38462914514..f25839d3136a1167e310fcd31112f5c00d8647ae 100644 (file)
@@ -95,7 +95,7 @@ HWScheduler::registerNewQueue(uint64_t hostReadIndexPointer,
     // #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;
+    Addr db_offset = sizeof(uint32_t)*queue_id;
     if (dbMap.find(db_offset) != dbMap.end()) {
         panic("Creating an already existing queue (queueID %d)", queue_id);
     }
@@ -346,7 +346,7 @@ HWScheduler::unregisterQueue(uint64_t queue_id)
     // #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;
+    Addr db_offset = sizeof(uint32_t)*queue_id;
     auto dbmap_iter = dbMap.find(db_offset);
     if (dbmap_iter == dbMap.end()) {
         panic("Destroying a non-existing queue (db_offset %x)",