refactor: Do not use api version when calculating driver version

Previous design allowed driver version to be no greater than 16-bit.
New design allows driver version to use (almost) whole 32-bit size limit.

Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
Filip Hazubski
2023-02-14 14:27:55 +00:00
committed by Compute-Runtime-Automation
parent 89ddfbb83c
commit 4b7782d2ab
3 changed files with 10 additions and 34 deletions

View File

@@ -106,13 +106,8 @@ ze_result_t DriverHandleImp::getApiVersion(ze_api_version_t *version) {
}
ze_result_t DriverHandleImp::getProperties(ze_driver_properties_t *properties) {
uint32_t versionMajor = static_cast<uint32_t>(strtoul(L0_PROJECT_VERSION_MAJOR, NULL, 10));
uint32_t versionMinor = static_cast<uint32_t>(strtoul(L0_PROJECT_VERSION_MINOR, NULL, 10));
uint32_t versionBuild = static_cast<uint32_t>(strtoul(NEO_VERSION_BUILD, NULL, 10));
properties->driverVersion = ((versionMajor << 24) & 0xFF000000) |
((versionMinor << 16) & 0x00FF0000) |
(versionBuild & 0x0000FFFF);
properties->driverVersion = DriverHandleImp::initialDriverVersionValue + versionBuild;
uint64_t uniqueId = (properties->driverVersion) | (uuidTimestamp & 0xFFFFFFFF00000000);
memcpy_s(properties->uuid.id, sizeof(uniqueId), &uniqueId, sizeof(uniqueId));

View File

@@ -25,6 +25,8 @@ struct DriverHandleImp : public DriverHandle {
~DriverHandleImp() override;
DriverHandleImp();
static constexpr uint32_t initialDriverVersionValue = 0x01030000;
ze_result_t createContext(const ze_context_desc_t *desc,
uint32_t numDevices,
ze_device_handle_t *phDevices,

View File

@@ -98,13 +98,8 @@ TEST_F(DriverVersionTest, WhenGettingDriverVersionThenExpectedDriverVersionIsRet
ze_result_t res = driverHandle->getProperties(&properties);
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
uint32_t versionMajor = static_cast<uint32_t>((properties.driverVersion & 0xFF000000) >> 24);
uint32_t versionMinor = static_cast<uint32_t>((properties.driverVersion & 0x00FF0000) >> 16);
uint32_t versionBuild = static_cast<uint32_t>(properties.driverVersion & 0x0000FFFF);
EXPECT_EQ(static_cast<uint32_t>(strtoul(L0_PROJECT_VERSION_MAJOR, NULL, 10)), versionMajor);
EXPECT_EQ(static_cast<uint32_t>(strtoul(L0_PROJECT_VERSION_MINOR, NULL, 10)), versionMinor);
EXPECT_EQ(static_cast<uint32_t>(strtoul(NEO_VERSION_BUILD, NULL, 10)), versionBuild);
auto expectedDriverVersion = static_cast<uint32_t>(DriverHandleImp::initialDriverVersionValue + strtoul(NEO_VERSION_BUILD, NULL, 10));
EXPECT_EQ(expectedDriverVersion, properties.driverVersion);
}
TEST_F(DriverVersionTest, givenCallToGetDriverPropertiesThenUuidIsSet) {
@@ -116,15 +111,12 @@ TEST_F(DriverVersionTest, givenCallToGetDriverPropertiesThenUuidIsSet) {
uint64_t uuid = 0u;
memcpy_s(&uuid, sizeof(uuid), properties.uuid.id, sizeof(uuid));
uint32_t uniqueId = static_cast<uint32_t>((uuid & 0xFFFFFFFF00000000) >> 32);
uint32_t versionMajor = static_cast<uint32_t>((uuid & 0xFF000000) >> 24);
uint32_t versionMinor = static_cast<uint32_t>((uuid & 0x00FF0000) >> 16);
uint32_t versionBuild = static_cast<uint32_t>(uuid & 0x0000FFFF);
auto uniqueId = static_cast<uint32_t>((uuid & 0xFFFFFFFF00000000) >> 32);
EXPECT_NE(0u, uniqueId);
EXPECT_EQ(static_cast<uint32_t>(strtoul(L0_PROJECT_VERSION_MAJOR, NULL, 10)), versionMajor);
EXPECT_EQ(static_cast<uint32_t>(strtoul(L0_PROJECT_VERSION_MINOR, NULL, 10)), versionMinor);
EXPECT_EQ(static_cast<uint32_t>(strtoul(NEO_VERSION_BUILD, NULL, 10)), versionBuild);
auto driverVersion = static_cast<uint32_t>(uuid & 0xFFFFFFFF);
auto expectedDriverVersion = static_cast<uint32_t>(DriverHandleImp::initialDriverVersionValue + strtoul(NEO_VERSION_BUILD, NULL, 10));
EXPECT_EQ(expectedDriverVersion, driverVersion);
}
TEST_F(DriverVersionTest, whenCallingGetDriverPropertiesRepeatedlyThenTheSameUuidIsReturned) {
@@ -133,19 +125,6 @@ TEST_F(DriverVersionTest, whenCallingGetDriverPropertiesRepeatedlyThenTheSameUui
ze_result_t res = driverHandle->getProperties(&properties);
EXPECT_EQ(ZE_RESULT_SUCCESS, res);
uint64_t uuid = 0u;
memcpy_s(&uuid, sizeof(uuid), properties.uuid.id, sizeof(uuid));
uint32_t uniqueId = static_cast<uint32_t>((uuid & 0xFFFFFFFF00000000) >> 32);
uint32_t versionMajor = static_cast<uint32_t>((uuid & 0xFF000000) >> 24);
uint32_t versionMinor = static_cast<uint32_t>((uuid & 0x00FF0000) >> 16);
uint32_t versionBuild = static_cast<uint32_t>(uuid & 0x0000FFFF);
EXPECT_NE(0u, uniqueId);
EXPECT_EQ(static_cast<uint32_t>(strtoul(L0_PROJECT_VERSION_MAJOR, NULL, 10)), versionMajor);
EXPECT_EQ(static_cast<uint32_t>(strtoul(L0_PROJECT_VERSION_MINOR, NULL, 10)), versionMinor);
EXPECT_EQ(static_cast<uint32_t>(strtoul(NEO_VERSION_BUILD, NULL, 10)), versionBuild);
for (uint32_t i = 0; i < 32; i++) {
ze_driver_properties_t newProperties;
res = driverHandle->getProperties(&newProperties);