gpu-compute: Fix valgrind memleak complaints
Fixes several memory leaks, mostly of small and medium severity. Fixes mismatched new/new[] and delete/delete[] calls. Change-Id: Iedafc409389bd94e45f330bc587d6d72d1971219
This commit is contained in:
@@ -453,6 +453,8 @@ AMDGPUDevice::writeFrame(PacketPtr pkt, Addr offset)
|
||||
|
||||
auto system = cp->shader()->gpuCmdProc.system();
|
||||
system->getDeviceMemory(writePkt)->access(writePkt);
|
||||
|
||||
delete writePkt;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -671,7 +673,10 @@ AMDGPUDevice::getRegVal(uint64_t addr)
|
||||
DPRINTF(AMDGPUDevice, "Getting register 0x%lx = %x\n",
|
||||
fixup_addr, pkt->getLE<uint32_t>());
|
||||
|
||||
return pkt->getLE<uint32_t>();
|
||||
pkt_data = pkt->getLE<uint32_t>();
|
||||
delete pkt;
|
||||
|
||||
return pkt_data;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -686,6 +691,7 @@ AMDGPUDevice::setRegVal(uint64_t addr, uint32_t value)
|
||||
PacketPtr pkt = Packet::createWrite(request);
|
||||
pkt->dataStatic((uint8_t *)&pkt_data);
|
||||
writeMMIO(pkt, addr);
|
||||
delete pkt;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -130,6 +130,10 @@ AMDGPUInterruptHandler::DmaEvent::process()
|
||||
} else {
|
||||
fatal("Interrupt Handler DMA event returned bad value: %d\n", data);
|
||||
}
|
||||
|
||||
if (dataPtr) {
|
||||
delete [] dataPtr;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -140,7 +144,7 @@ AMDGPUInterruptHandler::submitWritePointer()
|
||||
Addr paddr = regs.WptrAddr;
|
||||
std::memcpy(dataPtr, ®s.IH_Wptr, sizeof(uint32_t));
|
||||
|
||||
dmaEvent = new AMDGPUInterruptHandler::DmaEvent(this, 2);
|
||||
dmaEvent = new AMDGPUInterruptHandler::DmaEvent(this, 2, dataPtr);
|
||||
dmaWrite(paddr, sizeof(uint32_t), dmaEvent, dataPtr);
|
||||
}
|
||||
|
||||
@@ -157,7 +161,7 @@ AMDGPUInterruptHandler::submitInterruptCookie()
|
||||
|
||||
DPRINTF(AMDGPUDevice, "InterruptHandler rptr: 0x%x wptr: 0x%x\n",
|
||||
regs.IH_Rptr, regs.IH_Wptr);
|
||||
dmaEvent = new AMDGPUInterruptHandler::DmaEvent(this, 1);
|
||||
dmaEvent = new AMDGPUInterruptHandler::DmaEvent(this, 1, dataPtr);
|
||||
dmaWrite(paddr, cookieSize, dmaEvent, dataPtr);
|
||||
|
||||
interruptQueue.pop();
|
||||
|
||||
@@ -136,10 +136,12 @@ class AMDGPUInterruptHandler : public DmaDevice
|
||||
private:
|
||||
AMDGPUInterruptHandler *deviceIh;
|
||||
uint32_t data;
|
||||
uint8_t *dataPtr;
|
||||
|
||||
public:
|
||||
DmaEvent(AMDGPUInterruptHandler *deviceIh, uint32_t data)
|
||||
: Event(), deviceIh(deviceIh), data(data)
|
||||
DmaEvent(AMDGPUInterruptHandler *deviceIh, uint32_t data,
|
||||
uint8_t* _dataPtr)
|
||||
: Event(), deviceIh(deviceIh), data(data), dataPtr(_dataPtr)
|
||||
{
|
||||
setFlags(Event::AutoDelete);
|
||||
}
|
||||
|
||||
@@ -456,8 +456,6 @@ PM4PacketProcessor::mapQueues(PM4Queue *q, PM4MapQueues *pkt)
|
||||
} else {
|
||||
panic("Unknown engine for MQD: %d\n", pkt->engineSel);
|
||||
}
|
||||
|
||||
decodeNext(q);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -494,6 +492,9 @@ PM4PacketProcessor::processMQD(PM4MapQueues *pkt, PM4Queue *q, Addr addr,
|
||||
"hqdAQL %d.\n", mqd->base, mqd->mqdBase, mqd->aql);
|
||||
|
||||
gpuDevice->processPendingDoorbells(offset);
|
||||
|
||||
delete pkt;
|
||||
decodeNext(q);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -524,6 +525,9 @@ PM4PacketProcessor::processSDMAMQD(PM4MapQueues *pkt, PM4Queue *q, Addr addr,
|
||||
gpuDevice->setDoorbellType(pkt->doorbellOffset << 2, RLC, getIpId());
|
||||
|
||||
gpuDevice->processPendingDoorbells(pkt->doorbellOffset << 2);
|
||||
|
||||
delete pkt;
|
||||
decodeNext(q);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -656,6 +660,7 @@ PM4PacketProcessor::unmapQueues(PM4Queue *q, PM4UnmapQueues *pkt)
|
||||
dmaWriteVirt(addr, sizeof(QueueDesc), cb, mqd);
|
||||
queues.erase(id);
|
||||
hsa_pp.unsetDeviceQueueDesc(id, 8);
|
||||
delete mqd;
|
||||
}
|
||||
}
|
||||
gpuDevice->deallocateAllQueues();
|
||||
@@ -754,6 +759,7 @@ PM4PacketProcessor::indirectBuffer(PM4Queue *q, PM4IndirectBuf *pkt)
|
||||
q->ibBase(pkt->ibBase);
|
||||
q->wptr(pkt->ibSize * sizeof(uint32_t));
|
||||
|
||||
delete pkt;
|
||||
decodeNext(q);
|
||||
}
|
||||
|
||||
@@ -766,6 +772,7 @@ PM4PacketProcessor::switchBuffer(PM4Queue *q, PM4SwitchBuf *pkt)
|
||||
DPRINTF(PM4PacketProcessor, "PM4 switching buffer, rptr: %p.\n",
|
||||
q->wptr());
|
||||
|
||||
delete pkt;
|
||||
decodeNext(q);
|
||||
}
|
||||
|
||||
@@ -784,6 +791,7 @@ PM4PacketProcessor::setUconfigReg(PM4Queue *q, PM4SetUconfigReg *pkt)
|
||||
reg_addr += 0x40000 * getIpId();
|
||||
gpuDevice->setRegVal(reg_addr, pkt->data);
|
||||
|
||||
delete pkt;
|
||||
decodeNext(q);
|
||||
}
|
||||
|
||||
@@ -800,6 +808,7 @@ PM4PacketProcessor::waitRegMem(PM4Queue *q, PM4WaitRegMem *pkt)
|
||||
DPRINTF(PM4PacketProcessor, " Mask: %lx\n", pkt->mask);
|
||||
DPRINTF(PM4PacketProcessor, " Poll Interval: %lx\n", pkt->pollInterval);
|
||||
|
||||
delete pkt;
|
||||
decodeNext(q);
|
||||
}
|
||||
|
||||
|
||||
@@ -1132,7 +1132,7 @@ SDMAEngine::constFillDone(SDMAQueue *q, sdmaConstFill *pkt, uint8_t *fill_data)
|
||||
{
|
||||
DPRINTF(SDMAEngine, "ConstFill to %lx done\n", pkt->addr);
|
||||
|
||||
delete fill_data;
|
||||
delete [] fill_data;
|
||||
delete pkt;
|
||||
decodeNext(q);
|
||||
}
|
||||
|
||||
@@ -1735,7 +1735,7 @@ ComputeUnit::DataPort::processMemReqEvent(PacketPtr pkt)
|
||||
SystemHubEvent *resp_event = new SystemHubEvent(pkt, this);
|
||||
compute_unit->shader->systemHub->sendRequest(pkt, resp_event);
|
||||
} else if (!(sendTimingReq(pkt))) {
|
||||
retries.push_back(std::make_pair(pkt, gpuDynInst));
|
||||
retries.emplace_back(pkt, gpuDynInst);
|
||||
|
||||
if (gpuDynInst) {
|
||||
DPRINTF(GPUPort,
|
||||
@@ -1772,7 +1772,7 @@ ComputeUnit::ScalarDataPort::MemReqEvent::process()
|
||||
SystemHubEvent *resp_event = new SystemHubEvent(pkt, &scalarDataPort);
|
||||
compute_unit->shader->systemHub->sendRequest(pkt, resp_event);
|
||||
} else if (!(scalarDataPort.sendTimingReq(pkt))) {
|
||||
scalarDataPort.retries.push_back(pkt);
|
||||
scalarDataPort.retries.emplace_back(pkt);
|
||||
|
||||
DPRINTF(GPUPort,
|
||||
"CU%d: WF[%d][%d]: addr %#x data req failed!\n",
|
||||
|
||||
Reference in New Issue
Block a user