Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 20 additions & 11 deletions profile/device/aie_trace/aie_trace_offload.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ AIETraceOffload::AIETraceOffload
, numStream(numStrm)
, traceContinuous(false)
, offloadIntervalUs(0)
, bufferInitialized(false)
, bufferRefCount(0)
, offloadStatus(AIEOffloadThreadStatus::IDLE)
, mEnCircularBuf(false)
, mCircularBufOverwrite(false)
Expand All @@ -79,6 +79,7 @@ AIETraceOffload::~AIETraceOffload()
stopOffload();
if (offloadThread.joinable())
offloadThread.join();
endReadTrace();
}

bool AIETraceOffload::setupPSKernel() {
Expand All @@ -98,8 +99,7 @@ bool AIETraceOffload::setupPSKernel() {
buffers[i].bufId = deviceIntf->allocTraceBuf(bufAllocSz, 0);

if (!buffers[i].bufId) {
bufferInitialized = false;
return bufferInitialized;
return false;
}

uint64_t bufAddr = deviceIntf->getTraceBufDeviceAddr(buffers[i].bufId);
Expand Down Expand Up @@ -133,12 +133,18 @@ bool AIETraceOffload::setupPSKernel() {
xrt_core::message::send(xrt_core::message::severity_level::info, "XRT", msg);

free(input_params);
bufferInitialized = true;
return bufferInitialized;
bufferRefCount = 1;
return true;
}

bool AIETraceOffload::initReadTrace()
{
std::lock_guard<std::mutex> lock(bufferLock);
if (bufferRefCount) {
++bufferRefCount;
return true;
}

buffers.clear();
buffers.resize(numStream);

Expand Down Expand Up @@ -168,8 +174,7 @@ bool AIETraceOffload::initReadTrace()
for(uint64_t i = 0; i < numStream ; ++i) {
buffers[i].bufId = deviceIntf->allocTraceBuf(bufAllocSz, memIndex);
if (!buffers[i].bufId) {
bufferInitialized = false;
return bufferInitialized;
return false;
}

// Data Mover will write input stream to this address
Expand Down Expand Up @@ -237,12 +242,17 @@ bool AIETraceOffload::initReadTrace()
#endif
}
}
bufferInitialized = true;
return bufferInitialized;
bufferRefCount = 1;
return true;
}

void AIETraceOffload::endReadTrace()
{
std::lock_guard<std::mutex> lock(bufferLock);
if (!bufferRefCount) return;
--bufferRefCount;
if (bufferRefCount) return;

// reset
for (uint64_t i = 0; i < numStream ; ++i) {
if (!buffers[i].bufId)
Expand Down Expand Up @@ -272,7 +282,6 @@ void AIETraceOffload::endReadTrace()
deviceIntf->freeTraceBuf(buffers[i].bufId);
buffers[i].bufId = 0;
}
bufferInitialized = false;
}

void AIETraceOffload::readTraceGMIO(bool final)
Expand Down Expand Up @@ -487,7 +496,7 @@ void AIETraceOffload::startOffload()

void AIETraceOffload::continuousOffload()
{
if (!bufferInitialized && !initReadTrace()) {
if (!initReadTrace()) {
offloadFinished();
return;
}
Expand Down
3 changes: 2 additions & 1 deletion profile/device/aie_trace/aie_trace_offload.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,8 @@ class AIETraceOffload
// Continuous Trace Offload (For PLIO)
bool traceContinuous;
uint64_t offloadIntervalUs;
bool bufferInitialized;
std::mutex bufferLock;
size_t bufferRefCount;
std::mutex statusLock;
AIEOffloadThreadStatus offloadStatus;
std::thread offloadThread;
Expand Down
6 changes: 4 additions & 2 deletions profile/device/hal_device/xdp_hal_device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -206,9 +206,11 @@ size_t HalDevice::alloc(size_t size, uint64_t memoryIndex)
return xrt_bos.size();
}

void HalDevice::free(size_t)
void HalDevice::free(size_t id)
{
return;
if(!id) return;
size_t boIndex = id - 1;
xrt_bos[boIndex] = xrt::bo();
}

void* HalDevice::map(size_t id)
Expand Down
Loading