diff --git a/src/core/loader.h b/src/core/loader.h index 73446bb569..92bee42257 100644 --- a/src/core/loader.h +++ b/src/core/loader.h @@ -118,6 +118,36 @@ class HccLoader : protected Loader { static std::atomic instance_; }; +// KFD runtime library loader class +class KfdLoader : protected Loader { + public: + typedef void (*RegisterApiCallback_t)(roctracer_rtapi_callback_t); + typedef void (*RemoveApiCallback_t)(); + + static KfdLoader& Instance() { + KfdLoader* obj = instance_.load(std::memory_order_acquire); + if (obj == NULL) { + std::lock_guard lck(mutex_); + if (instance_.load(std::memory_order_relaxed) == NULL) { + obj = new KfdLoader(); + instance_.store(obj, std::memory_order_release); + } + } + return *instance_; + } + + KfdLoader() : Loader("libkfd_wrapper.so") { + RegisterApiCallback = GetFun("RegisterApiCallback"); + RemoveApiCallback = GetFun("RemoveApiCallback"); + } + + RegisterApiCallback_t* RegisterApiCallback; + RemoveApiCallback_t* RemoveApiCallback; + + private: + static std::atomic instance_; +}; + } // namespace roctracer #endif // SRC_CORE_LOADER_H_ diff --git a/src/core/roctracer.cpp b/src/core/roctracer.cpp index 3787bffc2f..1475560e4e 100644 --- a/src/core/roctracer.cpp +++ b/src/core/roctracer.cpp @@ -528,6 +528,13 @@ static void roctracer_enable_callback_impl( void* user_data) { switch (domain) { +#if 0 + case ACTIVITY_DOMAIN_KFD_API: { + bool succ = roctracer::HipLoader::Instance().RegisterApiCallback(op, (void*)callback, user_data); + if (succ == false) EXC_RAISING(ROCTRACER_STATUS_ERROR, "KFD RegisterApiCallback error"); + break; + } +#endif case ACTIVITY_DOMAIN_HSA_OPS: break; case ACTIVITY_DOMAIN_HSA_API: { roctracer::hsa_support::cb_table.set(op, callback, user_data);