From 42ffd7983a32b75cf8403c235d8d0f727191390c Mon Sep 17 00:00:00 2001 From: kankanzh Date: Mon, 29 Nov 2021 14:16:42 +0800 Subject: [PATCH] [Media Common] GMM Multi-Adapter Interface Changes * [Media Common] GMM Multi-Adapter Interface Changes Gmm change interface to support Multi-Adapter, media UMD need change the corresponding interface. Downloaded from upstream commit https://github.com/intel/media-driver/commit/42ffd7983a32b75cf8403c235d8d0f727191390c Signed-off-by: Bernd Kuhls --- .../linux/common/os/media_skuwa_specific.h | 1 + .../linux/common/os/mos_os_specific.h | 1 - media_driver/linux/common/ddi/media_libva.cpp | 70 +++++++++++-------- .../linux/common/ddi/media_libva_common.h | 2 - .../linux/common/os/linux_shadow_skuwa.h | 1 + .../linux/common/os/mos_auxtable_mgr.cpp | 21 ++---- .../linux/common/os/mos_auxtable_mgr.h | 4 +- .../linux/common/os/mos_interface.cpp | 31 +++++--- .../linux/common/os/mos_os_specific.c | 14 +--- media_driver/media_top_cmake.cmake | 2 +- .../agnostic/common/os/mos_interface.h | 16 +++++ .../common/os/mos_context_specific_next.cpp | 59 ++++++++-------- 12 files changed, 118 insertions(+), 104 deletions(-) diff --git a/media_common/linux/common/os/media_skuwa_specific.h b/media_common/linux/common/os/media_skuwa_specific.h index 7f8f4fe317..7c046bc44c 100644 --- a/media_common/linux/common/os/media_skuwa_specific.h +++ b/media_common/linux/common/os/media_skuwa_specific.h @@ -40,5 +40,6 @@ using MEDIA_ENGINE_INFO = MEDIA_GT_SYSTEM_INFO; using GMM_SKU_FEATURE_TABLE = SHADOW_MEDIA_FEATURE_TABLE; using GMM_WA_TABLE = SHADOW_MEDIA_WA_TABLE; using GMM_GT_SYSTEM_INFO = MEDIA_GT_SYSTEM_INFO; +using GMM_ADAPTER_BDF = MEDIA_ADAPTER_BDF; #endif // __MEDIA_SKUWA_H__ diff --git a/media_common/linux/common/os/mos_os_specific.h b/media_common/linux/common/os/mos_os_specific.h index 3c33196447..ce881c0912 100644 --- a/media_common/linux/common/os/mos_os_specific.h +++ b/media_common/linux/common/os/mos_os_specific.h @@ -582,7 +582,6 @@ struct _MOS_OS_CONTEXT void *pLibdrmHandle; GMM_CLIENT_CONTEXT *pGmmClientContext; //UMD specific ClientContext object in GMM - GmmExportEntries GmmFuncs; AuxTableMgr *m_auxTableMgr; // GPU Status Buffer diff --git a/media_driver/linux/common/ddi/media_libva.cpp b/media_driver/linux/common/ddi/media_libva.cpp index 36f5f1889d..6202af5f2d 100755 --- a/media_driver/linux/common/ddi/media_libva.cpp +++ b/media_driver/linux/common/ddi/media_libva.cpp @@ -1857,6 +1857,9 @@ VAStatus DdiMedia_InitMediaContext ( GMM_GT_SYSTEM_INFO gmmGtInfo; memset(&gmmGtInfo, 0, sizeof(gmmGtInfo)); + GMM_ADAPTER_BDF gmmAdapterBDF; + memset(&gmmAdapterBDF, 0, sizeof(gmmAdapterBDF)); + eStatus = HWInfo_GetGmmInfo(mediaCtx->fd, &gmmSkuTable, &gmmWaTable, &gmmGtInfo); if (MOS_STATUS_SUCCESS != eStatus) { @@ -1881,32 +1884,50 @@ VAStatus DdiMedia_InitMediaContext ( return VA_STATUS_ERROR_OPERATION_FAILED; } - GMM_STATUS gmmStatus = OpenGmm(&mediaCtx->GmmFuncs); - if (gmmStatus != GMM_SUCCESS) + // fill in the mos context struct as input to initialize m_osContext + MOS_CONTEXT mosCtx = {}; + mosCtx.bufmgr = mediaCtx->pDrmBufMgr; + mosCtx.fd = mediaCtx->fd; + mosCtx.iDeviceId = mediaCtx->iDeviceId; + mosCtx.SkuTable = mediaCtx->SkuTable; + mosCtx.WaTable = mediaCtx->WaTable; + mosCtx.gtSystemInfo = *mediaCtx->pGtSystemInfo; + mosCtx.platform = mediaCtx->platform; + mosCtx.ppMediaMemDecompState = &mediaCtx->pMediaMemDecompState; + mosCtx.pfnMemoryDecompress = mediaCtx->pfnMemoryDecompress; + mosCtx.pfnMediaMemoryCopy = mediaCtx->pfnMediaMemoryCopy; + mosCtx.pfnMediaMemoryCopy2D = mediaCtx->pfnMediaMemoryCopy2D; + mosCtx.ppMediaCopyState = &mediaCtx->pMediaCopyState; + + eStatus = MosInterface::GetAdapterBDF(&mosCtx, &gmmAdapterBDF); + if (MOS_STATUS_SUCCESS != eStatus) { - DDI_ASSERTMESSAGE("gmm init failed."); + DDI_ASSERTMESSAGE("Fatal error - unsuccesfull Gmm Adapter BDF initialization"); FreeForMediaContext(mediaCtx); return VA_STATUS_ERROR_OPERATION_FAILED; } - // init GMM context - gmmStatus = mediaCtx->GmmFuncs.pfnCreateSingletonContext(mediaCtx->platform, - &gmmSkuTable, - &gmmWaTable, - &gmmGtInfo); - - if (gmmStatus != GMM_SUCCESS) + // Initialize Gmm context + GMM_INIT_IN_ARGS gmmInitAgrs = {}; + GMM_INIT_OUT_ARGS gmmOutArgs = {}; + gmmInitAgrs.Platform = mediaCtx->platform; + gmmInitAgrs.pSkuTable = &gmmSkuTable; + gmmInitAgrs.pWaTable = &gmmWaTable; + gmmInitAgrs.pGtSysInfo = &gmmGtInfo; + gmmInitAgrs.FileDescriptor = gmmAdapterBDF.Data; + gmmInitAgrs.ClientType = (GMM_CLIENT)GMM_LIBVA_LINUX; + + GMM_STATUS status = InitializeGmm(&gmmInitAgrs, &gmmOutArgs); + if (status != GMM_SUCCESS) { - DDI_ASSERTMESSAGE("gmm init failed."); + DDI_ASSERTMESSAGE("InitializeGmm fail."); FreeForMediaContext(mediaCtx); return VA_STATUS_ERROR_OPERATION_FAILED; } - - // Create GMM Client Context - mediaCtx->pGmmClientContext = mediaCtx->GmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX); + mediaCtx->pGmmClientContext = gmmOutArgs.pGmmClientContext; // Create GMM page table manager - mediaCtx->m_auxTableMgr = AuxTableMgr::CreateAuxTableMgr(mediaCtx->pDrmBufMgr, &mediaCtx->SkuTable); + mediaCtx->m_auxTableMgr = AuxTableMgr::CreateAuxTableMgr(mediaCtx->pDrmBufMgr, &mediaCtx->SkuTable, mediaCtx->pGmmClientContext); MOS_USER_FEATURE_VALUE_DATA UserFeatureData; MOS_ZeroMemory(&UserFeatureData, sizeof(UserFeatureData)); @@ -1929,19 +1950,6 @@ VAStatus DdiMedia_InitMediaContext ( return VA_STATUS_ERROR_OPERATION_FAILED; } - // fill in the mos context struct as input to initialize m_osContext - mosCtx.bufmgr = mediaCtx->pDrmBufMgr; - mosCtx.fd = mediaCtx->fd; - mosCtx.iDeviceId = mediaCtx->iDeviceId; - mosCtx.SkuTable = mediaCtx->SkuTable; - mosCtx.WaTable = mediaCtx->WaTable; - mosCtx.gtSystemInfo = *mediaCtx->pGtSystemInfo; - mosCtx.platform = mediaCtx->platform; - mosCtx.ppMediaMemDecompState = &mediaCtx->pMediaMemDecompState; - mosCtx.pfnMemoryDecompress = mediaCtx->pfnMemoryDecompress; - mosCtx.pfnMediaMemoryCopy = mediaCtx->pfnMediaMemoryCopy; - mosCtx.pfnMediaMemoryCopy2D = mediaCtx->pfnMediaMemoryCopy2D; - mosCtx.ppMediaCopyState = &mediaCtx->pMediaCopyState; mosCtx.m_auxTableMgr = mediaCtx->m_auxTableMgr; mosCtx.pGmmClientContext = mediaCtx->pGmmClientContext; @@ -2262,8 +2270,10 @@ VAStatus DdiMedia_Terminate ( // Destroy memory allocated to store Media System Info MOS_FreeMemory(mediaCtx->pGtSystemInfo); // Free GMM memory. - mediaCtx->GmmFuncs.pfnDeleteClientContext(mediaCtx->pGmmClientContext); - mediaCtx->GmmFuncs.pfnDestroySingletonContext(); + GMM_INIT_OUT_ARGS gmmOutArgs = {}; + gmmOutArgs.pGmmClientContext = mediaCtx->pGmmClientContext; + GmmAdapterDestroy(&gmmOutArgs); + mediaCtx->pGmmClientContext = nullptr; MosUtilities::MosUtilitiesClose(nullptr); } diff --git a/media_driver/linux/common/ddi/media_libva_common.h b/media_driver/linux/common/ddi/media_libva_common.h index e967d49f5a..74ce820346 100644 --- a/media_driver/linux/common/ddi/media_libva_common.h +++ b/media_driver/linux/common/ddi/media_libva_common.h @@ -536,8 +536,6 @@ struct DDI_MEDIA_CONTEXT GMM_CLIENT_CONTEXT *pGmmClientContext; - GmmExportEntries GmmFuncs; - // Aux Table Manager AuxTableMgr *m_auxTableMgr; diff --git a/media_driver/linux/common/os/linux_shadow_skuwa.h b/media_driver/linux/common/os/linux_shadow_skuwa.h index 529fa05a1b..30321c9563 100644 --- a/media_driver/linux/common/os/linux_shadow_skuwa.h +++ b/media_driver/linux/common/os/linux_shadow_skuwa.h @@ -33,5 +33,6 @@ using SHADOW_MEDIA_FEATURE_TABLE = SKU_FEATURE_TABLE; using SHADOW_MEDIA_WA_TABLE = WA_TABLE; using MEDIA_GT_SYSTEM_INFO = GT_SYSTEM_INFO; +using MEDIA_ADAPTER_BDF = ADAPTER_BDF; #endif //__SKU_WA_H__ diff --git a/media_driver/linux/common/os/mos_auxtable_mgr.cpp b/media_driver/linux/common/os/mos_auxtable_mgr.cpp index fdab2b4c07..292dde020a 100644 --- a/media_driver/linux/common/os/mos_auxtable_mgr.cpp +++ b/media_driver/linux/common/os/mos_auxtable_mgr.cpp @@ -118,19 +118,13 @@ static void WaitFromCpuCb(void *bo) } } -AuxTableMgr::AuxTableMgr(MOS_BUFMGR *bufMgr) +AuxTableMgr::AuxTableMgr(MOS_BUFMGR *bufMgr, GMM_CLIENT_CONTEXT *gmmClientContext) { if (bufMgr) { GMM_DEVICE_CALLBACKS_INT deviceCb = {0}; - GmmExportEntries GmmFuncs; - GMM_STATUS gmmStatus = OpenGmm(&GmmFuncs); - if(gmmStatus != GMM_SUCCESS) - { - MOS_OS_ASSERTMESSAGE("gmm init failed."); - } - m_gmmClientContext = GmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX); + m_gmmClientContext = gmmClientContext; if (m_gmmClientContext == nullptr) { MOS_OS_ASSERTMESSAGE(" nullptr returned by GmmCreateClientContext"); @@ -160,22 +154,15 @@ AuxTableMgr::~AuxTableMgr() } if (m_gmmClientContext != nullptr) { - GmmExportEntries GmmFuncs; - GMM_STATUS gmmStatus = OpenGmm(&GmmFuncs); - if(gmmStatus != GMM_SUCCESS) - { - MOS_OS_ASSERTMESSAGE("gmm init failed."); - } - GmmFuncs.pfnDeleteClientContext((GMM_CLIENT_CONTEXT *)m_gmmClientContext); m_gmmClientContext = nullptr; } } -AuxTableMgr * AuxTableMgr::CreateAuxTableMgr(MOS_BUFMGR *bufMgr, MEDIA_FEATURE_TABLE *sku) +AuxTableMgr * AuxTableMgr::CreateAuxTableMgr(MOS_BUFMGR *bufMgr, MEDIA_FEATURE_TABLE *sku, GMM_CLIENT_CONTEXT *gmmClientContext) { if (MEDIA_IS_SKU(sku, FtrE2ECompression) && !MEDIA_IS_SKU(sku, FtrFlatPhysCCS)) { - AuxTableMgr *auxTableMgr = MOS_New(AuxTableMgr, bufMgr); + AuxTableMgr *auxTableMgr = MOS_New(AuxTableMgr, bufMgr, gmmClientContext); if (auxTableMgr == nullptr) { MOS_OS_ASSERTMESSAGE(" nullptr returned by creating AuxTableMgr"); diff --git a/media_driver/linux/common/os/mos_auxtable_mgr.h b/media_driver/linux/common/os/mos_auxtable_mgr.h index 8fbf59da91..421d2293d6 100644 --- a/media_driver/linux/common/os/mos_auxtable_mgr.h +++ b/media_driver/linux/common/os/mos_auxtable_mgr.h @@ -43,7 +43,7 @@ class AuxTableMgr //! //! \brief Constructor //! - AuxTableMgr(MOS_BUFMGR *bufMgr); + AuxTableMgr(MOS_BUFMGR *bufMgr, GMM_CLIENT_CONTEXT *gmmClientContext); //! //! \brief Destructor @@ -62,7 +62,7 @@ class AuxTableMgr //! \return Object pointer to AuxTableMgr //! Return object pointer if success or return nullptr if failed //! - static AuxTableMgr * CreateAuxTableMgr(MOS_BUFMGR *bufMgr, MEDIA_FEATURE_TABLE *sku); + static AuxTableMgr * CreateAuxTableMgr(MOS_BUFMGR *bufMgr, MEDIA_FEATURE_TABLE *sku, GMM_CLIENT_CONTEXT *gmmClientContext); //! //! \brief Map resource to aux table diff --git a/media_driver/linux/common/os/mos_interface.cpp b/media_driver/linux/common/os/mos_interface.cpp index 3b841bd586..caf4916ba9 100644 --- a/media_driver/linux/common/os/mos_interface.cpp +++ b/media_driver/linux/common/os/mos_interface.cpp @@ -367,17 +367,9 @@ MOS_STATUS MosInterface::InitStreamParameters( context->m_osDeviceContext = streamState->osDeviceContext; context->bSimIsActive = streamState->simIsActive; - if (GMM_SUCCESS != OpenGmm(&context->GmmFuncs)) - { - MOS_FreeMemAndSetNull(context); - - MOS_OS_ASSERTMESSAGE("Unable to open gmm"); - return MOS_STATUS_INVALID_PARAMETER; - } - streamState->perStreamParameters = (OS_PER_STREAM_PARAMETERS)context; - context->pGmmClientContext = context->GmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX); + context->pGmmClientContext = streamState->osDeviceContext->GetGmmClientContext();; context->bufmgr = bufMgr; context->m_gpuContextMgr = osDeviceContext->GetGpuContextMgr(); @@ -608,6 +600,27 @@ MOS_STATUS MosInterface::CreateGpuContext( return MOS_STATUS_SUCCESS; } +MOS_STATUS MosInterface::GetAdapterBDF(PMOS_CONTEXT mosCtx, ADAPTER_BDF *adapterBDF) +{ + MOS_OS_FUNCTION_ENTER; + + drmDevicePtr device; + + MOS_OS_CHK_NULL_RETURN(mosCtx); + if (drmGetDevice(mosCtx->fd, &device) == 0) + { + adapterBDF->Bus = device->businfo.pci->bus; + adapterBDF->Device = device->businfo.pci->dev; + adapterBDF->Function = device->businfo.pci->func; + } + else + { + adapterBDF->Data = 0; + } + + return MOS_STATUS_SUCCESS; +} + MOS_STATUS MosInterface::DestroyGpuContext( MOS_STREAM_HANDLE streamState, GPU_CONTEXT_HANDLE gpuContext) diff --git a/media_driver/linux/common/os/mos_os_specific.c b/media_driver/linux/common/os/mos_os_specific.c index 7b7f57747b..e433c6fe61 100644 --- a/media_driver/linux/common/os/mos_os_specific.c +++ b/media_driver/linux/common/os/mos_os_specific.c @@ -1190,8 +1190,6 @@ void Linux_Destroy( mos_gem_context_destroy(pOsContext->intel_context); } - pOsContext->GmmFuncs.pfnDeleteClientContext(pOsContext->pGmmClientContext); - MOS_FreeMemAndSetNull(pOsContext); } @@ -1931,7 +1929,6 @@ MOS_STATUS Mos_DestroyInterface(PMOS_INTERFACE pOsInterface) mos_gem_context_destroy(perStreamParameters->intel_context); perStreamParameters->intel_context = nullptr; } - perStreamParameters->GmmFuncs.pfnDeleteClientContext(perStreamParameters->pGmmClientContext); MOS_FreeMemAndSetNull(perStreamParameters); streamState->perStreamParameters = nullptr; } @@ -7476,13 +7473,6 @@ MOS_STATUS Mos_Specific_InitInterface( // Create Linux OS Context pOsContext = (PMOS_OS_CONTEXT)MOS_AllocAndZeroMemory(sizeof(MOS_OS_CONTEXT)); MOS_OS_CHK_NULL_RETURN(pOsContext); - - if (GMM_SUCCESS != OpenGmm(&pOsContext->GmmFuncs)) - { - MOS_OS_ASSERTMESSAGE("Unable to open gmm"); - eStatus = MOS_STATUS_INVALID_PARAMETER; - goto finish; - } } if (pOsInterface->modulizedMosEnabled && !Mos_Solo_IsEnabled(nullptr)) @@ -7513,12 +7503,12 @@ MOS_STATUS Mos_Specific_InitInterface( { OsContextSpecific *pOsContextSpecific = static_cast(pOsInterface->osContextPtr); pOsContext->intel_context = pOsContextSpecific->GetDrmContext(); - pOsContext->pGmmClientContext = pOsContext->GmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX); + pOsContext->pGmmClientContext = pOsDriverContext->pGmmClientContext; } } else { - pOsContext->pGmmClientContext = pOsContext->GmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX); + pOsContext->pGmmClientContext = pOsDriverContext->pGmmClientContext; } MOS_ZeroMemory(&UserFeatureData, sizeof(UserFeatureData)); diff --git a/media_driver/media_top_cmake.cmake b/media_driver/media_top_cmake.cmake index d0d8cb5244..426728e16d 100755 --- a/media_driver/media_top_cmake.cmake +++ b/media_driver/media_top_cmake.cmake @@ -142,7 +142,7 @@ if (NOT DEFINED INCLUDED_LIBS OR "${INCLUDED_LIBS}" STREQUAL "") endif() target_compile_options( ${LIB_NAME} PUBLIC ${LIBGMM_CFLAGS_OTHER}) - target_link_libraries ( ${LIB_NAME} ${LIBGMM_LIBRARIES}) + target_link_libraries ( ${LIB_NAME} ${LIBGMM_LIBRARIES} drm) include(${MEDIA_EXT_CMAKE}/ext/media_feature_include_ext.cmake OPTIONAL) diff --git a/media_softlet/agnostic/common/os/mos_interface.h b/media_softlet/agnostic/common/os/mos_interface.h index 42e4acc6f6..6ae60d8e49 100644 --- a/media_softlet/agnostic/common/os/mos_interface.h +++ b/media_softlet/agnostic/common/os/mos_interface.h @@ -1815,6 +1815,22 @@ class MosInterface COMMAND_BUFFER_HANDLE cmdBuf, MOS_SUBMISSION_TYPE type); + //! + //! \brief Get Adapter BDF + //! \details [System info Interface] Get Adapter BDF + //! \details Caller: DDI & HAL + //! \details This func is called to differentiate the behavior according to Adapter BDF. + //! + //! \param [in] mosCtx + //! Pointer of Mos context + //! \param [out] adapterBDF + //! Adapter BDF info + //! + //! \return MOS_STATUS + //! MOS_STATUS_SUCCESS if success, else fail reason + //! + static MOS_STATUS GetAdapterBDF(PMOS_CONTEXT mosCtx, ADAPTER_BDF *adapterBDF); + #if _DEBUG || _RELEASE_INTERNAL //! //! \brief Get engine count diff --git a/media_softlet/linux/common/os/mos_context_specific_next.cpp b/media_softlet/linux/common/os/mos_context_specific_next.cpp index bd331fba31..6842cc6872 100644 --- a/media_softlet/linux/common/os/mos_context_specific_next.cpp +++ b/media_softlet/linux/common/os/mos_context_specific_next.cpp @@ -30,6 +30,7 @@ #include #include #include "hwinfo_linux.h" +#include "mos_interface.h" #include #include @@ -144,9 +145,10 @@ MOS_STATUS OsContextSpecificNext::Init(DDI_DEVICE_CONTEXT ddiDriverContext) m_platformInfo.eRenderCoreFamily, (m_platformInfo.usRevId << 16) | m_platformInfo.usDeviceID); - GMM_SKU_FEATURE_TABLE gmmSkuTable = {}; - GMM_WA_TABLE gmmWaTable = {}; - GMM_GT_SYSTEM_INFO gmmGtInfo = {}; + GMM_SKU_FEATURE_TABLE gmmSkuTable = {}; + GMM_WA_TABLE gmmWaTable = {}; + GMM_GT_SYSTEM_INFO gmmGtInfo = {}; + GMM_ADAPTER_BDF gmmAdapterBDF = {}; eStatus = HWInfo_GetGmmInfo(m_fd, &gmmSkuTable, &gmmWaTable, &gmmGtInfo); if (MOS_STATUS_SUCCESS != eStatus) { @@ -154,28 +156,32 @@ MOS_STATUS OsContextSpecificNext::Init(DDI_DEVICE_CONTEXT ddiDriverContext) return eStatus; } - GmmExportEntries gmmFuncs = {}; - GMM_STATUS gmmStatus = OpenGmm(&gmmFuncs); - if (gmmStatus != GMM_SUCCESS) + eStatus = MosInterface::GetAdapterBDF(osDriverContext, &gmmAdapterBDF); + if (MOS_STATUS_SUCCESS != eStatus) { - MOS_OS_ASSERTMESSAGE("Fatal error - gmm init failed."); - return MOS_STATUS_INVALID_PARAMETER; + MOS_OS_ASSERTMESSAGE("Fatal error - unsuccesfull Gmm Adapter BDF initialization"); + return eStatus; } - // init GMM context - gmmStatus = gmmFuncs.pfnCreateSingletonContext(m_platformInfo, - &gmmSkuTable, - &gmmWaTable, - &gmmGtInfo); - - if (gmmStatus != GMM_SUCCESS) + // Initialize Gmm context + GMM_INIT_IN_ARGS gmmInitAgrs = {}; + GMM_INIT_OUT_ARGS gmmOutArgs = {}; + gmmInitAgrs.Platform = m_platformInfo; + gmmInitAgrs.pSkuTable = &gmmSkuTable; + gmmInitAgrs.pWaTable = &gmmWaTable; + gmmInitAgrs.pGtSysInfo = &gmmGtInfo; + gmmInitAgrs.FileDescriptor = gmmAdapterBDF.Data; + gmmInitAgrs.ClientType = (GMM_CLIENT)GMM_LIBVA_LINUX; + + GMM_STATUS status = InitializeGmm(&gmmInitAgrs, &gmmOutArgs); + if (status != GMM_SUCCESS) { - MOS_OS_ASSERTMESSAGE("Fatal error - gmm CreateSingletonContext failed."); + MOS_OS_ASSERTMESSAGE("Fatal error - InitializeGmm fail."); return MOS_STATUS_INVALID_PARAMETER; } - m_gmmClientContext = gmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX); + m_gmmClientContext = gmmOutArgs.pGmmClientContext; - m_auxTableMgr = AuxTableMgr::CreateAuxTableMgr(m_bufmgr, &m_skuTable); + m_auxTableMgr = AuxTableMgr::CreateAuxTableMgr(m_bufmgr, &m_skuTable, m_gmmClientContext); MOS_ZeroMemory(&UserFeatureData, sizeof(UserFeatureData)); #if (_DEBUG || _RELEASE_INTERNAL) @@ -266,18 +272,11 @@ void OsContextSpecificNext::Destroy() mos_bufmgr_destroy(m_bufmgr); - GmmExportEntries GmmFuncs; - GMM_STATUS gmmStatus = OpenGmm(&GmmFuncs); - if (gmmStatus == GMM_SUCCESS) - { - GmmFuncs.pfnDeleteClientContext((GMM_CLIENT_CONTEXT *)m_gmmClientContext); - m_gmmClientContext = nullptr; - GmmFuncs.pfnDestroySingletonContext(); - } - else - { - MOS_OS_ASSERTMESSAGE("gmm init failed."); - } + // Delete Gmm context + GMM_INIT_OUT_ARGS gmmOutArgs = {}; + gmmOutArgs.pGmmClientContext = m_gmmClientContext; + GmmAdapterDestroy(&gmmOutArgs); + m_gmmClientContext = nullptr; SetOsContextValid(false); }