Skip to content

Commit 70a7840

Browse files
Check if direct submission available once
Signed-off-by: Lukasz Jobczyk <[email protected]>
1 parent b6da647 commit 70a7840

File tree

5 files changed

+49
-14
lines changed

5 files changed

+49
-14
lines changed

opencl/test/unit_test/os_interface/linux/drm_command_stream_tests_1.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "shared/test/common/mocks/mock_gmm.h"
3131
#include "shared/test/common/mocks/mock_gmm_page_table_mngr.h"
3232
#include "shared/test/common/mocks/mock_host_ptr_manager.h"
33+
#include "shared/test/common/mocks/mock_os_context.h"
3334
#include "shared/test/common/mocks/mock_submissions_aggregator.h"
3435
#include "shared/test/common/test_macros/test.h"
3536

@@ -725,6 +726,7 @@ struct DrmCommandStreamDirectSubmissionTest : public DrmCommandStreamEnhancedTes
725726
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
726727
auto engineType = device->getDefaultEngine().osContext->getEngineType();
727728
hwInfo->capabilityTable.directSubmissionEngines.data[engineType].engineSupported = true;
729+
static_cast<MockOsContext *>(device->getDefaultEngine().osContext)->directSubmissionAvailableChecked = false;
728730
csr->initDirectSubmission(*device.get(), *device->getDefaultEngine().osContext);
729731
}
730732

shared/source/os_interface/os_context.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ bool OsContext::isDirectSubmissionAvailable(const HardwareInfo &hwInfo, bool &su
6666
enableDirectSubmission = DebugManager.flags.EnableDirectSubmission.get();
6767
}
6868

69-
if (enableDirectSubmission) {
69+
if (enableDirectSubmission && !directSubmissionAvailableChecked) {
7070
auto contextEngineType = this->getEngineType();
7171
const DirectSubmissionProperties &directSubmissionProperty =
7272
hwInfo.capabilityTable.directSubmissionEngines.data[contextEngineType];
@@ -95,9 +95,10 @@ bool OsContext::isDirectSubmissionAvailable(const HardwareInfo &hwInfo, bool &su
9595
this->setDirectSubmissionActive();
9696
}
9797

98-
return engineSupported && startDirect;
98+
this->directSubmissionAvailableChecked = true;
9999
}
100-
return false;
100+
101+
return this->directSubmissionActive;
101102
}
102103

