Skip to content

Commit 5f874f4

Browse files
Revert "feature: Add support for euss buffer overflow on windows"
This reverts commit 703dd48. Signed-off-by: Compute-Runtime-Validation <[email protected]>
1 parent 8f4df0d commit 5f874f4

File tree

7 files changed

+18
-81
lines changed

7 files changed

+18
-81
lines changed

level_zero/tools/source/metrics/windows/os_metric_ip_sampling_imp_windows.cpp

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
namespace L0 {
1919

20-
#define GTDI_RET_BUFFER_OVERFLOW 13
2120
class MetricIpSamplingWindowsImp : public MetricIpSamplingOsInterface {
2221
public:
2322
MetricIpSamplingWindowsImp(Device &device);
@@ -32,7 +31,6 @@ class MetricIpSamplingWindowsImp : public MetricIpSamplingOsInterface {
3231
ze_result_t getMetricsTimerResolution(uint64_t &timerResolution) override;
3332

3433
private:
35-
bool overflowReported = false;
3634
Device &device;
3735
uint32_t notifyEveryNReports = 0u;
3836
ze_result_t getNearestSupportedSamplingUnit(uint32_t &samplingPeriodNs, uint32_t &samplingRate);
@@ -67,25 +65,9 @@ ze_result_t MetricIpSamplingWindowsImp::startMeasurement(uint32_t &notifyEveryNR
6765
}
6866

6967
ze_result_t MetricIpSamplingWindowsImp::readData(uint8_t *pRawData, size_t *pRawDataSize) {
70-
// First read call to the KMD after overflow will just give the overflow status back, without any data being read from the HW buffer. This will not reset the HW overflow bit.
71-
// Second read call to the KMD will reset the HW overflow bit, read the data from the HW buffer and return success to the UMD. This reading will make space for new reports.
72-
bool result;
73-
uint32_t retCode = 0;
7468
const auto wddm = device.getOsInterface()->getDriverModel()->as<NEO::Wddm>();
75-
if (!overflowReported) {
76-
size_t rawDataSizeTemp = 0u;
77-
result = wddm->perfReadEuStallStream(nullptr, &rawDataSizeTemp, &retCode);
78-
if (!result) {
79-
return ZE_RESULT_ERROR_UNKNOWN;
80-
}
81-
82-
if (retCode == GTDI_RET_BUFFER_OVERFLOW) {
83-
overflowReported = true;
84-
return ZE_RESULT_WARNING_DROPPED_DATA;
85-
}
86-
}
87-
overflowReported = false;
88-
result = wddm->perfReadEuStallStream(pRawData, pRawDataSize, &retCode);
69+
bool result = wddm->perfReadEuStallStream(pRawData, pRawDataSize);
70+
8971
return result ? ZE_RESULT_SUCCESS : ZE_RESULT_ERROR_UNKNOWN;
9072
}
9173

@@ -109,9 +91,8 @@ uint32_t MetricIpSamplingWindowsImp::getUnitReportSize() {
10991

11092
bool MetricIpSamplingWindowsImp::isNReportsAvailable() {
11193
size_t bytesAvailable = 0u;
112-
uint32_t retCode = 0;
11394
const auto wddm = device.getOsInterface()->getDriverModel()->as<NEO::Wddm>();
114-
bool result = wddm->perfReadEuStallStream(nullptr, &bytesAvailable, &retCode);
95+
bool result = wddm->perfReadEuStallStream(nullptr, &bytesAvailable);
11596
if (!result) {
11697
METRICS_LOG_ERR("wddm perfReadEuStallStream() call failed.");
11798
return false;

level_zero/tools/test/unit_tests/sources/metrics/windows/test_metric_ip_sampling.cpp

Lines changed: 4 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenPerfDisableEuStallStreamFailsW
107107
}
108108

109109
HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenReadSucceedsWhenReadDataIsCalledThenReturnSuccess, IsXe2HpgCore) {
110-
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
110+
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize) -> bool {
111111
return true;
112112
});
113113
uint8_t pRawData = 0u;
@@ -116,57 +116,14 @@ HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenReadSucceedsWhenReadDataIsCall
116116
}
117117

118118
HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenPerfReadEuStallStreamFailsWhenReadDataIsCalledThenReturnFailure, IsXe2HpgCore) {
119-
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
119+
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize) -> bool {
120120
return false;
121121
});
122122
uint8_t pRawData = 0u;
123123
size_t pRawDataSize = 0;
124124
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_ERROR_UNKNOWN);
125125
}
126126

