Add callback exception forwarding.

Modified callbacks for intercept queue, queue error, iterate agent and
iterate region.

Change-Id: I8bdd67f2312510ea7eb9caec93babca244938b40
This commit is contained in:
Sean Keely
2017-10-21 10:35:27 -05:00
parent f312a7386e
commit a6d8a48cbc
6 changed files with 48 additions and 17 deletions
@@ -184,16 +184,11 @@ class QueueProxy : public QueueWrapper {
// Device-side dispatches are processed as an asynchronous signal event.
class InterceptQueue : public QueueProxy, private LocalSignal, public Signal {
public:
// typedef void(*intercept_packet_writer)(const AqlPacket* pkts, uint64_t pkt_count);
// typedef void(*intercept_handler)(const AqlPacket* pkts, uint64_t pkt_count, uint64_t
// user_pkt_index, void* data, intercept_packet_writer writer);
std::vector<std::pair<hsa_amd_queue_intercept_handler, void*>> interceptors;
explicit InterceptQueue(std::unique_ptr<Queue> queue);
~InterceptQueue();
void AddInterceptor(hsa_amd_queue_intercept_handler interceptor, void* data) {
assert(interceptor != nullptr && "Packet intercept callback was nullptr.");
interceptors.push_back(std::make_pair(interceptor, data));
}
@@ -225,6 +220,9 @@ class InterceptQueue : public QueueProxy, private LocalSignal, public Signal {
// Proxy packet buffer
SharedArray<AqlPacket, 4096> buffer_;
// Packet transform callbacks
std::vector<std::pair<AMD::callback_t<hsa_amd_queue_intercept_handler>, void*>> interceptors;
static const hsa_signal_value_t DOORBELL_MAX = 0xFFFFFFFFFFFFFFFFull;
static bool HandleAsyncDoorbell(hsa_signal_value_t value, void* arg);