disp: msm: sde: fix to avoid creating hw-fences for empty spec fences
Current display driver sets the hw-fences as valid even when the speculative fence is empty. Avoid this issue by doing a positive check and only create hw-fences if all the fences in the speculative fence are valid. Change-Id: Iec9636641ac9146eb651be08615e2478994c2508 Signed-off-by: Ingrid Gallardo <quic_ingridg@quicinc.com>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
275c881ae4
commit
188cfbc717
@@ -3725,7 +3725,6 @@ static struct dma_fence *_sde_plane_get_input_hw_fence(struct drm_plane *plane)
|
||||
struct dma_fence *input_hw_fence = NULL;
|
||||
struct dma_fence_array *array = NULL;
|
||||
struct dma_fence *spec_fence = NULL;
|
||||
bool spec_hw_fence = true;
|
||||
int i;
|
||||
|
||||
if (!plane || !plane->state) {
|
||||
@@ -3741,6 +3740,8 @@ static struct dma_fence *_sde_plane_get_input_hw_fence(struct drm_plane *plane)
|
||||
fence = (struct dma_fence *)pstate->input_fence;
|
||||
|
||||
if (test_bit(SPEC_FENCE_FLAG_FENCE_ARRAY, &fence->flags)) {
|
||||
bool spec_hw_fence = false;
|
||||
|
||||
array = container_of(fence, struct dma_fence_array, base);
|
||||
if (IS_ERR_OR_NULL(array))
|
||||
goto exit;
|
||||
@@ -3751,9 +3752,18 @@ static struct dma_fence *_sde_plane_get_input_hw_fence(struct drm_plane *plane)
|
||||
|
||||
for (i = 0; i < array->num_fences; i++) {
|
||||
spec_fence = array->fences[i];
|
||||
if (IS_ERR_OR_NULL(spec_fence) ||
|
||||
!(test_bit(MSM_HW_FENCE_FLAG_ENABLED_BIT,
|
||||
&spec_fence->flags))) {
|
||||
|
||||
if (!IS_ERR_OR_NULL(spec_fence) &&
|
||||
test_bit(MSM_HW_FENCE_FLAG_ENABLED_BIT,
|
||||
&spec_fence->flags)) {
|
||||
spec_hw_fence = true;
|
||||
} else {
|
||||
/*
|
||||
* all child-fences of the spec fence must be hw-fences for
|
||||
* this fence to be considered hw-fence. Otherwise just
|
||||
* fail here to set the hw-fences and driver will use
|
||||
* sw-fences instead.
|
||||
*/
|
||||
spec_hw_fence = false;
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user