Use HybridMutex for IPC locks

Change-Id: I24ab4a96237612a7d32beda06cc20b25cb1f0b37
This commit is contained in:
David Yat Sin
2023-12-19 15:19:31 +00:00
parent 8d3fee5095
commit 0e3f668e2c
2 changed files with 6 additions and 6 deletions
+1 -1
View File
@@ -407,7 +407,7 @@ class Signal {
core::Agent* async_copy_agent_;
private:
static KernelMutex ipcLock_;
static HybridMutex ipcLock_;
static std::map<decltype(hsa_signal_t::handle), Signal*> ipcMap_;
static Signal* lookupIpc(hsa_signal_t signal);
+5 -5
View File
@@ -52,7 +52,7 @@
namespace rocr {
namespace core {
KernelMutex Signal::ipcLock_;
HybridMutex Signal::ipcLock_;
std::map<decltype(hsa_signal_t::handle), Signal*> Signal::ipcMap_;
void SharedSignalPool_t::clear() {
@@ -128,7 +128,7 @@ LocalSignal::LocalSignal(hsa_signal_value_t initial_value, bool exportable)
}
void Signal::registerIpc() {
ScopedAcquire<KernelMutex> lock(&ipcLock_);
ScopedAcquire<HybridMutex> lock(&ipcLock_);
auto handle = Convert(this);
assert(ipcMap_.find(handle.handle) == ipcMap_.end() &&
"Can't register the same IPC signal twice.");
@@ -136,7 +136,7 @@ void Signal::registerIpc() {
}
bool Signal::deregisterIpc() {
ScopedAcquire<KernelMutex> lock(&ipcLock_);
ScopedAcquire<HybridMutex> lock(&ipcLock_);
if (refcount_ != 0) return false;
auto handle = Convert(this);
const auto& it = ipcMap_.find(handle.handle);
@@ -146,14 +146,14 @@ bool Signal::deregisterIpc() {
}
Signal* Signal::lookupIpc(hsa_signal_t signal) {
ScopedAcquire<KernelMutex> lock(&ipcLock_);
ScopedAcquire<HybridMutex> lock(&ipcLock_);
const auto& it = ipcMap_.find(signal.handle);
if (it == ipcMap_.end()) return nullptr;
return it->second;
}
Signal* Signal::duplicateIpc(hsa_signal_t signal) {
ScopedAcquire<KernelMutex> lock(&ipcLock_);
ScopedAcquire<HybridMutex> lock(&ipcLock_);
const auto& it = ipcMap_.find(signal.handle);
if (it == ipcMap_.end()) return nullptr;
it->second->refcount_++;