Skip to content

Commit

Permalink
Multi adapater support on Linux for different adapater BDF (#77)
Browse files Browse the repository at this point in the history
  • Loading branch information
johnmach authored Dec 8, 2021
1 parent c594fb3 commit d09ebd8
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 20 deletions.
5 changes: 1 addition & 4 deletions Source/GmmLib/GlobalInfo/GmmLibDllMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ extern "C" GMM_LIB_API GMM_STATUS GMM_STDCALL InitializeGmm(GMM_INIT_IN_ARGS *pI
GMM_INIT_OUT_ARGS *pOutArgs)
{
GMM_STATUS Status = GMM_ERROR;
ADAPTER_BDF stAdapterBDF;

if(pInArgs && pOutArgs)
{
Expand All @@ -52,9 +51,7 @@ extern "C" GMM_LIB_API GMM_STATUS GMM_STDCALL InitializeGmm(GMM_INIT_IN_ARGS *pI
#ifdef _WIN32
stAdapterBDF = pInArgs->stAdapterBDF;
#else
//ToDO: For Linux, Add the code to Get the Adapter BDF from Adapter FileDescriptor
//Hardcoding for now to 0 2 0
stAdapterBDF = {0, 2, 0, 0};
stAdapterBDF.Data = pInArgs->FileDescriptor;
#endif

Status = GmmCreateLibContext(pInArgs->Platform, pInArgs->pSkuTable, pInArgs->pWaTable,
Expand Down
25 changes: 14 additions & 11 deletions Source/GmmLib/ULT/GmmMultiAdapterULT.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@ void MACommonULT::UnLoadGmmDll(uint32_t AdapterIdx, uint32_t CountIdx)

void MACommonULT::GmmInitModule(uint32_t AdapterIdx, uint32_t CountIdx)
{
GMM_STATUS Status = GMM_SUCCESS;
GMM_STATUS Status = GMM_SUCCESS;
ADAPTER_BDF AdapterBDF = GetAdapterBDF(AdapterIdx);
GfxPlatform[AdapterIdx][CountIdx].eProductFamily = GetProductFamily(AdapterIdx);
GfxPlatform[AdapterIdx][CountIdx].eRenderCoreFamily = GetRenderCoreFamily(AdapterIdx);

Expand Down Expand Up @@ -124,8 +125,11 @@ void MACommonULT::GmmInitModule(uint32_t AdapterIdx, uint32_t CountIdx)
InArgs[AdapterIdx][CountIdx].pSkuTable = &pGfxAdapterInfo[AdapterIdx][CountIdx]->SkuTable;
InArgs[AdapterIdx][CountIdx].pWaTable = &pGfxAdapterInfo[AdapterIdx][CountIdx]->WaTable;
InArgs[AdapterIdx][CountIdx].Platform = GfxPlatform[AdapterIdx][CountIdx];
#ifdef _WIN32
InArgs[AdapterIdx][CountIdx].stAdapterBDF = GetAdapterBDF(AdapterIdx);
#if LHDM
InArgs[AdapterIdx][CountIdx].stAdapterBDF = AdapterBDF;
InArgs[AdapterIdx][CountIdx].DeviceRegistryPath = NULL;
#else
InArgs[AdapterIdx][CountIdx].FileDescriptor = AdapterBDF.Data;
#endif

Status = pfnGmmInit[AdapterIdx][CountIdx](&InArgs[AdapterIdx][CountIdx], &OutArgs[AdapterIdx][CountIdx]);
Expand Down Expand Up @@ -177,10 +181,9 @@ TEST_F(CTestMA, TestLoadMultipleAdapters)
GmmInitModule(0, 0);
GmmInitModule(1, 0);

//Todo: Change EXPECT_EQ to EXPECT_NE once Multi-Adapter support is added to Linux
EXPECT_EQ(pLibContext[0][0], pLibContext[1][0]);
EXPECT_EQ(pLibContext[2][0], pLibContext[1][0]);
EXPECT_EQ(pLibContext[2][0], pLibContext[0][0]);
EXPECT_NE(pLibContext[0][0], pLibContext[1][0]);
EXPECT_NE(pLibContext[2][0], pLibContext[1][0]);
EXPECT_NE(pLibContext[2][0], pLibContext[0][0]);

GmmDestroyModule(1, 0);
GmmDestroyModule(2, 0);
Expand Down Expand Up @@ -255,10 +258,10 @@ TEST_F(CTestMA, TestInitDestroyMultipleTimesOnMultiAdapter)
GmmInitModule(1, 0);
GmmInitModule(2, 0);

//Todo: Change EXPECT_EQ to EXPECT_NE once Multi-Adapter support is added to Linux
EXPECT_EQ(pLibContext[0][0], pLibContext[1][0]);
EXPECT_EQ(pLibContext[2][0], pLibContext[1][0]);
EXPECT_EQ(pLibContext[2][0], pLibContext[0][0]);
//EXPECT_NE for Multi-Adapter support is added to Linux
EXPECT_NE(pLibContext[0][0], pLibContext[1][0]);
EXPECT_NE(pLibContext[2][0], pLibContext[1][0]);
EXPECT_NE(pLibContext[2][0], pLibContext[0][0]);

GmmDestroyModule(2, 0);
GmmDestroyModule(1, 0);
Expand Down
23 changes: 18 additions & 5 deletions Source/GmmLib/ULT/GmmMultiAdapterULT.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,16 +93,29 @@ class MACommonULT : public testing::Test

static ADAPTER_BDF GetAdapterBDF(uint32_t AdapterIdx)
{
ADAPTER_BDF AdapterBDF={0,2,0,0};

switch (AdapterIdx)
{
case 0: return { 2, 0, 2, 0 };
case 1: return { 1, 0, 0, 0 };
case 2: return { 2, 0, 1, 0 };
case 0:
AdapterBDF.Bus = 2;
AdapterBDF.Device = 0;
AdapterBDF.Function = 0;
break;
case 1:
AdapterBDF.Bus = 1;
AdapterBDF.Device = 0;
AdapterBDF.Function = 0;
break;
case 2:
AdapterBDF.Bus = 2;
AdapterBDF.Device = 1;
AdapterBDF.Function = 0;
break;
default: break;
}
return { 0, 2, 0, 0 };
return AdapterBDF;
}

};

typedef struct ThreadInParams_Rec
Expand Down

0 comments on commit d09ebd8

Please sign in to comment.