Skip to content

Commit f948443

Browse files
Add new arguments to aub dumping interface
Change-Id: I226ec04a919f4ca6ae5c237cf189e043f8286d5e
1 parent 2bc2869 commit f948443

File tree

11 files changed

+141
-60
lines changed

11 files changed

+141
-60
lines changed

runtime/aub_mem_dump/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
set(RUNTIME_SRCS_AUB_MEM_DUMP
2222
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
23+
${CMAKE_CURRENT_SOURCE_DIR}/aub_data.h
2324
${CMAKE_CURRENT_SOURCE_DIR}/aub_header.h
2425
${CMAKE_CURRENT_SOURCE_DIR}/aub_mem_dump.cpp
2526
${CMAKE_CURRENT_SOURCE_DIR}/aub_mem_dump.h

runtime/aub_mem_dump/aub_data.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright (c) 2018, Intel Corporation
3+
*
4+
* Permission is hereby granted, free of charge, to any person obtaining a
5+
* copy of this software and associated documentation files (the "Software"),
6+
* to deal in the Software without restriction, including without limitation
7+
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
8+
* and/or sell copies of the Software, and to permit persons to whom the
9+
* Software is furnished to do so, subject to the following conditions:
10+
*
11+
* The above copyright notice and this permission notice shall be included
12+
* in all copies or substantial portions of the Software.
13+
*
14+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15+
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18+
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19+
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20+
* OTHER DEALINGS IN THE SOFTWARE.
21+
*/
22+
#pragma once
23+
24+
#include <cstdint>
25+
26+
struct AubGTTData {
27+
bool present;
28+
bool writable;
29+
bool userSupervisor;
30+
};

runtime/aub_mem_dump/aub_mem_dump.h

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, Intel Corporation
2+
* Copyright (c) 2017 - 2018, Intel Corporation
33
*
44
* Permission is hereby granted, free of charge, to any person obtaining a
55
* copy of this software and associated documentation files (the "Software"),
@@ -29,6 +29,8 @@
2929
#define BIT(x) (((uint64_t)1) << (x))
3030
#endif
3131

32+
#include "runtime/aub_mem_dump/aub_data.h"
33+
3234
namespace AubMemDump {
3335
#include "aub_services.h"
3436

@@ -65,7 +67,9 @@ union IAPageTableEntry {
6567
uint64_t Dirty : 1; //[6]
6668
uint64_t PAT : 1; //[7]
6769
uint64_t Global : 1; //[8]
68-
uint64_t Reserved_11_9 : 3; //[11:9]
70+
uint64_t Reserved_9 : 1; //[9]
71+
uint64_t Reserved_10 : 1; //[10]
72+
uint64_t Reserved_11 : 1; //[11]
6973
uint64_t PhysicalAddress : 27; //[38:12]
7074
uint64_t Reserved_51_39 : 13; //[51:39]
7175
uint64_t Ignored : 11; //[62:52]
@@ -77,14 +81,6 @@ union IAPageTableEntry {
7781

7882
typedef IAPageTableEntry MiGttEntry;
7983

80-
static inline void setGttEntry(IAPageTableEntry &entry, uint64_t address) {
81-
entry.uiData = 0;
82-
entry.pageConfig.PhysicalAddress = address / 4096;
83-
entry.pageConfig.Present = true;
84-
entry.pageConfig.Writable = true;
85-
entry.pageConfig.UserSupervisor = true;
86-
}
87-
8884
// Use the latest DeviceValues enumerations available
8985
typedef CmdServicesMemTraceVersion::DeviceValues DeviceValues;
9086
typedef CmdServicesMemTraceVersion::SteppingValues SteppingValues;
@@ -236,7 +232,7 @@ struct AubPageTableHelper32 : public AubPageTableHelper<Traits>, PageTableTraits
236232
typedef AubPageTableHelper<Traits> BaseClass;
237233

238234
static void createContext(typename Traits::Stream &stream, uint32_t context);
239-
static uint64_t reserveAddressPPGTT(typename Traits::Stream &stream, uintptr_t gfxAddress, size_t blockSize, uint64_t physAddress);
235+
static uint64_t reserveAddressPPGTT(typename Traits::Stream &stream, uintptr_t gfxAddress, size_t blockSize, uint64_t physAddress, uint64_t additionalBits);
240236

241237
static void fixupLRC(uint8_t *pLrc);
242238
};
@@ -250,7 +246,7 @@ struct AubPageTableHelper64 : public AubPageTableHelper<Traits>, PageTableTraits
250246
}
251247

252248
static void createContext(typename Traits::Stream &stream, uint32_t context);
253-
static uint64_t reserveAddressPPGTT(typename Traits::Stream &stream, uintptr_t gfxAddress, size_t blockSize, uint64_t physAddress);
249+
static uint64_t reserveAddressPPGTT(typename Traits::Stream &stream, uintptr_t gfxAddress, size_t blockSize, uint64_t physAddress, uint64_t additionalBits);
254250

255251
static void fixupLRC(uint8_t *pLrc);
256252
};
@@ -282,12 +278,13 @@ struct AubDump : public TypeSelector<AubPageTableHelper32<TraitsIn>, AubPageTabl
282278

283279
// Write a block of memory to a given address space using an optional hint
284280
static void addMemoryWrite(Stream &stream, uint64_t addr, const void *memory, size_t blockSize, int addressSpace, int hint = DataTypeHintValues::TraceNotype);
285-
static uint64_t reserveAddressGGTT(Stream &stream, uint32_t addr, size_t size, uint64_t physStart);
286-
static uint64_t reserveAddressGGTT(Stream &stream, const void *memory, size_t size, uint64_t physStart);
287-
static void reserveAddressGGTTAndWriteMmeory(Stream &stream, uintptr_t gfxAddress, const void *memory, uint64_t physAddress, size_t size, size_t offset);
281+
static uint64_t reserveAddressGGTT(Stream &stream, uint32_t addr, size_t size, uint64_t physStart, AubGTTData data);
282+
static uint64_t reserveAddressGGTT(Stream &stream, const void *memory, size_t size, uint64_t physStart, AubGTTData data);
283+
static void reserveAddressGGTTAndWriteMmeory(Stream &stream, uintptr_t gfxAddress, const void *memory, uint64_t physAddress, size_t size, size_t offset, uint64_t additionalBits);
284+
static void setGttEntry(IAPageTableEntry &entry, uint64_t address, AubGTTData data);
288285

289286
private:
290-
static uint64_t reserveAddress(Stream &stream, uint32_t addr, size_t size, unsigned int addressSpace /* = AddressSpaceValues::TraceGttEntry*/, uint64_t physStart);
287+
static uint64_t reserveAddress(Stream &stream, uint32_t addr, size_t size, unsigned int addressSpace /* = AddressSpaceValues::TraceGttEntry*/, uint64_t physStart, AubGTTData data);
291288
};
292289

