mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-07 21:27:04 +08:00
refactor: Refactor user fence setup logic
Signed-off-by: Bellekallu Rajkiran <bellekallu.rajkiran@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
b7d1c32edd
commit
4573511966
@@ -1628,8 +1628,7 @@ int changeBufferObjectBinding(Drm *drm, OsContext *osContext, uint32_t vmHandleI
|
||||
VmBindExtUserFenceT vmBindExtUserFence{};
|
||||
bool incrementFenceValue = false;
|
||||
|
||||
if ((ioctlHelper->isWaitBeforeBindRequired(bind) && drm->useVMBindImmediate()) || guaranteePagingFence) {
|
||||
|
||||
if ((ioctlHelper->requiresUserFenceSetup(bind) && drm->useVMBindImmediate()) || guaranteePagingFence) {
|
||||
lock = drm->lockBindFenceMutex();
|
||||
auto nextExtension = vmBind.extensions;
|
||||
incrementFenceValue = true;
|
||||
@@ -1653,7 +1652,6 @@ int changeBufferObjectBinding(Drm *drm, OsContext *osContext, uint32_t vmHandleI
|
||||
}
|
||||
|
||||
if (incrementFenceValue) {
|
||||
|
||||
auto osContextLinux = static_cast<OsContextLinux *>(osContext);
|
||||
std::pair<uint64_t, uint64_t> fenceAddressAndValToWait = osContextLinux->getFenceAddressAndValToWait(vmHandleId, true);
|
||||
if (drm->isPerContextVMRequired()) {
|
||||
@@ -1668,14 +1666,12 @@ int changeBufferObjectBinding(Drm *drm, OsContext *osContext, uint32_t vmHandleI
|
||||
const auto fenceValToWait = fenceAddressAndValToWait.second;
|
||||
|
||||
if (fenceAddressToWait != 0u) {
|
||||
|
||||
bool waitOnUserFenceAfterBindAndUnbind = false;
|
||||
if (debugManager.flags.EnableWaitOnUserFenceAfterBindAndUnbind.get() != -1) {
|
||||
waitOnUserFenceAfterBindAndUnbind = !!debugManager.flags.EnableWaitOnUserFenceAfterBindAndUnbind.get();
|
||||
}
|
||||
|
||||
if ((ioctlHelper->isWaitBeforeBindRequired(bind) && waitOnUserFenceAfterBindAndUnbind && drm->useVMBindImmediate()) || guaranteePagingFence) {
|
||||
|
||||
if ((waitOnUserFenceAfterBindAndUnbind && drm->useVMBindImmediate()) || guaranteePagingFence) {
|
||||
drm->waitUserFence(0u, fenceAddressToWait, fenceValToWait, Drm::ValueWidth::u64, -1, ioctlHelper->getWaitUserFenceSoftFlag(), false, NEO::InterruptId::notUsed, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,7 +194,7 @@ class IoctlHelper {
|
||||
virtual std::string getFileForMaxGpuFrequencyOfSubDevice(int tileId) const = 0;
|
||||
virtual std::string getFileForMaxMemoryFrequencyOfSubDevice(int tileId) const = 0;
|
||||
virtual bool getFabricLatency(uint32_t fabricId, uint32_t &latency, uint32_t &bandwidth) = 0;
|
||||
virtual bool isWaitBeforeBindRequired(bool bind) const = 0;
|
||||
virtual bool requiresUserFenceSetup(bool bind) const = 0;
|
||||
virtual void *pciBarrierMmap() { return nullptr; };
|
||||
virtual void setupIpVersion();
|
||||
virtual bool isImmediateVmBindRequired() const { return false; }
|
||||
@@ -366,7 +366,7 @@ class IoctlHelperUpstream : public IoctlHelperI915 {
|
||||
int getDrmParamValue(DrmParam drmParam) const override;
|
||||
std::string getIoctlString(DrmIoctl ioctlRequest) const override;
|
||||
bool getFabricLatency(uint32_t fabricId, uint32_t &latency, uint32_t &bandwidth) override;
|
||||
bool isWaitBeforeBindRequired(bool bind) const override;
|
||||
bool requiresUserFenceSetup(bool bind) const override;
|
||||
|
||||
protected:
|
||||
MOCKABLE_VIRTUAL void detectExtSetPatSupport();
|
||||
@@ -444,7 +444,7 @@ class IoctlHelperPrelim20 : public IoctlHelperI915 {
|
||||
std::string getIoctlString(DrmIoctl ioctlRequest) const override;
|
||||
bool checkIfIoctlReinvokeRequired(int error, DrmIoctl ioctlRequest) const override;
|
||||
bool getFabricLatency(uint32_t fabricId, uint32_t &latency, uint32_t &bandwidth) override;
|
||||
bool isWaitBeforeBindRequired(bool bind) const override;
|
||||
bool requiresUserFenceSetup(bool bind) const override;
|
||||
void *pciBarrierMmap() override;
|
||||
void setupIpVersion() override;
|
||||
bool getTopologyDataAndMap(HardwareInfo &hwInfo, DrmQueryTopologyData &topologyData, TopologyMap &topologyMap) override;
|
||||
|
||||
@@ -1037,12 +1037,11 @@ bool IoctlHelperPrelim20::getFabricLatency(uint32_t fabricId, uint32_t &latency,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IoctlHelperPrelim20::isWaitBeforeBindRequired(bool bind) const {
|
||||
bool IoctlHelperPrelim20::requiresUserFenceSetup(bool bind) const {
|
||||
bool userFenceOnUnbind = false;
|
||||
if (debugManager.flags.EnableUserFenceUponUnbind.get() != -1) {
|
||||
userFenceOnUnbind = !!debugManager.flags.EnableUserFenceUponUnbind.get();
|
||||
}
|
||||
|
||||
return (bind || userFenceOnUnbind);
|
||||
}
|
||||
|
||||
|
||||
@@ -311,11 +311,8 @@ bool IoctlHelperUpstream::getFabricLatency(uint32_t fabricId, uint32_t &latency,
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IoctlHelperUpstream::isWaitBeforeBindRequired(bool bind) const {
|
||||
bool userFenceOnUnbind = false;
|
||||
if (debugManager.flags.EnableUserFenceUponUnbind.get() != -1) {
|
||||
userFenceOnUnbind = !!debugManager.flags.EnableUserFenceUponUnbind.get();
|
||||
}
|
||||
return userFenceOnUnbind;
|
||||
bool IoctlHelperUpstream::requiresUserFenceSetup(bool bind) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -1799,7 +1799,7 @@ bool IoctlHelperXe::getFabricLatency(uint32_t fabricId, uint32_t &latency, uint3
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IoctlHelperXe::isWaitBeforeBindRequired(bool bind) const {
|
||||
bool IoctlHelperXe::requiresUserFenceSetup(bool bind) const {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ class IoctlHelperXe : public IoctlHelper {
|
||||
void configureCcsMode(std::vector<std::string> &files, const std::string expectedPrefix, uint32_t ccsMode,
|
||||
std::vector<std::tuple<std::string, uint32_t>> &deviceCcsModeVec) override;
|
||||
bool getFabricLatency(uint32_t fabricId, uint32_t &latency, uint32_t &bandwidth) override;
|
||||
bool isWaitBeforeBindRequired(bool bind) const override;
|
||||
bool requiresUserFenceSetup(bool bind) const override;
|
||||
std::unique_ptr<EngineInfo> createEngineInfo(bool isSysmanEnabled) override;
|
||||
std::unique_ptr<MemoryInfo> createMemoryInfo() override;
|
||||
size_t getLocalMemoryRegionsSize(const MemoryInfo *memoryInfo, uint32_t subDevicesCount, uint32_t deviceBitfield) const override;
|
||||
|
||||
@@ -30,7 +30,7 @@ class MockIoctlHelper : public IoctlHelperPrelim20 {
|
||||
using IoctlHelperPrelim20::IoctlHelperPrelim20;
|
||||
ADDMETHOD_CONST_NOBASE(isImmediateVmBindRequired, bool, false, ());
|
||||
ADDMETHOD_CONST_NOBASE(getIoctlRequestValue, unsigned int, 1234u, (DrmIoctl));
|
||||
ADDMETHOD_CONST_NOBASE(isWaitBeforeBindRequired, bool, false, (bool));
|
||||
ADDMETHOD_CONST_NOBASE(requiresUserFenceSetup, bool, false, (bool));
|
||||
ADDMETHOD_CONST_NOBASE(makeResidentBeforeLockNeeded, bool, false, ());
|
||||
|
||||
ADDMETHOD_NOBASE(vmBind, int, 0, (const VmBindParams &));
|
||||
|
||||
@@ -630,7 +630,7 @@ TEST(DrmBufferObject, givenDrmWhenBindOperationFailsThenFenceValueNotGrow) {
|
||||
drm->isVMBindImmediateSupported = true;
|
||||
auto ioctlHelper = std::make_unique<MockIoctlHelper>(*drm);
|
||||
ioctlHelper->vmBindResult = -1;
|
||||
ioctlHelper->isWaitBeforeBindRequiredResult = true;
|
||||
ioctlHelper->requiresUserFenceSetupResult = true;
|
||||
drm->ioctlHelper.reset(ioctlHelper.release());
|
||||
|
||||
executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr<DriverModel>(drm));
|
||||
@@ -665,7 +665,7 @@ TEST(DrmBufferObject, givenDrmWhenBindOperationSucceedsThenFenceValueGrow) {
|
||||
drm->requirePerContextVM = false;
|
||||
drm->isVMBindImmediateSupported = true;
|
||||
auto ioctlHelper = std::make_unique<MockIoctlHelper>(*drm);
|
||||
ioctlHelper->isWaitBeforeBindRequiredResult = true;
|
||||
ioctlHelper->requiresUserFenceSetupResult = true;
|
||||
drm->ioctlHelper.reset(ioctlHelper.release());
|
||||
|
||||
executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr<DriverModel>(drm));
|
||||
@@ -693,7 +693,7 @@ class DrmBufferObjectBindTestWithForcePagingFenceSucceeds : public ::testing::Te
|
||||
TEST_P(DrmBufferObjectBindTestWithForcePagingFenceSucceeds, givenDrmWhenBindOperationSucceedsWithForcePagingFenceThenFenceValueGrow) {
|
||||
int32_t waitOnUserFenceAfterBindAndUnbindVal = std::get<0>(GetParam());
|
||||
bool isVMBindImmediateSupportedVal = std::get<1>(GetParam());
|
||||
bool isWaitBeforeBindRequiredResultVal = std::get<2>(GetParam());
|
||||
bool requiresUserFenceSetupResultVal = std::get<2>(GetParam());
|
||||
|
||||
DebugManagerStateRestore restorer;
|
||||
debugManager.flags.EnableWaitOnUserFenceAfterBindAndUnbind.set(waitOnUserFenceAfterBindAndUnbindVal);
|
||||
@@ -723,7 +723,7 @@ TEST_P(DrmBufferObjectBindTestWithForcePagingFenceSucceeds, givenDrmWhenBindOper
|
||||
drm->requirePerContextVM = false;
|
||||
drm->isVMBindImmediateSupported = isVMBindImmediateSupportedVal;
|
||||
auto ioctlHelper = std::make_unique<MockIoctlHelper>(*drm);
|
||||
ioctlHelper->isWaitBeforeBindRequiredResult = isWaitBeforeBindRequiredResultVal;
|
||||
ioctlHelper->requiresUserFenceSetupResult = requiresUserFenceSetupResultVal;
|
||||
drm->ioctlHelper.reset(ioctlHelper.release());
|
||||
|
||||
auto osContext = new OsContextLinux(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor());
|
||||
@@ -761,7 +761,7 @@ class DrmBufferObjectBindTestWithForcePagingFenceFalseWaitUserFenceNotCalled : p
|
||||
TEST_P(DrmBufferObjectBindTestWithForcePagingFenceFalseWaitUserFenceNotCalled, givenDrmWhenBindOperationSucceedsWithForcePagingFenceFalseThenFenceValueDoesNotGrow) {
|
||||
int32_t waitOnUserFenceAfterBindAndUnbindVal = std::get<0>(GetParam());
|
||||
bool isVMBindImmediateSupportedVal = std::get<1>(GetParam());
|
||||
bool isWaitBeforeBindRequiredResultVal = std::get<2>(GetParam());
|
||||
bool requiresUserFenceSetupResultVal = std::get<2>(GetParam());
|
||||
|
||||
DebugManagerStateRestore restorer;
|
||||
debugManager.flags.EnableWaitOnUserFenceAfterBindAndUnbind.set(waitOnUserFenceAfterBindAndUnbindVal);
|
||||
@@ -791,7 +791,7 @@ TEST_P(DrmBufferObjectBindTestWithForcePagingFenceFalseWaitUserFenceNotCalled, g
|
||||
drm->requirePerContextVM = false;
|
||||
drm->isVMBindImmediateSupported = isVMBindImmediateSupportedVal;
|
||||
auto ioctlHelper = std::make_unique<MockIoctlHelper>(*drm);
|
||||
ioctlHelper->isWaitBeforeBindRequiredResult = isWaitBeforeBindRequiredResultVal;
|
||||
ioctlHelper->requiresUserFenceSetupResult = requiresUserFenceSetupResultVal;
|
||||
drm->ioctlHelper.reset(ioctlHelper.release());
|
||||
|
||||
auto osContext = new OsContextLinux(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor());
|
||||
@@ -858,7 +858,7 @@ TEST(DrmBufferObject, givenDrmWhenBindOperationSucceedsWithForcePagingFenceWithD
|
||||
// Making the useVMBindImmediate() false
|
||||
drm->isVMBindImmediateSupported = false;
|
||||
auto ioctlHelper = std::make_unique<MockIoctlHelper>(*drm);
|
||||
ioctlHelper->isWaitBeforeBindRequiredResult = true;
|
||||
ioctlHelper->requiresUserFenceSetupResult = true;
|
||||
drm->ioctlHelper.reset(ioctlHelper.release());
|
||||
|
||||
auto osContext = new OsContextLinux(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor());
|
||||
@@ -896,7 +896,7 @@ TEST(DrmBufferObject, givenDrmWhenUnBindOperationFailsThenFenceValueNotGrow) {
|
||||
drm->isVMBindImmediateSupported = true;
|
||||
auto ioctlHelper = std::make_unique<MockIoctlHelper>(*drm);
|
||||
ioctlHelper->vmUnbindResult = -1;
|
||||
ioctlHelper->isWaitBeforeBindRequiredResult = true;
|
||||
ioctlHelper->requiresUserFenceSetupResult = true;
|
||||
drm->ioctlHelper.reset(ioctlHelper.release());
|
||||
|
||||
executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr<DriverModel>(drm));
|
||||
@@ -927,7 +927,7 @@ TEST(DrmBufferObject, givenDrmWhenUnBindOperationSucceedsThenFenceValueGrow) {
|
||||
drm->requirePerContextVM = false;
|
||||
drm->isVMBindImmediateSupported = true;
|
||||
auto ioctlHelper = std::make_unique<MockIoctlHelper>(*drm);
|
||||
ioctlHelper->isWaitBeforeBindRequiredResult = true;
|
||||
ioctlHelper->requiresUserFenceSetupResult = true;
|
||||
drm->ioctlHelper.reset(ioctlHelper.release());
|
||||
|
||||
executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr<DriverModel>(drm));
|
||||
@@ -962,7 +962,7 @@ TEST(DrmBufferObject, givenDrmWhenUnBindOperationSucceedsAndForceUserFenceUponUn
|
||||
drm->requirePerContextVM = false;
|
||||
drm->isVMBindImmediateSupported = true;
|
||||
auto ioctlHelper = std::make_unique<MockIoctlHelper>(*drm);
|
||||
ioctlHelper->isWaitBeforeBindRequiredResult = true;
|
||||
ioctlHelper->requiresUserFenceSetupResult = true;
|
||||
drm->ioctlHelper.reset(ioctlHelper.release());
|
||||
|
||||
executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr<DriverModel>(drm));
|
||||
@@ -1011,7 +1011,7 @@ TEST(DrmBufferObject, givenDrmWhenUnBindOperationSucceedsAndForceFenceWaitThenFe
|
||||
drm->requirePerContextVM = false;
|
||||
drm->isVMBindImmediateSupported = true;
|
||||
auto ioctlHelper = std::make_unique<MockIoctlHelper>(*drm);
|
||||
ioctlHelper->isWaitBeforeBindRequiredResult = true;
|
||||
ioctlHelper->requiresUserFenceSetupResult = true;
|
||||
drm->ioctlHelper.reset(ioctlHelper.release());
|
||||
|
||||
auto osContext = new OsContextLinux(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor());
|
||||
@@ -1064,7 +1064,7 @@ TEST(DrmBufferObject, givenDrmWhenUnBindOperationSucceedsWaitBeforeBindFalseAndF
|
||||
drm->requirePerContextVM = false;
|
||||
drm->isVMBindImmediateSupported = true;
|
||||
auto ioctlHelper = std::make_unique<MockIoctlHelper>(*drm);
|
||||
ioctlHelper->isWaitBeforeBindRequiredResult = false;
|
||||
ioctlHelper->requiresUserFenceSetupResult = false;
|
||||
drm->ioctlHelper.reset(ioctlHelper.release());
|
||||
|
||||
auto osContext = new OsContextLinux(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor());
|
||||
@@ -1117,7 +1117,7 @@ TEST(DrmBufferObject, givenDrmWhenUnBindOperationSucceedsWaitBeforeBindTrueAndFo
|
||||
drm->requirePerContextVM = false;
|
||||
drm->isVMBindImmediateSupported = false;
|
||||
auto ioctlHelper = std::make_unique<MockIoctlHelper>(*drm);
|
||||
ioctlHelper->isWaitBeforeBindRequiredResult = true;
|
||||
ioctlHelper->requiresUserFenceSetupResult = true;
|
||||
drm->ioctlHelper.reset(ioctlHelper.release());
|
||||
|
||||
auto osContext = new OsContextLinux(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor());
|
||||
|
||||
@@ -812,8 +812,8 @@ TEST_F(IoctlPrelimHelperTests, whenChangingBufferBindingThenWaitIsNeededOnlyBefo
|
||||
|
||||
IoctlHelperPrelim20 ioctlHelper{*drm};
|
||||
|
||||
EXPECT_TRUE(ioctlHelper.isWaitBeforeBindRequired(true));
|
||||
EXPECT_FALSE(ioctlHelper.isWaitBeforeBindRequired(false));
|
||||
EXPECT_TRUE(ioctlHelper.requiresUserFenceSetup(true));
|
||||
EXPECT_FALSE(ioctlHelper.requiresUserFenceSetup(false));
|
||||
}
|
||||
|
||||
TEST_F(IoctlPrelimHelperTests, whenChangingBufferBindingAndForcingFenceWaitThenCallReturnsTrueForBindAndUnbind) {
|
||||
@@ -824,8 +824,8 @@ TEST_F(IoctlPrelimHelperTests, whenChangingBufferBindingAndForcingFenceWaitThenC
|
||||
IoctlHelperPrelim20 ioctlHelper{*drm};
|
||||
|
||||
debugManager.flags.EnableUserFenceUponUnbind.set(1);
|
||||
EXPECT_TRUE(ioctlHelper.isWaitBeforeBindRequired(true));
|
||||
EXPECT_TRUE(ioctlHelper.isWaitBeforeBindRequired(false));
|
||||
EXPECT_TRUE(ioctlHelper.requiresUserFenceSetup(true));
|
||||
EXPECT_TRUE(ioctlHelper.requiresUserFenceSetup(false));
|
||||
}
|
||||
|
||||
TEST_F(IoctlPrelimHelperTests, whenChangingBufferBindingAndNotForcingFenceWaitThenCallReturnsTrueForBindOnly) {
|
||||
@@ -836,8 +836,8 @@ TEST_F(IoctlPrelimHelperTests, whenChangingBufferBindingAndNotForcingFenceWaitTh
|
||||
IoctlHelperPrelim20 ioctlHelper{*drm};
|
||||
|
||||
debugManager.flags.EnableUserFenceUponUnbind.set(0);
|
||||
EXPECT_TRUE(ioctlHelper.isWaitBeforeBindRequired(true));
|
||||
EXPECT_FALSE(ioctlHelper.isWaitBeforeBindRequired(false));
|
||||
EXPECT_TRUE(ioctlHelper.requiresUserFenceSetup(true));
|
||||
EXPECT_FALSE(ioctlHelper.requiresUserFenceSetup(false));
|
||||
}
|
||||
|
||||
TEST_F(IoctlPrelimHelperTests, whenGettingPreferredLocationRegionThenReturnCorrectMemoryClassAndInstance) {
|
||||
|
||||
@@ -148,11 +148,11 @@ TEST(IoctlHelperUpstreamTest, whenChangingBufferBindingThenWaitIsNeverNeeded) {
|
||||
|
||||
IoctlHelperUpstream ioctlHelper{*drm};
|
||||
|
||||
EXPECT_FALSE(ioctlHelper.isWaitBeforeBindRequired(true));
|
||||
EXPECT_FALSE(ioctlHelper.isWaitBeforeBindRequired(false));
|
||||
EXPECT_FALSE(ioctlHelper.requiresUserFenceSetup(true));
|
||||
EXPECT_FALSE(ioctlHelper.requiresUserFenceSetup(false));
|
||||
}
|
||||
|
||||
TEST(IoctlHelperUpstreamTest, whenChangingBufferBindingThenWaitIsAddedWhenForced) {
|
||||
TEST(IoctlHelperUpstreamTest, whenChangingBufferBindingThenRequiresUserFenceSetupIsFalse) {
|
||||
DebugManagerStateRestore restorer;
|
||||
MockExecutionEnvironment executionEnvironment{};
|
||||
std::unique_ptr<Drm> drm{Drm::create(std::make_unique<HwDeviceIdDrm>(0, ""), *executionEnvironment.rootDeviceEnvironments[0])};
|
||||
@@ -160,8 +160,8 @@ TEST(IoctlHelperUpstreamTest, whenChangingBufferBindingThenWaitIsAddedWhenForced
|
||||
IoctlHelperUpstream ioctlHelper{*drm};
|
||||
|
||||
debugManager.flags.EnableUserFenceUponUnbind.set(1);
|
||||
EXPECT_TRUE(ioctlHelper.isWaitBeforeBindRequired(true));
|
||||
EXPECT_TRUE(ioctlHelper.isWaitBeforeBindRequired(false));
|
||||
EXPECT_FALSE(ioctlHelper.requiresUserFenceSetup(true));
|
||||
EXPECT_FALSE(ioctlHelper.requiresUserFenceSetup(false));
|
||||
}
|
||||
|
||||
TEST(IoctlHelperUpstreamTest, whenGettingIoctlRequestStringThenProperStringIsReturned) {
|
||||
|
||||
@@ -78,8 +78,8 @@ TEST_F(IoctlHelperXeTest, whenChangingBufferBindingThenWaitIsNeededAlways) {
|
||||
|
||||
IoctlHelperXe ioctlHelper{*drm};
|
||||
|
||||
EXPECT_TRUE(ioctlHelper.isWaitBeforeBindRequired(true));
|
||||
EXPECT_TRUE(ioctlHelper.isWaitBeforeBindRequired(false));
|
||||
EXPECT_TRUE(ioctlHelper.requiresUserFenceSetup(true));
|
||||
EXPECT_TRUE(ioctlHelper.requiresUserFenceSetup(false));
|
||||
}
|
||||
|
||||
struct GemCreateExtFixture {
|
||||
|
||||
Reference in New Issue
Block a user