127-
HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenPerfReadEuStallStreamOverflowsWhenReadDataIsCalledThenReturnCorrectOverflowStatus, IsXe2HpgCore) {
128-
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
129-
*pOutRetCode = 13; // GTDI_RET_BUFFER_OVERFLOW
130-
return true;
131-
});
132-
uint8_t pRawData = 0u;
133-
size_t pRawDataSize = 0;
134-
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_WARNING_DROPPED_DATA);
135-
}
136-
137-
HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenPerfReadEuStallStreamOverflowsWhenReadDataIsCalledTwiceThenCorrectReturnStatusAreReturned, IsXe2HpgCore) {
138-
static bool overflowRetuned = false;
139-
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
140-
if (!overflowRetuned) {
141-
overflowRetuned = true;
142-
*pOutRetCode = 13; // GTDI_RET_BUFFER_OVERFLOW
143-
}
144-
return true;
145-
});
146-
uint8_t pRawData = 0u;
147-
size_t pRawDataSize = 0;
148-
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_WARNING_DROPPED_DATA);
149-
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_SUCCESS);
150-
overflowRetuned = false;
151-
}
152-
153-
HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenPerfReadEuStallStreamOverflowsWhenReadDataIsCalledTwiceAndReadDataFailsOnScondCallThenCorrectReturnStatusAreReturned, IsXe2HpgCore) {
154-
static bool overflowRetuned = false;
155-
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
156-
if (!overflowRetuned) {
157-
overflowRetuned = true;
158-
*pOutRetCode = 13; // GTDI_RET_BUFFER_OVERFLOW
159-
return true;
160-
}
161-
return false;
162-
});
163-
uint8_t pRawData = 0u;
164-
size_t pRawDataSize = 0;
165-
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_WARNING_DROPPED_DATA);
166-
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_ERROR_UNKNOWN);
167-
overflowRetuned = false;
168-
}
169-
170127
HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, WhenGetRequiredBufferSizeIsCalledThenCorrectSizeIsReturned, IsXe2HpgCore) {
171128
constexpr uint32_t unitReportSize = 64;
172129
EXPECT_EQ(metricIpSamplingOsInterface->getRequiredBufferSize(10), unitReportSize * 10);
@@ -179,7 +136,7 @@ HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, WhenisNReportsAvailableIsCalledAndE
179136
VariableBackup<decltype(NEO::pPerfOpenEuStallStream)> mockPerfOpenEuStallStream(&NEO::pPerfOpenEuStallStream, [](uint32_t sampleRate, uint32_t minBufferSize) -> bool {
180137
return true;
181138
});
182-
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
139+
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize) -> bool {
183140
*pRawDataSize = 64u;
184141
return true;
185142
});
@@ -199,7 +156,7 @@ HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, WhenisNReportsAvailableIsCalledAndE
199156
VariableBackup<decltype(NEO::pPerfOpenEuStallStream)> mockPerfOpenEuStallStream(&NEO::pPerfOpenEuStallStream, [](uint32_t sampleRate, uint32_t minBufferSize) -> bool {
200157
return true;
201158
});
202-
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
159+
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize) -> bool {
203160
*pRawDataSize = 192u;
204161
return true;
205162
});

shared/source/os_interface/windows/wddm/perf_wddm.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ bool Wddm::perfOpenEuStallStream(uint32_t sampleRate, uint32_t minBufferSize) {
1313
return false;
1414
}
1515

16-
bool Wddm::perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) {
16+
bool Wddm::perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize) {
1717
return false;
1818
}
1919

