diff options
| author | Josip Pavic <[email protected]> | 2020-04-05 20:40:41 +0000 |
|---|---|---|
| committer | Alex Deucher <[email protected]> | 2020-04-09 14:43:16 +0000 |
| commit | 5b5c1777bd3ce3ae3a448c8c8df3c724d1bfa9fe (patch) | |
| tree | 0ed57e79a095536319586c177993ea1c5fe337f6 /drivers/gpu/drm/amd/display/modules/power/power_helpers.c | |
| parent | drm/amd/display: 3.2.78 (diff) | |
| download | kernel-5b5c1777bd3ce3ae3a448c8c8df3c724d1bfa9fe.tar.gz kernel-5b5c1777bd3ce3ae3a448c8c8df3c724d1bfa9fe.zip | |
drm/amd/display: prevent loop from occuring in pipe list
[Why]
If no free pipes are available, acquire_first_split_pipe is called to
get a pipe to use. This call may alter the ordering of the pipes in the
list so that, for example, the tail pipe changes.
If acquire_first_split_pipe returns the tail pipe, we'll have free_pipe
== tail_pipe. What tail_pipe refers to is not the current tail_pipe, but
what was previously the tail pipe - i.e. prior to the call to
acquire_first_split_pipe
The logic that follows will link free_pipe to the tail pipe, referring to
the current tail pipe. However, since tail_pipe is cached from before the
call to acquire_first_split_pipe, the wrong tail pipe will be used, and
it will end up being linked to itself, creating a loop that, if traversed,
will result in a soft hang.
[How]
Do not cache the tail pipe. Instead, check the tail pipe after the call to
acquire_first_split_pipe is made.
Signed-off-by: Josip Pavic <[email protected]>
Reviewed-by: Aric Cyr <[email protected]>
Acked-by: Rodrigo Siqueira <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
Diffstat (limited to 'drivers/gpu/drm/amd/display/modules/power/power_helpers.c')
0 files changed, 0 insertions, 0 deletions