293290
struct LrcaHelper {
@@ -381,4 +378,4 @@ struct LrcaHelperVecs : public LrcaHelper {
381378

382379
extern const uint64_t g_pageMask;
383380
extern const size_t g_dwordCountMax;
384-
}
381+
} // namespace AubMemDump

runtime/aub_mem_dump/aub_mem_dump.inl

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ void AubDump<Traits>::addMemoryWrite(typename Traits::Stream &stream, uint64_t a
8787

8888
// Reserve memory in the GGTT.
8989
template <typename Traits>
90-
uint64_t AubDump<Traits>::reserveAddress(typename Traits::Stream &stream, uint32_t addr, size_t size, unsigned int addressSpace, uint64_t physStart) {
90+
uint64_t AubDump<Traits>::reserveAddress(typename Traits::Stream &stream, uint32_t addr, size_t size, unsigned int addressSpace, uint64_t physStart, AubGTTData data) {
9191
auto startPage = addr & g_pageMask;
9292
auto endPage = (addr + size - 1) & g_pageMask;
9393
auto numPages = (uint32_t)(((endPage - startPage) / 4096) + 1);
@@ -105,7 +105,7 @@ uint64_t AubDump<Traits>::reserveAddress(typename Traits::Stream &stream, uint32
105105
uint64_t physAddress = physStart;
106106
while (startPage <= endPage) {
107107
MiGttEntry entry;
108-
setGttEntry(entry, physAddress);
108+
setGttEntry(entry, physAddress, data);
109109

110110
stream.writeGTT(gttTableOffset, entry.uiData);
111111
gttTableOffset += sizeof(entry);
@@ -118,30 +118,39 @@ uint64_t AubDump<Traits>::reserveAddress(typename Traits::Stream &stream, uint32
118118
}
119119

120120
template <typename Traits>
121-
uint64_t AubDump<Traits>::reserveAddressGGTT(typename Traits::Stream &stream, uint32_t addr, size_t size, uint64_t physStart) {
122-
return AubDump<Traits>::reserveAddress(stream, addr, size, AddressSpaceValues::TraceGttEntry, physStart);
121+
uint64_t AubDump<Traits>::reserveAddressGGTT(typename Traits::Stream &stream, uint32_t addr, size_t size, uint64_t physStart, AubGTTData data) {
122+
return AubDump<Traits>::reserveAddress(stream, addr, size, AddressSpaceValues::TraceGttEntry, physStart, data);
123123
}
124124

125125
template <typename Traits>
126-
uint64_t AubDump<Traits>::reserveAddressGGTT(typename Traits::Stream &stream, const void *memory, size_t size, uint64_t physStart) {
126+
uint64_t AubDump<Traits>::reserveAddressGGTT(typename Traits::Stream &stream, const void *memory, size_t size, uint64_t physStart, AubGTTData data) {
127127
auto gfxAddress = BaseHelper::ptrToGGTT(memory);
128-
return AubDump<Traits>::reserveAddress(stream, gfxAddress, size, AddressSpaceValues::TraceGttEntry, physStart);
128+
return AubDump<Traits>::reserveAddress(stream, gfxAddress, size, AddressSpaceValues::TraceGttEntry, physStart, data);
129129
}
130130

131131
template <typename Traits>
132-
void AubDump<Traits>::reserveAddressGGTTAndWriteMmeory(typename Traits::Stream &stream, uintptr_t gfxAddress, const void *memory, uint64_t physAddress, size_t size, size_t offset) {
132+
void AubDump<Traits>::reserveAddressGGTTAndWriteMmeory(typename Traits::Stream &stream, uintptr_t gfxAddress, const void *memory, uint64_t physAddress, size_t size, size_t offset, uint64_t additionalBits) {
133133
auto vmAddr = (gfxAddress + offset) & ~(MemoryConstants::pageSize - 1);
134134
auto pAddr = physAddress & ~(MemoryConstants::pageSize - 1);
135135

136-
AubDump<Traits>::reserveAddressPPGTT(stream, vmAddr, MemoryConstants::pageSize, pAddr);
136+
AubDump<Traits>::reserveAddressPPGTT(stream, vmAddr, MemoryConstants::pageSize, pAddr, additionalBits);
137137

138138
AubDump<Traits>::addMemoryWrite(stream, physAddress,
139139
reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(memory) + offset),
140140
size, AubMemDump::AddressSpaceValues::TraceNonlocal);
141141
}
142142

143143
template <typename Traits>
144-
uint64_t AubPageTableHelper32<Traits>::reserveAddressPPGTT(typename Traits::Stream &stream, uintptr_t gfxAddress, size_t blockSize, uint64_t physAddress) {
144+
void AubDump<Traits>::setGttEntry(IAPageTableEntry &entry, uint64_t address, AubGTTData data) {
145+
entry.uiData = 0;
146+
entry.pageConfig.PhysicalAddress = address / 4096;
147+
entry.pageConfig.Present = data.present;
148+
entry.pageConfig.Writable = data.writable;
149+
entry.pageConfig.UserSupervisor = data.userSupervisor;
150+
}
151+
152+
template <typename Traits>
153+
uint64_t AubPageTableHelper32<Traits>::reserveAddressPPGTT(typename Traits::Stream &stream, uintptr_t gfxAddress, size_t blockSize, uint64_t physAddress, uint64_t additionalBits) {
145154
auto startAddress = gfxAddress;
146155
auto endAddress = gfxAddress + blockSize - 1;
147156

@@ -163,7 +172,7 @@ uint64_t AubPageTableHelper32<Traits>::reserveAddressPPGTT(typename Traits::Stre
163172
auto currPDE = startPDE;
164173
auto physPage = BaseClass::getPTEAddress(startPTE) & g_pageMask;
165174
while (currPDE <= endPDE) {
166-
auto pde = physPage | 7;
175+
auto pde = physPage | additionalBits;
167176

168177
stream.writePTE(start_address, pde);
169178
start_address += sizeof(pde);
@@ -183,7 +192,7 @@ uint64_t AubPageTableHelper32<Traits>::reserveAddressPPGTT(typename Traits::Stre
183192
auto currPTE = startPTE;
184193
auto physPage = physAddress & g_pageMask;
185194
while (currPTE <= endPTE) {
186-
auto pte = physPage | 7;
195+
auto pte = physPage | additionalBits;
187196

188197
stream.writePTE(start_address, pte);
189198
start_address += sizeof(pte);
@@ -197,7 +206,7 @@ uint64_t AubPageTableHelper32<Traits>::reserveAddressPPGTT(typename Traits::Stre
197206
}
198207

199208
template <typename Traits>
200-
uint64_t AubPageTableHelper64<Traits>::reserveAddressPPGTT(typename Traits::Stream &stream, uintptr_t gfxAddress, size_t blockSize, uint64_t physAddress) {
209+
uint64_t AubPageTableHelper64<Traits>::reserveAddressPPGTT(typename Traits::Stream &stream, uintptr_t gfxAddress, size_t blockSize, uint64_t physAddress, uint64_t additionalBits) {
201210
auto startAddress = gfxAddress;
202211
auto endAddress = gfxAddress + blockSize - 1;
203212

@@ -227,7 +236,7 @@ uint64_t AubPageTableHelper64<Traits>::reserveAddressPPGTT(typename Traits::Stre
227236
auto currPML4 = startPML4;
228237
auto physPage = BaseClass::getPDPAddress(startPDP) & g_pageMask;
229238
while (currPML4 <= endPML4) {
230-
auto pml4 = physPage | 7;
239+
auto pml4 = physPage | additionalBits;
231240

232241
stream.writePTE(start_address, pml4);
233242
start_address += sizeof(pml4);
@@ -247,7 +256,7 @@ uint64_t AubPageTableHelper64<Traits>::reserveAddressPPGTT(typename Traits::Stre
247256
auto currPDP = startPDP;
248257
auto physPage = BaseClass::getPDEAddress(startPDE) & g_pageMask;
249258
while (currPDP <= endPDP) {
250-
auto pdp = physPage | 7;
259+
auto pdp = physPage | additionalBits;
251260

252261
stream.writePTE(start_address, pdp);
253262
start_address += sizeof(pdp);
@@ -267,7 +276,7 @@ uint64_t AubPageTableHelper64<Traits>::reserveAddressPPGTT(typename Traits::Stre
267276
auto currPDE = startPDE;
268277
auto physPage = BaseClass::getPTEAddress(startPTE) & g_pageMask;
269278
while (currPDE <= endPDE) {
270-
auto pde = physPage | 7;
279+
auto pde = physPage | additionalBits;
271280

272281
stream.writePTE(start_address, pde);
273282
start_address += sizeof(pde);
@@ -287,7 +296,7 @@ uint64_t AubPageTableHelper64<Traits>::reserveAddressPPGTT(typename Traits::Stre
287296
auto currPTE = startPTE;
288297
auto physPage = physAddress & g_pageMask;
289298
while (currPTE <= endPTE) {
290-
auto pte = physPage | 7;
299+
auto pte = physPage | additionalBits;
291300

292301
stream.writePTE(start_address, pte);
293302
start_address += sizeof(pte);
@@ -337,4 +346,4 @@ void AubPageTableHelper64<Traits>::createContext(typename Traits::Stream &stream
337346
stream.createContext(cmd);
338347
}
339348

340-
}
349+
} // namespace AubMemDump

runtime/command_stream/aub_command_stream_receiver_hw.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,5 +91,7 @@ class AUBCommandStreamReceiverHw : public CommandStreamReceiverHw<GfxFamily> {
9191
MOCKABLE_VIRTUAL bool addPatchInfoComments();
9292
void addGUCStartMessage(uint64_t batchBufferAddress, EngineType engineType);
9393
uint32_t getGUCWorkQueueItemHeader(EngineType engineType);
94+
uint64_t getPPGTTAdditionalBits(GraphicsAllocation *gfxAllocation);
95+
void getGTTData(void *memory, AubGTTData &data);
9496
};
9597
} // namespace OCLRT

runtime/command_stream/aub_command_stream_receiver_hw.inl

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@ void AUBCommandStreamReceiverHw<GfxFamily>::initializeEngine(EngineType engineTy
117117
stream->addComment(str.str().c_str());
118118
}
119119

120-
AUB::reserveAddressGGTT(*stream, engineInfo.ggttHWSP, sizeHWSP, physHWSP);
120+
AubGTTData data = {0};
121+
getGTTData(reinterpret_cast<void *>(physHWSP), data);
122+
AUB::reserveAddressGGTT(*stream, engineInfo.ggttHWSP, sizeHWSP, physHWSP, data);
121123
stream->writeMMIO(mmioBase + 0x2080, engineInfo.ggttHWSP);
122124
}
123125

@@ -145,7 +147,9 @@ void AUBCommandStreamReceiverHw<GfxFamily>::initializeEngine(EngineType engineTy
145147
stream->addComment(str.str().c_str());
146148
}
147149

148-
AUB::reserveAddressGGTT(*stream, engineInfo.ggttRingBuffer, engineInfo.sizeRingBuffer, physRingBuffer);
150+
AubGTTData data = {0};
151+
getGTTData(reinterpret_cast<void *>(physRingBuffer), data);
152+
AUB::reserveAddressGGTT(*stream, engineInfo.ggttRingBuffer, engineInfo.sizeRingBuffer, physRingBuffer, data);
149153
}
150154

151155
// Initialize the ring MMIO registers
@@ -171,7 +175,9 @@ void AUBCommandStreamReceiverHw<GfxFamily>::initializeEngine(EngineType engineTy
171175
stream->addComment(str.str().c_str());
172176
}
173177

174-
AUB::reserveAddressGGTT(*stream, engineInfo.ggttLRCA, sizeLRCA, lrcAddressPhys);
178+
AubGTTData data = {0};
179+
getGTTData(reinterpret_cast<void *>(lrcAddressPhys), data);
180+
AUB::reserveAddressGGTT(*stream, engineInfo.ggttLRCA, sizeLRCA, lrcAddressPhys, data);
175181
AUB::addMemoryWrite(
176182
*stream,
177183
lrcAddressPhys,
@@ -236,7 +242,7 @@ FlushStamp AUBCommandStreamReceiverHw<GfxFamily>::flush(BatchBuffer &batchBuffer
236242
}
237243

238244
auto physBatchBuffer = ppgtt.map(reinterpret_cast<uintptr_t>(pBatchBuffer), sizeBatchBuffer);
239-
AUB::reserveAddressPPGTT(*stream, reinterpret_cast<uintptr_t>(pBatchBuffer), sizeBatchBuffer, physBatchBuffer);
245+
AUB::reserveAddressPPGTT(*stream, reinterpret_cast<uintptr_t>(pBatchBuffer), sizeBatchBuffer, physBatchBuffer, getPPGTTAdditionalBits(batchBuffer.commandBufferAllocation));
240246

241247
AUB::addMemoryWrite(
242248
*stream,
@@ -486,7 +492,7 @@ bool AUBCommandStreamReceiverHw<GfxFamily>::writeMemory(GraphicsAllocation &gfxA
486492
}
487493

488494
PageWalker walker = [&](uint64_t physAddress, size_t size, size_t offset) {
489-
AUB::reserveAddressGGTTAndWriteMmeory(*stream, static_cast<uintptr_t>(gpuAddress), cpuAddress, physAddress, size, offset);
495+
AUB::reserveAddressGGTTAndWriteMmeory(*stream, static_cast<uintptr_t>(gpuAddress), cpuAddress, physAddress, size, offset, getPPGTTAdditionalBits(&gfxAllocation));
490496
};
491497
ppgtt.pageWalk(static_cast<uintptr_t>(gpuAddress), size, 0, walker);
492498

@@ -547,7 +553,7 @@ void AUBCommandStreamReceiverHw<GfxFamily>::addGUCStartMessage(uint64_t batchBuf
547553
miBatchBufferStart->setAddressSpaceIndicator(MI_BATCH_BUFFER_START::ADDRESS_SPACE_INDICATOR_PPGTT);
548554

549555
auto physBufferAddres = ppgtt.map(reinterpret_cast<uintptr_t>(buffer.get()), bufferSize);
550-
AUB::reserveAddressPPGTT(*stream, reinterpret_cast<uintptr_t>(buffer.get()), bufferSize, physBufferAddres);
556+
AUB::reserveAddressPPGTT(*stream, reinterpret_cast<uintptr_t>(buffer.get()), bufferSize, physBufferAddres, getPPGTTAdditionalBits(linearStream.getGraphicsAllocation()));
551557

552558
AUB::addMemoryWrite(
553559
*stream,
@@ -566,4 +572,16 @@ uint32_t AUBCommandStreamReceiverHw<GfxFamily>::getGUCWorkQueueItemHeader(Engine
566572
return GUCWorkQueueItemHeader;
567573
}
568574

575+
template <typename GfxFamily>
576+
uint64_t AUBCommandStreamReceiverHw<GfxFamily>::getPPGTTAdditionalBits(GraphicsAllocation *gfxAllocation) {
577+
return 7;
578+
}
579+
580+
template <typename GfxFamily>
581+
void AUBCommandStreamReceiverHw<GfxFamily>::getGTTData(void *memory, AubGTTData &data) {
582+
data.present = true;
583+
data.writable = true;
584+
data.userSupervisor = true;
585+
}
586+
569587
} // namespace OCLRT

runtime/command_stream/tbx_command_stream_receiver_hw.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ class TbxCommandStreamReceiverHw : public CommandStreamReceiverHw<GfxFamily> {
8484
TbxMemoryManager *getMemoryManager() {
8585
return (TbxMemoryManager *)CommandStreamReceiver::getMemoryManager();
8686
}
87+
uint64_t getPPGTTAdditionalBits(GraphicsAllocation *gfxAllocation);
88+
void getGTTData(void *memory, AubGTTData &data);
8789

8890
TbxCommandStreamReceiver::TbxStream stream;
8991

0 commit comments

Comments
 (0)