diff options
| author | Teng, Jin Chung <jin.chung.teng@intel.com> | 2021-11-03 15:37:29 +0800 |
|---|---|---|
| committer | Anuj Mittal <anuj.mittal@intel.com> | 2021-11-05 10:54:08 +0800 |
| commit | d813aee27e2077bed9bb5111d2ca5abb273d19fb (patch) | |
| tree | 56a8943463783ef58faa332379f958ad3e5faf68 | |
| parent | 82a73574ed9bdff2692fe98cd67c8910e4040158 (diff) | |
| download | meta-intel-d813aee27e2077bed9bb5111d2ca5abb273d19fb.tar.gz | |
media-driver: user registry key reentrant fix
Fix for registry key reentrant on Linux during multiple processes.
Signed-off-by: Teng, Jin Chung <jin.chung.teng@intel.com>
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
| -rw-r--r-- | recipes-multimedia/libva/files/0001-MOS-user-setting-reentrant.patch | 476 | ||||
| -rw-r--r-- | recipes-multimedia/libva/intel-media-driver_21.3.5.bb | 1 |
2 files changed, 477 insertions, 0 deletions
diff --git a/recipes-multimedia/libva/files/0001-MOS-user-setting-reentrant.patch b/recipes-multimedia/libva/files/0001-MOS-user-setting-reentrant.patch new file mode 100644 index 00000000..9b9cfe35 --- /dev/null +++ b/recipes-multimedia/libva/files/0001-MOS-user-setting-reentrant.patch | |||
| @@ -0,0 +1,476 @@ | |||
| 1 | From b2c07abaf546f84529b39cb4ae443ed2a5bc35e9 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: jinchung <you@example.com> | ||
| 3 | Date: Wed, 3 Nov 2021 14:02:51 +0000 | ||
| 4 | Subject: [PATCH] [MOS] user setting reentrant | ||
| 5 | |||
| 6 | Fix for registry key reentrant on Linux during multiple processes | ||
| 7 | |||
| 8 | Upstream-Status: Submitted [internal innersource] | ||
| 9 | innersource PR #45124 | ||
| 10 | |||
| 11 | Signed-off-by: Teng, Jin Chung <jin.chung.teng@intel.com> | ||
| 12 | Signed-off-by: Wang, Pingli <pingli.wang@intel.com> | ||
| 13 | --- | ||
| 14 | .../common/os/mos_utilities_specific.cpp | 2 +- | ||
| 15 | .../linux/common/os/mos_utilities_specific.h | 2 +- | ||
| 16 | .../agnostic/common/os/mos_utilities_next.cpp | 15 ++- | ||
| 17 | .../agnostic/common/os/mos_utilities_next.h | 2 +- | ||
| 18 | .../common/os/mos_utilities_specific_next.cpp | 107 +++++++----------- | ||
| 19 | .../common/os/mos_utilities_specific_next.h | 71 ++++++------ | ||
| 20 | 6 files changed, 89 insertions(+), 110 deletions(-) | ||
| 21 | |||
| 22 | diff --git a/media_driver/linux/common/os/mos_utilities_specific.cpp b/media_driver/linux/common/os/mos_utilities_specific.cpp | ||
| 23 | index ae414360..62eb4593 100644 | ||
| 24 | --- a/media_driver/linux/common/os/mos_utilities_specific.cpp | ||
| 25 | +++ b/media_driver/linux/common/os/mos_utilities_specific.cpp | ||
| 26 | @@ -589,7 +589,7 @@ static int32_t _UserFeature_FindValue(MOS_UF_KEY UFKey, char * const pcValueName | ||
| 27 | |||
| 28 | iResult = -1; | ||
| 29 | |||
| 30 | - for ( i = 0; i < (int32_t)UFKey.ulValueNum; i++ ) | ||
| 31 | + for ( i = 0; i < UFKey.ulValueNum; i++ ) | ||
| 32 | { | ||
| 33 | iResult = strcmp(UFKey.pValueArray[i].pcValueName, pcValueName); | ||
| 34 | if ( iResult == 0 ) | ||
| 35 | diff --git a/media_driver/linux/common/os/mos_utilities_specific.h b/media_driver/linux/common/os/mos_utilities_specific.h | ||
| 36 | index 81d84537..3d1cda35 100644 | ||
| 37 | --- a/media_driver/linux/common/os/mos_utilities_specific.h | ||
| 38 | +++ b/media_driver/linux/common/os/mos_utilities_specific.h | ||
| 39 | @@ -116,7 +116,7 @@ typedef struct _MOS_UF_VALUE { | ||
| 40 | typedef struct _MOS_UF_KEY { | ||
| 41 | void *UFKey; | ||
| 42 | char pcKeyName[MAX_USERFEATURE_LINE_LENGTH]; | ||
| 43 | - uint32_t ulValueNum; | ||
| 44 | + int32_t ulValueNum; | ||
| 45 | MOS_UF_VALUE *pValueArray; | ||
| 46 | } MOS_UF_KEY; | ||
| 47 | |||
| 48 | diff --git a/media_softlet/agnostic/common/os/mos_utilities_next.cpp b/media_softlet/agnostic/common/os/mos_utilities_next.cpp | ||
| 49 | index 8427ec17..74ba75b9 100644 | ||
| 50 | --- a/media_softlet/agnostic/common/os/mos_utilities_next.cpp | ||
| 51 | +++ b/media_softlet/agnostic/common/os/mos_utilities_next.cpp | ||
| 52 | @@ -1930,9 +1930,18 @@ MOS_STATUS MosUtilities::MosUserFeatureReadValueFromMapID( | ||
| 53 | &ufKey, | ||
| 54 | ufInfo)) != MOS_STATUS_SUCCESS) | ||
| 55 | { | ||
| 56 | - MOS_OS_NORMALMESSAGE("Failed to open user feature for reading eStatus:%d.", eStatus); | ||
| 57 | - eStatus = MOS_STATUS_USER_FEATURE_KEY_OPEN_FAILED; | ||
| 58 | - goto finish; | ||
| 59 | + MOS_OS_NORMALMESSAGE("Failed to open user feature for concurrency."); | ||
| 60 | + if ((eStatus = MosUserFeatureOpen( | ||
| 61 | + pUserFeature->Type, | ||
| 62 | + pUserFeature->pcPath, | ||
| 63 | + KEY_READ, | ||
| 64 | + &ufKey, | ||
| 65 | + ufInfo)) != MOS_STATUS_SUCCESS) | ||
| 66 | + { | ||
| 67 | + MOS_OS_NORMALMESSAGE("Failed to open user feature for reading eStatus:%d.", eStatus); | ||
| 68 | + eStatus = MOS_STATUS_USER_FEATURE_KEY_OPEN_FAILED; | ||
| 69 | + goto finish; | ||
| 70 | + } | ||
| 71 | } | ||
| 72 | |||
| 73 | // Initialize Read Value | ||
| 74 | diff --git a/media_softlet/agnostic/common/os/mos_utilities_next.h b/media_softlet/agnostic/common/os/mos_utilities_next.h | ||
| 75 | index f492a2c7..65aa3729 100644 | ||
| 76 | --- a/media_softlet/agnostic/common/os/mos_utilities_next.h | ||
| 77 | +++ b/media_softlet/agnostic/common/os/mos_utilities_next.h | ||
| 78 | @@ -653,7 +653,7 @@ public: | ||
| 79 | //! | ||
| 80 | //! \brief Unlink the user feature key Desc Fields table items to key value map | ||
| 81 | //! \details Unlink the user feature key Desc Fields table items to key value map | ||
| 82 | - //! according to ID sequence and do some post processing by calling MOS_DestroyUserFeatureData | ||
| 83 | + //! according to ID sequence and do some post processing by calling MOSDestroyUserFeatureData | ||
| 84 | //! \param [in] pUserFeatureKey | ||
| 85 | //! Pointer to the User Feature Value needed to be destroyed | ||
| 86 | //! \return MOS_STATUS | ||
| 87 | diff --git a/media_softlet/linux/common/os/mos_utilities_specific_next.cpp b/media_softlet/linux/common/os/mos_utilities_specific_next.cpp | ||
| 88 | index 81ee4bdf..584ba086 100644 | ||
| 89 | --- a/media_softlet/linux/common/os/mos_utilities_specific_next.cpp | ||
| 90 | +++ b/media_softlet/linux/common/os/mos_utilities_specific_next.cpp | ||
| 91 | @@ -47,7 +47,8 @@ | ||
| 92 | #include <unistd.h> // fork | ||
| 93 | #include <algorithm> | ||
| 94 | |||
| 95 | -const char *MosUtilitiesSpecificNext::m_szUserFeatureFile = USER_FEATURE_FILE; | ||
| 96 | +const char *MosUtilitiesSpecificNext::m_szUserFeatureFile = USER_FEATURE_FILE; | ||
| 97 | +MOS_PUF_KEYLIST MosUtilitiesSpecificNext::m_ufKeyList = nullptr; | ||
| 98 | |||
| 99 | double MosUtilities::MosGetTime() | ||
| 100 | { | ||
| 101 | @@ -540,7 +541,7 @@ void MosUtilities::MosSleep(uint32_t mSec) | ||
| 102 | |||
| 103 | iResult = -1; | ||
| 104 | |||
| 105 | - for ( i = 0; i < (int32_t)UFKey.ulValueNum; i++ ) | ||
| 106 | + for ( i = 0; i < UFKey.ulValueNum; i++ ) | ||
| 107 | { | ||
| 108 | iResult = strcmp(UFKey.pValueArray[i].pcValueName, pcValueName); | ||
| 109 | if ( iResult == 0 ) | ||
| 110 | @@ -566,7 +567,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureAdd(MOS_PUF_KEYLIST *pKeyList, M | ||
| 111 | return MOS_STATUS_INVALID_PARAMETER; | ||
| 112 | } | ||
| 113 | |||
| 114 | - pNewNode = (MOS_UF_KEYNODE*)MOS_AllocMemory(sizeof(MOS_UF_KEYNODE)); | ||
| 115 | + pNewNode = (MOS_UF_KEYNODE*)MOS_AllocAndZeroMemory(sizeof(MOS_UF_KEYNODE)); | ||
| 116 | if (pNewNode == nullptr) | ||
| 117 | { | ||
| 118 | return MOS_STATUS_NO_SPACE; | ||
| 119 | @@ -604,41 +605,34 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureSet(MOS_PUF_KEYLIST *pKeyList, M | ||
| 120 | } | ||
| 121 | |||
| 122 | // Prepare the ValueBuff of the NewKey | ||
| 123 | - if ((ulValueBuf = MOS_AllocMemory(NewKey.pValueArray[0].ulValueLen)) == nullptr) | ||
| 124 | + if ((ulValueBuf = MOS_AllocAndZeroMemory(NewKey.pValueArray[0].ulValueLen)) == nullptr) | ||
| 125 | { | ||
| 126 | return MOS_STATUS_NO_SPACE; | ||
| 127 | } | ||
| 128 | + MOS_AtomicIncrement(&MosUtilities::m_mosMemAllocFakeCounter); //ulValueBuf does not count it, because it is freed after the MEMNJA final report. | ||
| 129 | + MOS_OS_NORMALMESSAGE("ulValueBuf %p for key %s", ulValueBuf, NewKey.pValueArray[0].pcValueName); | ||
| 130 | |||
| 131 | if ( (iPos = UserFeatureFindValue(*Key, NewKey.pValueArray[0].pcValueName)) == NOT_FOUND) | ||
| 132 | { | ||
| 133 | //not found, add a new value to key struct. | ||
| 134 | //reallocate memory for appending this value. | ||
| 135 | - pValueArray = (MOS_UF_VALUE*)MOS_AllocMemory(sizeof(MOS_UF_VALUE)*(Key->ulValueNum+1)); | ||
| 136 | - if (pValueArray == nullptr) | ||
| 137 | + iPos = MOS_AtomicIncrement(&Key->ulValueNum); | ||
| 138 | + if (iPos >= UF_CAPABILITY) | ||
| 139 | { | ||
| 140 | - MOS_FreeMemory(ulValueBuf); | ||
| 141 | - return MOS_STATUS_NO_SPACE; | ||
| 142 | + MOS_OS_ASSERTMESSAGE("user setting value icount %d must less than UF_CAPABILITY(64)", iPos); | ||
| 143 | + return MOS_STATUS_USER_FEATURE_KEY_READ_FAILED; | ||
| 144 | } | ||
| 145 | |||
| 146 | - MosUtilities::MosSecureMemcpy(pValueArray, | ||
| 147 | - sizeof(MOS_UF_VALUE)*(Key->ulValueNum), | ||
| 148 | - Key->pValueArray, | ||
| 149 | - sizeof(MOS_UF_VALUE)*(Key->ulValueNum)); | ||
| 150 | - | ||
| 151 | - MOS_FreeMemory(Key->pValueArray); | ||
| 152 | - | ||
| 153 | - Key->pValueArray = pValueArray; | ||
| 154 | - | ||
| 155 | - iPos = Key->ulValueNum; | ||
| 156 | - MosUtilities::MosSecureStrcpy(Key->pValueArray[Key->ulValueNum].pcValueName, | ||
| 157 | + MosUtilities::MosSecureStrcpy(Key->pValueArray[iPos].pcValueName, | ||
| 158 | MAX_USERFEATURE_LINE_LENGTH, | ||
| 159 | NewKey.pValueArray[0].pcValueName); | ||
| 160 | - Key->ulValueNum ++; | ||
| 161 | } | ||
| 162 | else | ||
| 163 | { | ||
| 164 | //if found, the previous value buffer needs to be freed before reallocating | ||
| 165 | MOS_FreeMemory(Key->pValueArray[iPos].ulValueBuf); | ||
| 166 | + MOS_AtomicDecrement(&MosUtilities::m_mosMemAllocFakeCounter); | ||
| 167 | + MOS_OS_NORMALMESSAGE("ulValueBuf %p for key %s", ulValueBuf, NewKey.pValueArray[0].pcValueName); | ||
| 168 | } | ||
| 169 | |||
| 170 | Key->pValueArray[iPos].ulValueLen = NewKey.pValueArray[0].ulValueLen; | ||
| 171 | @@ -733,7 +727,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureDumpFile(const char * const szF | ||
| 172 | iCurId = 0; | ||
| 173 | eStatus = MOS_STATUS_SUCCESS; | ||
| 174 | |||
| 175 | - CurKey = (MOS_UF_KEY*)MOS_AllocMemory(sizeof(MOS_UF_KEY)); | ||
| 176 | + CurKey = (MOS_UF_KEY*)MOS_AllocAndZeroMemory(sizeof(MOS_UF_KEY)); | ||
| 177 | if (CurKey == nullptr) | ||
| 178 | { | ||
| 179 | return MOS_STATUS_NO_SPACE; | ||
| 180 | @@ -771,7 +765,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureDumpFile(const char * const szF | ||
| 181 | // if the CurKey didn't be added in pKeyList, free it. | ||
| 182 | MOS_FreeMemory(CurKey); | ||
| 183 | } | ||
| 184 | - CurKey = (MOS_UF_KEY*)MOS_AllocMemory(sizeof(MOS_UF_KEY)); | ||
| 185 | + CurKey = (MOS_UF_KEY*)MOS_AllocAndZeroMemory(sizeof(MOS_UF_KEY)); | ||
| 186 | if (CurKey == nullptr) | ||
| 187 | { | ||
| 188 | eStatus = MOS_STATUS_NO_SPACE; | ||
| 189 | @@ -796,7 +790,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureDumpFile(const char * const szF | ||
| 190 | CurKey->ulValueNum = 0; | ||
| 191 | |||
| 192 | // allocate capability length for valuearray. | ||
| 193 | - CurValue = (MOS_UF_VALUE*)MOS_AllocMemory(sizeof(MOS_UF_VALUE)*UF_CAPABILITY); | ||
| 194 | + CurValue = (MOS_UF_VALUE*)MOS_AllocAndZeroMemory(sizeof(MOS_UF_VALUE)*UF_CAPABILITY); | ||
| 195 | if (CurValue == nullptr) | ||
| 196 | { | ||
| 197 | eStatus = MOS_STATUS_NO_SPACE; | ||
| 198 | @@ -826,6 +820,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureDumpFile(const char * const szF | ||
| 199 | if (iCount < 0 || iCount >= UF_CAPABILITY) | ||
| 200 | { | ||
| 201 | eStatus = MOS_STATUS_USER_FEATURE_KEY_READ_FAILED; | ||
| 202 | + MOS_OS_ASSERTMESSAGE("user setting value icount %d, and it must meet 0 < icount < UF_CAPABILITY(64)", iCount); | ||
| 203 | break; | ||
| 204 | } | ||
| 205 | |||
| 206 | @@ -987,7 +982,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureDumpDataToFile(const char *szFil | ||
| 207 | fprintf(File, "%s\n", UF_KEY_ID); | ||
| 208 | fprintf(File, "\t0x%.8x\n", (uint32_t)(uintptr_t)pKeyTmp->pElem->UFKey); | ||
| 209 | fprintf(File, "\t%s\n", pKeyTmp->pElem->pcKeyName); | ||
| 210 | - for ( j = 0; j < (int32_t)pKeyTmp->pElem->ulValueNum; j ++ ) | ||
| 211 | + for ( j = 0; j < pKeyTmp->pElem->ulValueNum; j ++ ) | ||
| 212 | { | ||
| 213 | fprintf(File, "\t\t%s\n", UF_VALUE_ID); | ||
| 214 | if ( strlen(pKeyTmp->pElem->pValueArray[j].pcValueName) > 0 ) | ||
| 215 | @@ -1015,10 +1010,9 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureDumpDataToFile(const char *szFil | ||
| 216 | break; | ||
| 217 | } //switch (pKeyTmp->pElem->pValueArray[j].ulValueType) | ||
| 218 | } | ||
| 219 | - } // for ( j = 0; j < (int32_t)pKeyTmp->pElem->ulValueNum; j ++ ) | ||
| 220 | + } // for ( j = 0; j < pKeyTmp->pElem->ulValueNum; j ++ ) | ||
| 221 | } //for (pKeyTmp = pKeyList; pKeyTmp; pKeyTmp = pKeyTmp->pNext) | ||
| 222 | fclose(File); | ||
| 223 | - MosUtilities::MosUserFeatureNotifyChangeKeyValue(nullptr, false, nullptr, true); | ||
| 224 | |||
| 225 | return MOS_STATUS_SUCCESS; | ||
| 226 | } | ||
| 227 | @@ -1055,12 +1049,10 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureSetValue( | ||
| 228 | MOS_UF_KEY NewKey; | ||
| 229 | MOS_UF_VALUE NewValue; | ||
| 230 | MOS_STATUS eStatus; | ||
| 231 | - MOS_PUF_KEYLIST pKeyList; | ||
| 232 | |||
| 233 | eStatus = MOS_STATUS_UNKNOWN; | ||
| 234 | - pKeyList = nullptr; | ||
| 235 | |||
| 236 | - if ( (strKey== nullptr) || (pcValueName == nullptr) ) | ||
| 237 | + if ((strKey == nullptr) || (pcValueName == nullptr) || (m_ufKeyList == nullptr)) | ||
| 238 | { | ||
| 239 | return MOS_STATUS_INVALID_PARAMETER; | ||
| 240 | } | ||
| 241 | @@ -1083,18 +1075,11 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureSetValue( | ||
| 242 | NewKey.pValueArray = &NewValue; | ||
| 243 | NewKey.ulValueNum = 1; | ||
| 244 | |||
| 245 | - if ((eStatus = UserFeatureDumpFile(m_szUserFeatureFile, &pKeyList)) != MOS_STATUS_SUCCESS) | ||
| 246 | + if ( ( eStatus = UserFeatureSet(&MosUtilitiesSpecificNext::m_ufKeyList, NewKey)) == MOS_STATUS_SUCCESS ) | ||
| 247 | { | ||
| 248 | - UserFeatureFreeKeyList(pKeyList); | ||
| 249 | - return eStatus; | ||
| 250 | + MosUtilities::MosUserFeatureNotifyChangeKeyValue(nullptr, false, nullptr, true); | ||
| 251 | } | ||
| 252 | |||
| 253 | - if ( ( eStatus = UserFeatureSet(&pKeyList, NewKey)) == MOS_STATUS_SUCCESS ) | ||
| 254 | - { | ||
| 255 | - eStatus = UserFeatureDumpDataToFile(m_szUserFeatureFile, pKeyList); | ||
| 256 | - } | ||
| 257 | - | ||
| 258 | - UserFeatureFreeKeyList(pKeyList); | ||
| 259 | return eStatus; | ||
| 260 | } | ||
| 261 | |||
| 262 | @@ -1114,9 +1099,9 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureQueryValue( | ||
| 263 | char strTempValueName[MAX_USERFEATURE_LINE_LENGTH]; | ||
| 264 | |||
| 265 | eStatus = MOS_STATUS_UNKNOWN; | ||
| 266 | - pKeyList = nullptr; | ||
| 267 | + pKeyList = MosUtilitiesSpecificNext::m_ufKeyList; | ||
| 268 | |||
| 269 | - if ( (strKey == nullptr) || (pcValueName == nullptr)) | ||
| 270 | + if ( (strKey == nullptr) || (pcValueName == nullptr) || (pKeyList == nullptr)) | ||
| 271 | { | ||
| 272 | return MOS_STATUS_INVALID_PARAMETER; | ||
| 273 | } | ||
| 274 | @@ -1129,21 +1114,17 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureQueryValue( | ||
| 275 | NewKey.pValueArray = &NewValue; | ||
| 276 | NewKey.ulValueNum = 1; | ||
| 277 | |||
| 278 | - if ((eStatus = UserFeatureDumpFile(m_szUserFeatureFile, &pKeyList)) == MOS_STATUS_SUCCESS) | ||
| 279 | + if ( (eStatus = UserFeatureQuery(pKeyList, &NewKey)) == MOS_STATUS_SUCCESS ) | ||
| 280 | { | ||
| 281 | - if ( (eStatus = UserFeatureQuery(pKeyList, &NewKey)) == MOS_STATUS_SUCCESS ) | ||
| 282 | + if(uiValueType != nullptr) | ||
| 283 | { | ||
| 284 | - if(uiValueType != nullptr) | ||
| 285 | - { | ||
| 286 | - *uiValueType = NewKey.pValueArray[0].ulValueType; | ||
| 287 | - } | ||
| 288 | - if (nDataSize != nullptr) | ||
| 289 | - { | ||
| 290 | - *nDataSize = NewKey.pValueArray[0].ulValueLen; | ||
| 291 | - } | ||
| 292 | + *uiValueType = NewKey.pValueArray[0].ulValueType; | ||
| 293 | + } | ||
| 294 | + if (nDataSize != nullptr) | ||
| 295 | + { | ||
| 296 | + *nDataSize = NewKey.pValueArray[0].ulValueLen; | ||
| 297 | } | ||
| 298 | } | ||
| 299 | - UserFeatureFreeKeyList(pKeyList); | ||
| 300 | |||
| 301 | return eStatus; | ||
| 302 | } | ||
| 303 | @@ -1155,16 +1136,9 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureGetKeyIdbyName(const char *pcKe | ||
| 304 | MOS_STATUS eStatus; | ||
| 305 | MOS_PUF_KEYLIST pTempNode; | ||
| 306 | |||
| 307 | - pKeyList = nullptr; | ||
| 308 | + pKeyList = MosUtilitiesSpecificNext::m_ufKeyList; | ||
| 309 | iResult = -1; | ||
| 310 | |||
| 311 | - if ((eStatus = UserFeatureDumpFile(m_szUserFeatureFile, &pKeyList)) != | ||
| 312 | - MOS_STATUS_SUCCESS ) | ||
| 313 | - { | ||
| 314 | - UserFeatureFreeKeyList(pKeyList); | ||
| 315 | - return eStatus; | ||
| 316 | - } | ||
| 317 | - | ||
| 318 | eStatus = MOS_STATUS_INVALID_PARAMETER; | ||
| 319 | |||
| 320 | for(pTempNode=pKeyList; pTempNode; pTempNode=pTempNode->pNext) | ||
| 321 | @@ -1177,7 +1151,6 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureGetKeyIdbyName(const char *pcKe | ||
| 322 | break; | ||
| 323 | } | ||
| 324 | } | ||
| 325 | - UserFeatureFreeKeyList(pKeyList); | ||
| 326 | |||
| 327 | return eStatus; | ||
| 328 | } | ||
| 329 | @@ -1188,7 +1161,7 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureGetKeyNamebyId(void *UFKey, cha | ||
| 330 | MOS_PUF_KEYLIST pTempNode; | ||
| 331 | MOS_STATUS eStatus; | ||
| 332 | |||
| 333 | - pKeyList = nullptr; | ||
| 334 | + pKeyList = MosUtilitiesSpecificNext::m_ufKeyList; | ||
| 335 | |||
| 336 | switch((uintptr_t)UFKey) | ||
| 337 | { | ||
| 338 | @@ -1201,13 +1174,6 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureGetKeyNamebyId(void *UFKey, cha | ||
| 339 | eStatus = MOS_STATUS_SUCCESS; | ||
| 340 | break; | ||
| 341 | default: | ||
| 342 | - if ((eStatus = UserFeatureDumpFile(m_szUserFeatureFile, &pKeyList)) != | ||
| 343 | - MOS_STATUS_SUCCESS ) | ||
| 344 | - { | ||
| 345 | - UserFeatureFreeKeyList(pKeyList); | ||
| 346 | - return eStatus; | ||
| 347 | - } | ||
| 348 | - | ||
| 349 | eStatus = MOS_STATUS_UNKNOWN; | ||
| 350 | |||
| 351 | for(pTempNode=pKeyList;pTempNode;pTempNode=pTempNode->pNext) | ||
| 352 | @@ -1219,7 +1185,6 @@ MOS_STATUS MosUtilitiesSpecificNext::UserFeatureGetKeyNamebyId(void *UFKey, cha | ||
| 353 | break; | ||
| 354 | } | ||
| 355 | } | ||
| 356 | - UserFeatureFreeKeyList(pKeyList); | ||
| 357 | break; | ||
| 358 | } | ||
| 359 | |||
| 360 | @@ -1364,6 +1329,7 @@ MOS_STATUS MosUtilities::MosOsUtilitiesInit(MOS_CONTEXT_HANDLE mosCtx) | ||
| 361 | //Init MOS User Feature Key from mos desc table | ||
| 362 | eStatus = MosDeclareUserFeatureKeysForAllDescFields(); | ||
| 363 | |||
| 364 | + MosUtilitiesSpecificNext::UserFeatureDumpFile(MosUtilitiesSpecificNext::m_szUserFeatureFile, &MosUtilitiesSpecificNext::m_ufKeyList); | ||
| 365 | #if _MEDIA_RESERVED | ||
| 366 | m_codecUserFeatureExt = new CodechalUserSettingsMgr(); | ||
| 367 | m_vpUserFeatureExt = new VphalUserSettingsMgr(); | ||
| 368 | @@ -1425,6 +1391,9 @@ MOS_STATUS MosUtilities::MosOsUtilitiesClose(MOS_CONTEXT_HANDLE mosCtx) | ||
| 369 | // so if there still is another active lib instance, logs would still be printed. | ||
| 370 | MosUtilDebug::MosMessageClose(); | ||
| 371 | #endif | ||
| 372 | + MosUtilitiesSpecificNext::UserFeatureDumpDataToFile(MosUtilitiesSpecificNext::m_szUserFeatureFile, MosUtilitiesSpecificNext::m_ufKeyList); | ||
| 373 | + MosUtilitiesSpecificNext::UserFeatureFreeKeyList(MosUtilitiesSpecificNext::m_ufKeyList); | ||
| 374 | + MosUtilitiesSpecificNext::m_ufKeyList = nullptr; | ||
| 375 | } | ||
| 376 | m_mutexLock.Unlock(); | ||
| 377 | return eStatus; | ||
| 378 | diff --git a/media_softlet/linux/common/os/mos_utilities_specific_next.h b/media_softlet/linux/common/os/mos_utilities_specific_next.h | ||
| 379 | index 792123a6..878ce4e6 100644 | ||
| 380 | --- a/media_softlet/linux/common/os/mos_utilities_specific_next.h | ||
| 381 | +++ b/media_softlet/linux/common/os/mos_utilities_specific_next.h | ||
| 382 | @@ -110,6 +110,41 @@ static MOS_STATUS MosUserFeatureOpenKeyFile( | ||
| 383 | uint32_t samDesired, | ||
| 384 | void **phkResult); | ||
| 385 | |||
| 386 | +/*---------------------------------------------------------------------------- | ||
| 387 | + | Name : UserFeatureDumpFile | ||
| 388 | + | Purpose : This function read the whole User Feature File and dump User Feature File | ||
| 389 | + | data to key linked list. | ||
| 390 | + | Arguments : szFileName [in] User Feature File name. | ||
| 391 | + | pKeyList [out] Key Linked list. | ||
| 392 | + | Returns : MOS_STATUS_SUCCESS Operation success. | ||
| 393 | + | MOS_STATUS_USER_FEATURE_KEY_READ_FAILED User Feature File can't be open as read. | ||
| 394 | + | MOS_STATUS_NO_SPACE no space left for allocate | ||
| 395 | + | MOS_STATUS_UNKNOWN unknown user feature type found in User Feature File | ||
| 396 | + | MOS_STATUS_INVALID_PARAMETER unknown items found in User Feature File | ||
| 397 | + | Comments : | ||
| 398 | + \---------------------------------------------------------------------------*/ | ||
| 399 | +static MOS_STATUS UserFeatureDumpFile(const char *const szFileName, MOS_PUF_KEYLIST *pKeyList); | ||
| 400 | + | ||
| 401 | +/*---------------------------------------------------------------------------- | ||
| 402 | +| Name : UserFeatureDumpDataToFile | ||
| 403 | +| Purpose : This function dump key linked list data to File. | ||
| 404 | +| Arguments : szFileName [in] A handle to the File. | ||
| 405 | +| pKeyList [in] Reserved, any LPDWORD type value. | ||
| 406 | +| Returns : MOS_STATUS_SUCCESS Operation success. | ||
| 407 | +| MOS_STATUS_USER_FEATURE_KEY_WRITE_FAILED File can't be written. | ||
| 408 | +| Comments : | ||
| 409 | +\---------------------------------------------------------------------------*/ | ||
| 410 | + | ||
| 411 | +static MOS_STATUS UserFeatureDumpDataToFile(const char *szFileName, MOS_PUF_KEYLIST pKeyList); | ||
| 412 | + | ||
| 413 | +/*---------------------------------------------------------------------------- | ||
| 414 | +| Name : UserFeatureFreeKeyList | ||
| 415 | +| Purpose : Free key list | ||
| 416 | +| Arguments : pKeyList [in] key list to be free. | ||
| 417 | +| Returns : None | ||
| 418 | +| Comments : | ||
| 419 | +\---------------------------------------------------------------------------*/ | ||
| 420 | +static void UserFeatureFreeKeyList(MOS_PUF_KEYLIST pKeyList); | ||
| 421 | |||
| 422 | private: | ||
| 423 | |||
| 424 | @@ -174,41 +209,6 @@ private: | ||
| 425 | |||
| 426 | static MOS_STATUS UserFeatureReadNextTokenFromFile(FILE *pFile, const char *szFormat, char *szToken); | ||
| 427 | |||
| 428 | - /*---------------------------------------------------------------------------- | ||
| 429 | - | Name : UserFeatureDumpFile | ||
| 430 | - | Purpose : This function read the whole User Feature File and dump User Feature File | ||
| 431 | - | data to key linked list. | ||
| 432 | - | Arguments : szFileName [in] User Feature File name. | ||
| 433 | - | pKeyList [out] Key Linked list. | ||
| 434 | - | Returns : MOS_STATUS_SUCCESS Operation success. | ||
| 435 | - | MOS_STATUS_USER_FEATURE_KEY_READ_FAILED User Feature File can't be open as read. | ||
| 436 | - | MOS_STATUS_NO_SPACE no space left for allocate | ||
| 437 | - | MOS_STATUS_UNKNOWN unknown user feature type found in User Feature File | ||
| 438 | - | MOS_STATUS_INVALID_PARAMETER unknown items found in User Feature File | ||
| 439 | - | Comments : | ||
| 440 | - \---------------------------------------------------------------------------*/ | ||
| 441 | - static MOS_STATUS UserFeatureDumpFile(const char * const szFileName, MOS_PUF_KEYLIST* pKeyList); | ||
| 442 | - | ||
| 443 | - /*---------------------------------------------------------------------------- | ||
| 444 | - | Name : UserFeatureDumpDataToFile | ||
| 445 | - | Purpose : This function dump key linked list data to File. | ||
| 446 | - | Arguments : szFileName [in] A handle to the File. | ||
| 447 | - | pKeyList [in] Reserved, any LPDWORD type value. | ||
| 448 | - | Returns : MOS_STATUS_SUCCESS Operation success. | ||
| 449 | - | MOS_STATUS_USER_FEATURE_KEY_WRITE_FAILED File can't be written. | ||
| 450 | - | Comments : | ||
| 451 | - \---------------------------------------------------------------------------*/ | ||
| 452 | - static MOS_STATUS UserFeatureDumpDataToFile(const char *szFileName, MOS_PUF_KEYLIST pKeyList); | ||
| 453 | - | ||
| 454 | - /*---------------------------------------------------------------------------- | ||
| 455 | - | Name : UserFeatureFreeKeyList | ||
| 456 | - | Purpose : Free key list | ||
| 457 | - | Arguments : pKeyList [in] key list to be free. | ||
| 458 | - | Returns : None | ||
| 459 | - | Comments : | ||
| 460 | - \---------------------------------------------------------------------------*/ | ||
| 461 | - static void UserFeatureFreeKeyList(MOS_PUF_KEYLIST pKeyList); | ||
| 462 | - | ||
| 463 | /*---------------------------------------------------------------------------- | ||
| 464 | | Name : UserFeatureSetValue | ||
| 465 | | Purpose : Modify or add a value of the specified user feature key. | ||
| 466 | @@ -290,6 +290,7 @@ private: | ||
| 467 | |||
| 468 | public: | ||
| 469 | static const char* m_szUserFeatureFile; | ||
| 470 | + static MOS_PUF_KEYLIST m_ufKeyList; | ||
| 471 | static int32_t m_mosTraceFd; | ||
| 472 | static const char* const m_mosTracePath; | ||
| 473 | static std::map<std::string, std::map<std::string, std::string>> m_regBuffer; | ||
| 474 | -- | ||
| 475 | 2.31.1 | ||
| 476 | |||
diff --git a/recipes-multimedia/libva/intel-media-driver_21.3.5.bb b/recipes-multimedia/libva/intel-media-driver_21.3.5.bb index b7b5727b..cc32b86b 100644 --- a/recipes-multimedia/libva/intel-media-driver_21.3.5.bb +++ b/recipes-multimedia/libva/intel-media-driver_21.3.5.bb | |||
| @@ -19,6 +19,7 @@ REQUIRED_DISTRO_FEATURES = "opengl" | |||
| 19 | DEPENDS += "libva gmmlib" | 19 | DEPENDS += "libva gmmlib" |
| 20 | 20 | ||
| 21 | SRC_URI = "git://github.com/intel/media-driver.git;protocol=https;nobranch=1 \ | 21 | SRC_URI = "git://github.com/intel/media-driver.git;protocol=https;nobranch=1 \ |
| 22 | file://0001-MOS-user-setting-reentrant.patch \ | ||
| 22 | " | 23 | " |
| 23 | 24 | ||
| 24 | SRCREV = "ec4dc5d653733c21f8bf390794674052b5abdb09" | 25 | SRCREV = "ec4dc5d653733c21f8bf390794674052b5abdb09" |