103104
bool OsContext::checkDirectSubmissionSupportsEngine(const DirectSubmissionProperties &directSubmissionProperty, aub_stream::EngineType contextEngineType, bool &startOnInit, bool &startInContext) {

shared/source/os_interface/os_context.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ class OsContext : public ReferenceTrackedObject<OsContext> {
6767
const bool rootDevice = false;
6868
bool defaultContext = false;
6969
bool directSubmissionActive = false;
70+
bool directSubmissionAvailableChecked = false;
7071
std::once_flag contextInitializedFlag = {};
7172
bool contextInitialized = false;
7273
bool engineInstancedDevice = false;

shared/test/common/mocks/mock_os_context.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ namespace NEO {
1212
class MockOsContext : public OsContext {
1313
public:
1414
using OsContext::checkDirectSubmissionSupportsEngine;
15+
using OsContext::directSubmissionActive;
16+
using OsContext::directSubmissionAvailableChecked;
1517
using OsContext::engineType;
1618
using OsContext::engineUsage;
1719
using OsContext::getDeviceBitfield;

shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "shared/test/common/mocks/mock_csr.h"
2323
#include "shared/test/common/mocks/mock_execution_environment.h"
2424
#include "shared/test/common/mocks/mock_memory_manager.h"
25+
#include "shared/test/common/mocks/mock_os_context.h"
2526
#include "shared/test/common/mocks/ult_device_factory.h"
2627
#include "shared/test/common/test_macros/matchers.h"
2728
#include "shared/test/common/test_macros/test.h"
@@ -391,6 +392,7 @@ HWTEST_F(CommandStreamReceiverTest, givenUpdateTaskCountFromWaitWhenCheckTaskCou
391392
struct InitDirectSubmissionFixture {
392393
void SetUp() {
393394
DebugManager.flags.EnableDirectSubmission.set(1);
395+
DebugManager.flags.EnableGemCloseWorker.set(0);
394396
executionEnvironment = new MockExecutionEnvironment();
395397
DeviceFactory::prepareDeviceEnvironments(*executionEnvironment);
396398
VariableBackup<UltHwConfig> backup(&ultHwConfig);
@@ -423,6 +425,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionControllerEnabledWhenIni
423425

424426
osContext->ensureContextInitialized();
425427
osContext->setDefaultContext(true);
428+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
426429
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
427430
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
428431
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
@@ -450,6 +453,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionControllerDisabledWhenIn
450453

451454
osContext->ensureContextInitialized();
452455
osContext->setDefaultContext(true);
456+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
453457
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
454458
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
455459
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
@@ -469,6 +473,7 @@ HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnRcsThenExpectFea
469473
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
470474
osContext->ensureContextInitialized();
471475
osContext->setDefaultContext(true);
476+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
472477
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
473478
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
474479
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
@@ -481,6 +486,26 @@ HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnRcsThenExpectFea
481486
csr.reset();
482487
}
483488

489+
HWTEST_F(InitDirectSubmissionTest, givenCheckIfDirectSubmissionEnableWhenCallItMultipleTimesThenCheckDirectSubmissionEnablingConditionsOnce) {
490+
std::unique_ptr<OsContext> osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0,
491+
EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular},
492+
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
493+
osContext->ensureContextInitialized();
494+
osContext->setDefaultContext(true);
495+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
496+
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
497+
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
498+
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
499+
bool submitOnInit = false;
500+
501+
auto ret = osContext->isDirectSubmissionAvailable(*hwInfo, submitOnInit);
502+
EXPECT_TRUE(ret);
503+
504+
static_cast<MockOsContext *>(osContext.get())->directSubmissionActive = false;
505+
ret = osContext->isDirectSubmissionAvailable(*hwInfo, submitOnInit);
506+
EXPECT_FALSE(ret);
507+
}
508+
484509
template <class Type>
485510
class CommandStreamReceiverHwDirectSubmissionMock : public CommandStreamReceiverHw<Type> {
486511
public:
@@ -501,6 +526,7 @@ HWTEST_F(InitDirectSubmissionTest, whenCallInitDirectSubmissionAgainThenItIsNotR
501526
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
502527
osContext->ensureContextInitialized();
503528
osContext->setDefaultContext(true);
529+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
504530
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
505531
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
506532
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
@@ -527,6 +553,7 @@ HWTEST_F(InitDirectSubmissionTest, whenCallInitDirectSubmissionThenObtainLock) {
527553
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
528554
osContext->ensureContextInitialized();
529555
osContext->setDefaultContext(true);
556+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
530557
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
531558
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
532559
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
@@ -542,6 +569,8 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionEnabledWhenPlatformNotSu
542569
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
543570
osContext->ensureContextInitialized();
544571
osContext->setDefaultContext(true);
572+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
573+
static_cast<MockOsContext *>(osContext.get())->directSubmissionActive = false;
545574
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
546575
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = false;
547576
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].submitOnInit = false;
@@ -560,7 +589,7 @@ HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnBcsThenExpectFea
560589
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
561590
osContext->ensureContextInitialized();
562591
osContext->setDefaultContext(true);
563-
592+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
564593
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
565594
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_BCS].engineSupported = true;
566595
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_BCS].submitOnInit = false;
@@ -580,7 +609,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionEnabledWhenPlatformNotSu
580609
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
581610
osContext->ensureContextInitialized();
582611
osContext->setDefaultContext(true);
583-
612+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
584613
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
585614
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_BCS].engineSupported = false;
586615
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_BCS].submitOnInit = false;
@@ -600,7 +629,7 @@ HWTEST_F(InitDirectSubmissionTest, givenLowPriorityContextWhenDirectSubmissionDi
600629
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
601630
osContext->ensureContextInitialized();
602631
osContext->setDefaultContext(true);
603-
632+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
604633
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
605634
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
606635
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useLowPriority = false;
@@ -619,7 +648,7 @@ HWTEST_F(InitDirectSubmissionTest, givenLowPriorityContextWhenDirectSubmissionEn
619648
EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::LowPriority},
620649
PreemptionMode::ThreadGroup, device->getDeviceBitfield())));
621650
osContext->ensureContextInitialized();
622-
651+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
623652
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
624653
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
625654
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useLowPriority = true;
@@ -638,7 +667,7 @@ HWTEST_F(InitDirectSubmissionTest, givenInternalContextWhenDirectSubmissionDisab
638667
device->getDeviceBitfield())));
639668
osContext->ensureContextInitialized();
640669
osContext->setDefaultContext(true);
641-
670+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
642671
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
643672
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
644673
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useInternal = false;
@@ -657,7 +686,7 @@ HWTEST_F(InitDirectSubmissionTest, givenInternalContextWhenDirectSubmissionEnabl
657686
EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup,
658687
device->getDeviceBitfield())));
659688
osContext->ensureContextInitialized();
660-
689+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
661690
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
662691
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
663692
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useInternal = true;
@@ -677,7 +706,7 @@ HWTEST_F(InitDirectSubmissionTest, givenRootDeviceContextWhenDirectSubmissionDis
677706
device->getDeviceBitfield(), true)));
678707
osContext->ensureContextInitialized();
679708
osContext->setDefaultContext(true);
680-
709+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
681710
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
682711
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
683712
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useRootDevice = false;
@@ -696,7 +725,7 @@ HWTEST_F(InitDirectSubmissionTest, givenRootDeviceContextWhenDirectSubmissionEna
696725
EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup,
697726
device->getDeviceBitfield(), true)));
698727
osContext->ensureContextInitialized();
699-
728+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
700729
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
701730
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
702731
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useRootDevice = true;
@@ -716,7 +745,7 @@ HWTEST_F(InitDirectSubmissionTest, givenNonDefaultContextWhenDirectSubmissionDis
716745
device->getDeviceBitfield())));
717746
osContext->ensureContextInitialized();
718747
osContext->setDefaultContext(false);
719-
748+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
720749
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
721750
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
722751
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useNonDefault = false;
@@ -736,7 +765,7 @@ HWTEST_F(InitDirectSubmissionTest, givenNonDefaultContextContextWhenDirectSubmis
736765
device->getDeviceBitfield())));
737766
osContext->ensureContextInitialized();
738767
osContext->setDefaultContext(false);
739-
768+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
740769
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
741770
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].engineSupported = true;
742771
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_RCS].useNonDefault = true;
@@ -759,7 +788,7 @@ HWTEST_F(InitDirectSubmissionTest, GivenBlitterOverrideEnabledWhenBlitterIsNonDe
759788
device->getDeviceBitfield())));
760789
osContext->ensureContextInitialized();
761790
osContext->setDefaultContext(false);
762-
791+
static_cast<MockOsContext *>(osContext.get())->directSubmissionAvailableChecked = false;
763792
auto hwInfo = device->getRootDeviceEnvironment().getMutableHardwareInfo();
764793
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_BCS].engineSupported = false;
765794
hwInfo->capabilityTable.directSubmissionEngines.data[aub_stream::ENGINE_BCS].useNonDefault = false;

0 commit comments

Comments
 (0)