kfdtest: A+A: CP writes to NC mem need flush
Refer to commit "Mark buffers accessed by CP as UC" A+A buffers are mapped as NC. CP (PM4Writes) need ReleaseMem function to ensure the write go through to the memory Signed-off-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com> Change-Id: I4ee55a6e40fba078f5950d95c8fee7ee076260bf
Этот коммит содержится в:
коммит произвёл
Kent Russell
родитель
0e8500b886
Коммит
57f46b53ec
@@ -58,6 +58,8 @@ TEST_F(KFDLocalMemoryTest, AccessLocalMem) {
|
||||
|
||||
//local memory
|
||||
HsaMemoryBuffer destBuf(PAGE_SIZE, defaultGPUNode, false, true);
|
||||
HsaEvent *event;
|
||||
ASSERT_SUCCESS(CreateQueueTypeEvent(false, false, defaultGPUNode, &event));
|
||||
|
||||
PM4Queue queue;
|
||||
|
||||
@@ -65,10 +67,12 @@ TEST_F(KFDLocalMemoryTest, AccessLocalMem) {
|
||||
|
||||
queue.PlaceAndSubmitPacket(PM4WriteDataPacket(destBuf.As<unsigned int*>(), 0, 0));
|
||||
|
||||
queue.Wait4PacketConsumption();
|
||||
queue.Wait4PacketConsumption(event);
|
||||
|
||||
hsaKmtDestroyEvent(event);
|
||||
EXPECT_SUCCESS(queue.Destroy());
|
||||
|
||||
|
||||
TEST_END
|
||||
}
|
||||
|
||||
|
||||
@@ -432,14 +432,18 @@ TEST_F(KFDMemoryTest, AccessPPRMem) {
|
||||
|
||||
ASSERT_SUCCESS(queue.Create(defaultGPUNode));
|
||||
|
||||
HsaEvent *event;
|
||||
ASSERT_SUCCESS(CreateQueueTypeEvent(false, false, defaultGPUNode, &event));
|
||||
|
||||
queue.PlaceAndSubmitPacket(PM4WriteDataPacket(destBuf,
|
||||
0xABCDEF09, 0x12345678));
|
||||
|
||||
queue.Wait4PacketConsumption();
|
||||
queue.Wait4PacketConsumption(event);
|
||||
|
||||
WaitOnValue(destBuf, 0xABCDEF09);
|
||||
WaitOnValue(destBuf + 1, 0x12345678);
|
||||
|
||||
hsaKmtDestroyEvent(event);
|
||||
EXPECT_SUCCESS(queue.Destroy());
|
||||
|
||||
/* This sleep hides the dmesg PPR message storm on Raven, which happens
|
||||
@@ -1455,6 +1459,7 @@ TEST_F(KFDMemoryTest, PtraceAccessInvisibleVram) {
|
||||
mem1 = reinterpret_cast<void *>(reinterpret_cast<HSAuint8 *>(mem) + VRAM_OFFSET + sizeof(HSAuint64));
|
||||
PM4Queue queue;
|
||||
ASSERT_SUCCESS(queue.Create(defaultGPUNode));
|
||||
|
||||
queue.PlaceAndSubmitPacket(PM4WriteDataPacket((unsigned int *)mem0,
|
||||
data0[0], data0[1]));
|
||||
queue.PlaceAndSubmitPacket(PM4WriteDataPacket((unsigned int *)mem1,
|
||||
|
||||
@@ -78,8 +78,11 @@ TEST_F(KFDPMTest, SuspendWithIdleQueueAfterWork) {
|
||||
|
||||
ASSERT_SUCCESS(queue.Create(defaultGPUNode));
|
||||
|
||||
HsaEvent *event;
|
||||
ASSERT_SUCCESS(CreateQueueTypeEvent(false, false, defaultGPUNode, &event));
|
||||
|
||||
queue.PlaceAndSubmitPacket(PM4WriteDataPacket(destBuffer.As<unsigned int*>(), 0x1, 0x2));
|
||||
queue.Wait4PacketConsumption();
|
||||
queue.Wait4PacketConsumption(event);
|
||||
WaitOnValue(&(destBuffer.As<unsigned int*>()[0]), 0x1);
|
||||
WaitOnValue(&(destBuffer.As<unsigned int*>()[1]), 0x2);
|
||||
|
||||
@@ -88,7 +91,7 @@ TEST_F(KFDPMTest, SuspendWithIdleQueueAfterWork) {
|
||||
EXPECT_EQ(true, SuspendAndWakeUp());
|
||||
|
||||
queue.PlaceAndSubmitPacket(PM4WriteDataPacket(&(destBuffer.As<unsigned int*>()[2]), 0x3, 0x4));
|
||||
queue.Wait4PacketConsumption();
|
||||
queue.Wait4PacketConsumption(event);
|
||||
|
||||
EXPECT_EQ(destBuffer.As<unsigned int*>()[0], 0);
|
||||
EXPECT_EQ(destBuffer.As<unsigned int*>()[1], 0);
|
||||
@@ -96,6 +99,7 @@ TEST_F(KFDPMTest, SuspendWithIdleQueueAfterWork) {
|
||||
WaitOnValue(&(destBuffer.As<unsigned int*>()[2]), 0x3);
|
||||
WaitOnValue(&(destBuffer.As<unsigned int*>()[3]), 0x4);
|
||||
|
||||
hsaKmtDestroyEvent(event);
|
||||
EXPECT_SUCCESS(queue.Destroy());
|
||||
|
||||
TEST_END
|
||||
|
||||
@@ -78,13 +78,16 @@ TEST_F(KFDQMTest, SubmitNopCpQueue) {
|
||||
ASSERT_GE(defaultGPUNode, 0) << "failed to get default GPU Node";
|
||||
|
||||
PM4Queue queue;
|
||||
HsaEvent *event;
|
||||
ASSERT_SUCCESS(CreateQueueTypeEvent(false, false, defaultGPUNode, &event));
|
||||
|
||||
ASSERT_SUCCESS(queue.Create(defaultGPUNode));
|
||||
|
||||
queue.PlaceAndSubmitPacket(PM4NopPacket());
|
||||
|
||||
queue.Wait4PacketConsumption();
|
||||
queue.Wait4PacketConsumption(event);
|
||||
|
||||
hsaKmtDestroyEvent(event);
|
||||
EXPECT_SUCCESS(queue.Destroy());
|
||||
|
||||
TEST_END
|
||||
@@ -99,17 +102,19 @@ TEST_F(KFDQMTest, SubmitPacketCpQueue) {
|
||||
HsaMemoryBuffer destBuf(PAGE_SIZE, defaultGPUNode, false);
|
||||
|
||||
destBuf.Fill(0xFF);
|
||||
HsaEvent *event;
|
||||
ASSERT_SUCCESS(CreateQueueTypeEvent(false, false, defaultGPUNode, &event));
|
||||
|
||||
PM4Queue queue;
|
||||
|
||||
ASSERT_SUCCESS(queue.Create(defaultGPUNode));
|
||||
|
||||
queue.PlaceAndSubmitPacket(PM4WriteDataPacket(destBuf.As<unsigned int*>(), 0, 0));
|
||||
|
||||
queue.Wait4PacketConsumption();
|
||||
queue.Wait4PacketConsumption(event);
|
||||
|
||||
EXPECT_TRUE(WaitOnValue(destBuf.As<unsigned int*>(), 0));
|
||||
|
||||
hsaKmtDestroyEvent(event);
|
||||
EXPECT_SUCCESS(queue.Destroy());
|
||||
|
||||
TEST_END
|
||||
@@ -132,7 +137,7 @@ TEST_F(KFDQMTest, AllCpQueues) {
|
||||
|
||||
for (unsigned int qidx = 0; qidx < m_numCpQueues; ++qidx) {
|
||||
queues[qidx].PlaceAndSubmitPacket(PM4WriteDataPacket(destBuf.As<unsigned int*>()+qidx*2, qidx, qidx));
|
||||
|
||||
queues[qidx].PlaceAndSubmitPacket(PM4ReleaseMemoryPacket(m_FamilyId, true, 0, 0));
|
||||
queues[qidx].Wait4PacketConsumption();
|
||||
|
||||
EXPECT_TRUE(WaitOnValue(destBuf.As<unsigned int*>()+qidx*2, qidx));
|
||||
@@ -330,6 +335,7 @@ TEST_F(KFDQMTest, AllQueues) {
|
||||
|
||||
for (i = 0; i < numCpQueues; ++i) {
|
||||
cpQueues[i].PlaceAndSubmitPacket(PM4WriteDataPacket(destBufCp.As<unsigned int*>()+i*2, i, i));
|
||||
cpQueues[i].PlaceAndSubmitPacket(PM4ReleaseMemoryPacket(m_FamilyId, true, 0, 0));
|
||||
|
||||
cpQueues[i].Wait4PacketConsumption();
|
||||
|
||||
@@ -460,9 +466,12 @@ TEST_F(KFDQMTest, DisableCpQueueByUpdateWithNullAddress) {
|
||||
|
||||
ASSERT_SUCCESS(queue.Create(defaultGPUNode));
|
||||
|
||||
HsaEvent *event;
|
||||
ASSERT_SUCCESS(CreateQueueTypeEvent(false, false, defaultGPUNode, &event));
|
||||
|
||||
queue.PlaceAndSubmitPacket(PM4WriteDataPacket(destBuf.As<unsigned int*>(), 0, 0));
|
||||
|
||||
queue.Wait4PacketConsumption();
|
||||
queue.Wait4PacketConsumption(event);
|
||||
|
||||
WaitOnValue(destBuf.As<unsigned int*>(), 0);
|
||||
|
||||
@@ -480,10 +489,11 @@ TEST_F(KFDQMTest, DisableCpQueueByUpdateWithNullAddress) {
|
||||
|
||||
EXPECT_SUCCESS(queue.Update(BaseQueue::DEFAULT_QUEUE_PERCENTAGE, BaseQueue::DEFAULT_PRIORITY, false));
|
||||
|
||||
queue.Wait4PacketConsumption();
|
||||
queue.Wait4PacketConsumption(event);
|
||||
|
||||
WaitOnValue(destBuf.As<unsigned int*>(), 1);
|
||||
|
||||
hsaKmtDestroyEvent(event);
|
||||
EXPECT_SUCCESS(queue.Destroy());
|
||||
|
||||
TEST_END
|
||||
@@ -544,13 +554,16 @@ TEST_F(KFDQMTest, DisableCpQueueByUpdateWithZeroPercentage) {
|
||||
|
||||
ASSERT_SUCCESS(queue.Create(defaultGPUNode));
|
||||
|
||||
HsaEvent *event;
|
||||
ASSERT_SUCCESS(CreateQueueTypeEvent(false, false, defaultGPUNode, &event));
|
||||
|
||||
PM4WriteDataPacket packet1, packet2;
|
||||
packet1.InitPacket(destBuf.As<unsigned int*>(), 0, 0);
|
||||
packet2.InitPacket(destBuf.As<unsigned int*>(), 1, 1);
|
||||
|
||||
queue.PlaceAndSubmitPacket(packet1);
|
||||
|
||||
queue.Wait4PacketConsumption();
|
||||
queue.Wait4PacketConsumption(event);
|
||||
|
||||
WaitOnValue(destBuf.As<unsigned int*>(), 0);
|
||||
|
||||
@@ -568,7 +581,7 @@ TEST_F(KFDQMTest, DisableCpQueueByUpdateWithZeroPercentage) {
|
||||
|
||||
EXPECT_SUCCESS(queue.Update(BaseQueue::DEFAULT_QUEUE_PERCENTAGE, BaseQueue::DEFAULT_PRIORITY, false));
|
||||
|
||||
queue.Wait4PacketConsumption();
|
||||
queue.Wait4PacketConsumption(event);
|
||||
|
||||
WaitOnValue(destBuf.As<unsigned int*>(), 1);
|
||||
|
||||
@@ -1228,6 +1241,8 @@ TEST_F(KFDQMTest, CpuWriteCoherence) {
|
||||
HsaMemoryBuffer destBuf(PAGE_SIZE, defaultGPUNode);
|
||||
|
||||
ASSERT_SUCCESS(queue.Create(defaultGPUNode));
|
||||
HsaEvent *event;
|
||||
ASSERT_SUCCESS(CreateQueueTypeEvent(false, false, defaultGPUNode, &event));
|
||||
|
||||
/* The queue might be full and we fail to submit. There is always one word space unused in queue.
|
||||
* So let rptr one step ahead then we continually submit packet.
|
||||
@@ -1249,10 +1264,11 @@ TEST_F(KFDQMTest, CpuWriteCoherence) {
|
||||
*/
|
||||
queue.PlaceAndSubmitPacket(PM4WriteDataPacket(destBuf.As<unsigned int*>(), 0x42, 0x42));
|
||||
|
||||
queue.Wait4PacketConsumption();
|
||||
queue.Wait4PacketConsumption(event);
|
||||
|
||||
WaitOnValue(destBuf.As<unsigned int*>(), 0x42);
|
||||
|
||||
hsaKmtDestroyEvent(event);
|
||||
TEST_END
|
||||
}
|
||||
|
||||
@@ -1420,18 +1436,22 @@ TEST_F(KFDQMTest, CpQueueWraparound) {
|
||||
|
||||
ASSERT_SUCCESS(queue.Create(defaultGPUNode));
|
||||
|
||||
HsaEvent *event;
|
||||
ASSERT_SUCCESS(CreateQueueTypeEvent(false, false, defaultGPUNode, &event));
|
||||
|
||||
for (unsigned int pktIdx = 0; pktIdx <= PAGE_SIZE/sizeof(PM4WRITE_DATA_CI); ++pktIdx) {
|
||||
queue.PlaceAndSubmitPacket(PM4WriteDataPacket(destBuf.As<unsigned int*>(), pktIdx, pktIdx));
|
||||
queue.Wait4PacketConsumption();
|
||||
queue.Wait4PacketConsumption(event);
|
||||
WaitOnValue(destBuf.As<unsigned int*>(), pktIdx);
|
||||
}
|
||||
|
||||
for (unsigned int pktIdx = 0; pktIdx <= PAGE_SIZE/sizeof(PM4WRITE_DATA_CI); ++pktIdx) {
|
||||
queue.PlaceAndSubmitPacket(PM4WriteDataPacket(destBuf.As<unsigned int*>(), pktIdx, pktIdx));
|
||||
queue.Wait4PacketConsumption();
|
||||
queue.Wait4PacketConsumption(event);
|
||||
WaitOnValue(destBuf.As<unsigned int*>(), pktIdx);
|
||||
}
|
||||
|
||||
hsaKmtDestroyEvent(event);
|
||||
EXPECT_SUCCESS(queue.Destroy());
|
||||
|
||||
TEST_END
|
||||
|
||||
Ссылка в новой задаче
Block a user