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 *input_hw_fence = NULL;
|
||||||
struct dma_fence_array *array = NULL;
|
struct dma_fence_array *array = NULL;
|
||||||
struct dma_fence *spec_fence = NULL;
|
struct dma_fence *spec_fence = NULL;
|
||||||
bool spec_hw_fence = true;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!plane || !plane->state) {
|
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;
|
fence = (struct dma_fence *)pstate->input_fence;
|
||||||
|
|
||||||
if (test_bit(SPEC_FENCE_FLAG_FENCE_ARRAY, &fence->flags)) {
|
if (test_bit(SPEC_FENCE_FLAG_FENCE_ARRAY, &fence->flags)) {
|
||||||
|
bool spec_hw_fence = false;
|
||||||
|
|
||||||
array = container_of(fence, struct dma_fence_array, base);
|
array = container_of(fence, struct dma_fence_array, base);
|
||||||
if (IS_ERR_OR_NULL(array))
|
if (IS_ERR_OR_NULL(array))
|
||||||
goto exit;
|
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++) {
|
for (i = 0; i < array->num_fences; i++) {
|
||||||
spec_fence = array->fences[i];
|
spec_fence = array->fences[i];
|
||||||
if (IS_ERR_OR_NULL(spec_fence) ||
|
|
||||||
!(test_bit(MSM_HW_FENCE_FLAG_ENABLED_BIT,
|
if (!IS_ERR_OR_NULL(spec_fence) &&
|
||||||
&spec_fence->flags))) {
|
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;
|
spec_hw_fence = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user