SWDEV-255459 : to get rid of c++ libatomic
Change-Id: I311db0e456dd6e6c87692898640574dc8f669086
This commit is contained in:
zatwierdzone przez
Evgeny Shcherbakov
rodzic
169e36f379
commit
97caab40da
@@ -35,4 +35,4 @@ set ( LIB_SRC
|
|||||||
)
|
)
|
||||||
add_library ( ${TARGET_LIB} SHARED ${LIB_SRC} )
|
add_library ( ${TARGET_LIB} SHARED ${LIB_SRC} )
|
||||||
target_include_directories ( ${TARGET_LIB} PRIVATE ${LIB_DIR} ${ROOT_DIR} ${HSA_RUNTIME_INC_PATH} ${HSA_KMT_LIB_PATH}/.. )
|
target_include_directories ( ${TARGET_LIB} PRIVATE ${LIB_DIR} ${ROOT_DIR} ${HSA_RUNTIME_INC_PATH} ${HSA_KMT_LIB_PATH}/.. )
|
||||||
target_link_libraries( ${TARGET_LIB} PRIVATE ${HSA_RUNTIME_LIB} c stdc++ atomic )
|
target_link_libraries( ${TARGET_LIB} PRIVATE ${HSA_RUNTIME_LIB} c stdc++ )
|
||||||
|
|||||||
+21
-12
@@ -173,31 +173,40 @@ PUBLIC_API bool EnableActivityCallback(uint32_t op, bool enable) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct evt_cb_entry_t {
|
struct evt_cb_entry_t {
|
||||||
void* callback;
|
typedef std::pair<void*, void*> data_t;
|
||||||
void* arg;
|
data_t data;
|
||||||
|
std::mutex mutex;
|
||||||
|
|
||||||
|
void set(const data_t& in) {
|
||||||
|
mutex.lock();
|
||||||
|
data = in;
|
||||||
|
mutex.unlock();
|
||||||
|
}
|
||||||
|
data_t get() {
|
||||||
|
mutex.lock();
|
||||||
|
const data_t out = data;
|
||||||
|
mutex.unlock();
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
evt_cb_entry_t() : data{} {}
|
||||||
};
|
};
|
||||||
typedef std::atomic<evt_cb_entry_t> evt_cb_entry_atomic_t;
|
evt_cb_entry_t evt_cb_table[HSA_EVT_ID_NUMBER];
|
||||||
evt_cb_entry_atomic_t evt_cb_table[HSA_EVT_ID_NUMBER]{};
|
|
||||||
|
|
||||||
hsa_status_t codeobj_evt_callback(
|
hsa_status_t codeobj_evt_callback(
|
||||||
rocprofiler_hsa_cb_id_t id,
|
rocprofiler_hsa_cb_id_t id,
|
||||||
const rocprofiler_hsa_callback_data_t* cb_data,
|
const rocprofiler_hsa_callback_data_t* cb_data,
|
||||||
void* arg)
|
void* arg)
|
||||||
{
|
{
|
||||||
evt_cb_entry_t evt = evt_cb_table[id].load(std::memory_order_relaxed);
|
const auto evt = evt_cb_table[id].get();
|
||||||
activity_rtapi_callback_t evt_callback = (activity_rtapi_callback_t)evt.callback;
|
activity_rtapi_callback_t evt_callback = (activity_rtapi_callback_t)evt.first;
|
||||||
|
if (evt_callback != NULL) evt_callback(ACTIVITY_DOMAIN_HSA_EVT, id, cb_data, evt.second);
|
||||||
if (evt_callback != NULL) {
|
|
||||||
evt_callback(ACTIVITY_DOMAIN_HSA_EVT, id, cb_data, evt.arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
return HSA_STATUS_SUCCESS;
|
return HSA_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
PUBLIC_API const char* GetEvtName(uint32_t op) { return strdup("CODEOBJ"); }
|
PUBLIC_API const char* GetEvtName(uint32_t op) { return strdup("CODEOBJ"); }
|
||||||
|
|
||||||
PUBLIC_API bool RegisterEvtCallback(uint32_t op, void* callback, void* arg) {
|
PUBLIC_API bool RegisterEvtCallback(uint32_t op, void* callback, void* arg) {
|
||||||
evt_cb_table[op].store(evt_cb_entry_t{callback, arg}, std::memory_order_relaxed);
|
evt_cb_table[op].set({callback, arg});
|
||||||
|
|
||||||
rocprofiler_hsa_callbacks_t ocb{};
|
rocprofiler_hsa_callbacks_t ocb{};
|
||||||
switch (op) {
|
switch (op) {
|
||||||
|
|||||||
Reference in New Issue
Block a user