mirror of https://gitee.com/openkylin/linux.git
drm/amd/display: Skip determining update type for async updates
[Why] By passing through the dm_determine_update_type_for_commit for atomic commits that can be done asynchronously we are incurring a performance penalty by locking access to the global private object and holding that access until the end of the programming sequence. This is also allocating a new large dc_state on every access in addition to retaining all the references on each stream and plane until the end of the programming sequence. [How] Shift the determination for async update before validation. Return early if it's going to be an async update. Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: David Francis <david.francis@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
e16e37efb4
commit
43d10d30df
|
@ -7275,6 +7275,26 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
|
|||
if (ret)
|
||||
goto fail;
|
||||
|
||||
if (state->legacy_cursor_update) {
|
||||
/*
|
||||
* This is a fast cursor update coming from the plane update
|
||||
* helper, check if it can be done asynchronously for better
|
||||
* performance.
|
||||
*/
|
||||
state->async_update =
|
||||
!drm_atomic_helper_async_check(dev, state);
|
||||
|
||||
/*
|
||||
* Skip the remaining global validation if this is an async
|
||||
* update. Cursor updates can be done without affecting
|
||||
* state or bandwidth calcs and this avoids the performance
|
||||
* penalty of locking the private state object and
|
||||
* allocating a new dc_state.
|
||||
*/
|
||||
if (state->async_update)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Check scaling and underscan changes*/
|
||||
/* TODO Removed scaling changes validation due to inability to commit
|
||||
* new stream into context w\o causing full reset. Need to
|
||||
|
@ -7327,13 +7347,6 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
|
|||
ret = -EINVAL;
|
||||
goto fail;
|
||||
}
|
||||
} else if (state->legacy_cursor_update) {
|
||||
/*
|
||||
* This is a fast cursor update coming from the plane update
|
||||
* helper, check if it can be done asynchronously for better
|
||||
* performance.
|
||||
*/
|
||||
state->async_update = !drm_atomic_helper_async_check(dev, state);
|
||||
}
|
||||
|
||||
/* Must be success */
|
||||
|
|
Loading…
Reference in New Issue