shared/source/os_interface/windows/wddm/wddm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ class Wddm : public DriverModel {
201201

202202
MOCKABLE_VIRTUAL bool perfOpenEuStallStream(uint32_t sampleRate, uint32_t minBufferSize);
203203
MOCKABLE_VIRTUAL bool perfDisableEuStallStream();
204-
MOCKABLE_VIRTUAL bool perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode);
204+
MOCKABLE_VIRTUAL bool perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize);
205205

206206
PhysicalDevicePciBusInfo getPciBusInfo() const override;
207207

shared/test/common/mocks/mock_wddm.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ NTSTATUS(*pCallEscape)
2929
uint32_t (*pGetTimestampFrequency)() = nullptr;
3030
bool (*pPerfOpenEuStallStream)(uint32_t sampleRate, uint32_t minBufferSize) = nullptr;
3131
bool (*pPerfDisableEuStallStream)() = nullptr;
32-
bool (*pPerfReadEuStallStream)(uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) = nullptr;
32+
bool (*pPerfReadEuStallStream)(uint8_t *pRawData, size_t *pRawDataSize) = nullptr;
3333
} // namespace NEO
3434

3535
struct MockHwDeviceId : public HwDeviceIdWddm {
@@ -385,11 +385,11 @@ bool WddmMock::perfDisableEuStallStream() {
385385
return Wddm::perfDisableEuStallStream();
386386
}
387387

388-
bool WddmMock::perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) {
388+
bool WddmMock::perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize) {
389389
if (pPerfReadEuStallStream != nullptr) {
390-
return pPerfReadEuStallStream(pRawData, pRawDataSize, pOutRetCode);
390+
return pPerfReadEuStallStream(pRawData, pRawDataSize);
391391
}
392-
return Wddm::perfReadEuStallStream(pRawData, pRawDataSize, pOutRetCode);
392+
return Wddm::perfReadEuStallStream(pRawData, pRawDataSize);
393393
}
394394

395395
uint32_t WddmMock::getTimestampFrequency() const {

shared/test/common/mocks/mock_wddm.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ extern NTSTATUS (*pCallEscape)(D3DKMT_ESCAPE &escapeCommand);
2626
extern uint32_t (*pGetTimestampFrequency)();
2727
extern bool (*pPerfOpenEuStallStream)(uint32_t sampleRate, uint32_t minBufferSize);
2828
extern bool (*pPerfDisableEuStallStream)();
29-
extern bool (*pPerfReadEuStallStream)(uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode);
29+
extern bool (*pPerfReadEuStallStream)(uint8_t *pRawData, size_t *pRawDataSize);
3030

3131
class GraphicsAllocation;
3232

@@ -155,7 +155,7 @@ class WddmMock : public Wddm {
155155
uint32_t getTimestampFrequency() const override;
156156
bool perfOpenEuStallStream(uint32_t sampleRate, uint32_t minBufferSize) override;
157157
bool perfDisableEuStallStream() override;
158-
bool perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) override;
158+
bool perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize) override;
159159

160160
WddmMockHelpers::MakeResidentCall makeResidentResult;
161161
WddmMockHelpers::CallResult evictResult;

shared/test/unit_test/os_interface/windows/wddm_perf_tests.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@ TEST_F(WddmPerfTests, givenCorrectArgumentsWhenPerfOpenEuStallStreamIsCalledThen
2020
}
2121

2222
TEST_F(WddmPerfTests, givenCorrectArgumentsWhenPerfReadEuStallStreamIsCalledThenReturnFailure) {
23-
uint8_t rawData = 0u;
24-
size_t rawDataSize = 0;
25-
uint32_t outRetCode = 0;
26-
EXPECT_FALSE(wddm->perfReadEuStallStream(&rawData, &rawDataSize, &outRetCode));
23+
uint8_t pRawData = 0u;
24+
size_t pRawDataSize = 0;
25+
EXPECT_FALSE(wddm->perfReadEuStallStream(&pRawData, &pRawDataSize));
2726
}
2827

2928
TEST_F(WddmPerfTests, givenCorrectArgumentsWhenPerfDisableEuStallStreamIsCalledThenReturnFailure) {

0 commit comments

Comments
 (0)