summaryrefslogtreecommitdiff
path: root/dev-libs/rocr-runtime/files/rocr-runtime-2.8.0-fix_doorbell_map.patch
blob: aef3d297034e3be829aa027c5b6e04883016a6e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
https://github.com/RadeonOpenCompute/ROCR-Runtime/pull/71

From d2a6ad97eb96a28d8f8b658b26ab94e911886cf2 Mon Sep 17 00:00:00 2001
From: Sean Keely <Sean.Keely@amd.com>
Date: Thu, 5 Sep 2019 20:58:57 -0500
Subject: [PATCH] Correct doorbell_queue_map allocation.

doorbell_queue_map should be allocated unconditionally.
---
 core/runtime/amd_gpu_agent.cpp | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/core/runtime/amd_gpu_agent.cpp b/core/runtime/amd_gpu_agent.cpp
index 9b79a6b..76df913 100644
--- a/core/runtime/amd_gpu_agent.cpp
+++ b/core/runtime/amd_gpu_agent.cpp
@@ -1182,12 +1182,22 @@ void GpuAgent::SyncClocks() {
 }
 
 void GpuAgent::BindTrapHandler() {
+  // Make an empty map from doorbell index to queue.
+  // The trap handler uses this to retrieve a wave's amd_queue_t*.
+  auto doorbell_queue_map_size = MAX_NUM_DOORBELLS * sizeof(amd_queue_t*);
+
+  doorbell_queue_map_ = (amd_queue_t**)core::Runtime::runtime_singleton_->system_allocator()(
+      doorbell_queue_map_size, 0x1000, 0);
+  assert(doorbell_queue_map_ != NULL && "Doorbell queue map allocation failed");
+
+  memset(doorbell_queue_map_, 0, doorbell_queue_map_size);
+
   if (isa_->GetMajorVersion() == 7) {
     // No trap handler support on Gfx7, soft error.
     return;
   }
 
-  // Disable trap handler on Carrizo until KFD is fixed.
+  // Disable trap handler on APUs until KFD is fixed.
   if (profile_ == HSA_PROFILE_FULL) {
     return;
   }
@@ -1195,16 +1205,6 @@ void GpuAgent::BindTrapHandler() {
   // Assemble the trap handler source code.
   AssembleShader("TrapHandler", AssembleTarget::ISA, trap_code_buf_, trap_code_buf_size_);
 
-  // Make an empty map from doorbell index to queue.
-  // The trap handler uses this to retrieve a wave's amd_queue_t*.
-  auto doorbell_queue_map_size = MAX_NUM_DOORBELLS * sizeof(amd_queue_t*);
-
-  doorbell_queue_map_ = (amd_queue_t**)core::Runtime::runtime_singleton_->system_allocator()(
-      doorbell_queue_map_size, 0x1000, 0);
-  assert(doorbell_queue_map_ != NULL && "Doorbell queue map allocation failed");
-
-  memset(doorbell_queue_map_, 0, doorbell_queue_map_size);
-
   // Bind the trap handler to this node.
   HSAKMT_STATUS err = hsaKmtSetTrapHandler(node_id(), trap_code_buf_, trap_code_buf_size_,
                                            doorbell_queue_map_, doorbell_queue_map_size);