diff options
Diffstat (limited to 'drivers/gpu/drm/img/img-rogue/generated/rogue/rgxkicksync_bridge/server_rgxkicksync_bridge.c')
-rw-r--r-- | drivers/gpu/drm/img/img-rogue/generated/rogue/rgxkicksync_bridge/server_rgxkicksync_bridge.c | 54 |
1 files changed, 37 insertions, 17 deletions
diff --git a/drivers/gpu/drm/img/img-rogue/generated/rogue/rgxkicksync_bridge/server_rgxkicksync_bridge.c b/drivers/gpu/drm/img/img-rogue/generated/rogue/rgxkicksync_bridge/server_rgxkicksync_bridge.c index f9041f6a6044..25f68f302280 100644 --- a/drivers/gpu/drm/img/img-rogue/generated/rogue/rgxkicksync_bridge/server_rgxkicksync_bridge.c +++ b/drivers/gpu/drm/img/img-rogue/generated/rogue/rgxkicksync_bridge/server_rgxkicksync_bridge.c @@ -179,12 +179,13 @@ PVRSRVBridgeRGXDestroyKickSyncContext(IMG_UINT32 ui32DispatchTableEntry, LockHandle(psConnection->psHandleBase); psRGXDestroyKickSyncContextOUT->eError = - PVRSRVReleaseHandleStagedUnlock(psConnection->psHandleBase, - (IMG_HANDLE) psRGXDestroyKickSyncContextIN-> - hKickSyncContext, - PVRSRV_HANDLE_TYPE_RGX_SERVER_KICKSYNC_CONTEXT); + PVRSRVDestroyHandleStagedUnlocked(psConnection->psHandleBase, + (IMG_HANDLE) psRGXDestroyKickSyncContextIN-> + hKickSyncContext, + PVRSRV_HANDLE_TYPE_RGX_SERVER_KICKSYNC_CONTEXT); if (unlikely ((psRGXDestroyKickSyncContextOUT->eError != PVRSRV_OK) + && (psRGXDestroyKickSyncContextOUT->eError != PVRSRV_ERROR_KERNEL_CCB_FULL) && (psRGXDestroyKickSyncContextOUT->eError != PVRSRV_ERROR_RETRY))) { PVR_DPF((PVR_DBG_ERROR, @@ -202,6 +203,11 @@ RGXDestroyKickSyncContext_exit: return 0; } +static_assert(PVRSRV_MAX_DEV_VARS <= IMG_UINT32_MAX, + "PVRSRV_MAX_DEV_VARS must not be larger than IMG_UINT32_MAX"); +static_assert(PVRSRV_SYNC_NAME_LENGTH <= IMG_UINT32_MAX, + "PVRSRV_SYNC_NAME_LENGTH must not be larger than IMG_UINT32_MAX"); + static IMG_INT PVRSRVBridgeRGXKickSync2(IMG_UINT32 ui32DispatchTableEntry, IMG_UINT8 * psRGXKickSync2IN_UI8, @@ -226,12 +232,14 @@ PVRSRVBridgeRGXKickSync2(IMG_UINT32 ui32DispatchTableEntry, IMG_BOOL bHaveEnoughSpace = IMG_FALSE; #endif - IMG_UINT32 ui32BufferSize = - (psRGXKickSync2IN->ui32ClientUpdateCount * sizeof(SYNC_PRIMITIVE_BLOCK *)) + - (psRGXKickSync2IN->ui32ClientUpdateCount * sizeof(IMG_HANDLE)) + - (psRGXKickSync2IN->ui32ClientUpdateCount * sizeof(IMG_UINT32)) + - (psRGXKickSync2IN->ui32ClientUpdateCount * sizeof(IMG_UINT32)) + - (PVRSRV_SYNC_NAME_LENGTH * sizeof(IMG_CHAR)) + 0; + IMG_UINT32 ui32BufferSize = 0; + IMG_UINT64 ui64BufferSize = + ((IMG_UINT64) psRGXKickSync2IN->ui32ClientUpdateCount * + sizeof(SYNC_PRIMITIVE_BLOCK *)) + + ((IMG_UINT64) psRGXKickSync2IN->ui32ClientUpdateCount * sizeof(IMG_HANDLE)) + + ((IMG_UINT64) psRGXKickSync2IN->ui32ClientUpdateCount * sizeof(IMG_UINT32)) + + ((IMG_UINT64) psRGXKickSync2IN->ui32ClientUpdateCount * sizeof(IMG_UINT32)) + + ((IMG_UINT64) PVRSRV_SYNC_NAME_LENGTH * sizeof(IMG_CHAR)) + 0; if (unlikely(psRGXKickSync2IN->ui32ClientUpdateCount > PVRSRV_MAX_DEV_VARS)) { @@ -239,6 +247,14 @@ PVRSRVBridgeRGXKickSync2(IMG_UINT32 ui32DispatchTableEntry, goto RGXKickSync2_exit; } + if (ui64BufferSize > IMG_UINT32_MAX) + { + psRGXKickSync2OUT->eError = PVRSRV_ERROR_BRIDGE_BUFFER_TOO_SMALL; + goto RGXKickSync2_exit; + } + + ui32BufferSize = (IMG_UINT32) ui64BufferSize; + if (ui32BufferSize != 0) { #if !defined(INTEGRITY_OS) @@ -259,7 +275,7 @@ PVRSRVBridgeRGXKickSync2(IMG_UINT32 ui32DispatchTableEntry, else #endif { - pArrayArgsBuffer = OSAllocZMemNoStats(ui32BufferSize); + pArrayArgsBuffer = OSAllocMemNoStats(ui32BufferSize); if (!pArrayArgsBuffer) { @@ -273,6 +289,9 @@ PVRSRVBridgeRGXKickSync2(IMG_UINT32 ui32DispatchTableEntry, { psUpdateUFODevVarBlockInt = (SYNC_PRIMITIVE_BLOCK **) IMG_OFFSET_ADDR(pArrayArgsBuffer, ui32NextOffset); + OSCachedMemSet(psUpdateUFODevVarBlockInt, 0, + psRGXKickSync2IN->ui32ClientUpdateCount * + sizeof(SYNC_PRIMITIVE_BLOCK *)); ui32NextOffset += psRGXKickSync2IN->ui32ClientUpdateCount * sizeof(SYNC_PRIMITIVE_BLOCK *); hUpdateUFODevVarBlockInt2 = @@ -395,7 +414,6 @@ PVRSRVBridgeRGXKickSync2(IMG_UINT32 ui32DispatchTableEntry, psRGXKickSync2OUT->eError = PVRSRVRGXKickSyncKM(psKickSyncContextInt, - psRGXKickSync2IN->ui32ClientCacheOpSeqNum, psRGXKickSync2IN->ui32ClientUpdateCount, psUpdateUFODevVarBlockInt, ui32UpdateDevVarOffsetInt, @@ -426,7 +444,7 @@ RGXKickSync2_exit: { /* Unreference the previously looked up handle */ - if (hUpdateUFODevVarBlockInt2[i]) + if (psUpdateUFODevVarBlockInt[i]) { PVRSRVReleaseHandleUnlocked(psConnection->psHandleBase, hUpdateUFODevVarBlockInt2[i], @@ -438,7 +456,10 @@ RGXKickSync2_exit: UnlockHandle(psConnection->psHandleBase); /* Allocated space should be equal to the last updated offset */ - PVR_ASSERT(ui32BufferSize == ui32NextOffset); +#ifdef PVRSRV_NEED_PVR_ASSERT + if (psRGXKickSync2OUT->eError == PVRSRV_OK) + PVR_ASSERT(ui32BufferSize == ui32NextOffset); +#endif /* PVRSRV_NEED_PVR_ASSERT */ #if defined(INTEGRITY_OS) if (pArrayArgsBuffer) @@ -512,7 +533,7 @@ RGXSetKickSyncContextProperty_exit: */ PVRSRV_ERROR InitRGXKICKSYNCBridge(void); -PVRSRV_ERROR DeinitRGXKICKSYNCBridge(void); +void DeinitRGXKICKSYNCBridge(void); /* * Register all RGXKICKSYNC functions with services @@ -541,7 +562,7 @@ PVRSRV_ERROR InitRGXKICKSYNCBridge(void) /* * Unregister all rgxkicksync functions with services */ -PVRSRV_ERROR DeinitRGXKICKSYNCBridge(void) +void DeinitRGXKICKSYNCBridge(void) { UnsetDispatchTableEntry(PVRSRV_BRIDGE_RGXKICKSYNC, @@ -555,5 +576,4 @@ PVRSRV_ERROR DeinitRGXKICKSYNCBridge(void) UnsetDispatchTableEntry(PVRSRV_BRIDGE_RGXKICKSYNC, PVRSRV_BRIDGE_RGXKICKSYNC_RGXSETKICKSYNCCONTEXTPROPERTY); - return PVRSRV_OK; } |