Merge "disp: msm: sde: check all dirty properties during plane update"

This commit is contained in:
qctecmdr
2019-10-31 22:54:19 -07:00
committed by Gerrit - the friendly Code Review server
4 changed files with 9 additions and 6 deletions

View File

@@ -77,7 +77,8 @@ int msm_property_pop_dirty(struct msm_property_info *info,
return -EINVAL; return -EINVAL;
} }
mutex_lock(&info->property_lock); WARN_ON(!mutex_is_locked(&info->property_lock));
if (list_empty(&property_state->dirty_list)) { if (list_empty(&property_state->dirty_list)) {
rc = -EAGAIN; rc = -EAGAIN;
} else { } else {
@@ -87,7 +88,6 @@ int msm_property_pop_dirty(struct msm_property_info *info,
- property_state->values; - property_state->values;
DRM_DEBUG_KMS("property %d dirty\n", rc); DRM_DEBUG_KMS("property %d dirty\n", rc);
} }
mutex_unlock(&info->property_lock);
return rc; return rc;
} }

View File

@@ -162,7 +162,9 @@ bool msm_property_get_is_active(struct msm_property_info *info)
/** /**
* msm_property_pop_dirty - determine next dirty property and clear * msm_property_pop_dirty - determine next dirty property and clear
* its dirty flag * its dirty flag. Caller needs to acquire property
* lock before calling this function and release
* the lock when finished.
* @info: Pointer to property info container struct * @info: Pointer to property info container struct
* @property_state: Pointer to property state container struct * @property_state: Pointer to property state container struct
* Returns: Valid msm property index on success, * Returns: Valid msm property index on success,

View File

@@ -701,6 +701,7 @@ static int _sde_connector_update_dirty_properties(
c_conn = to_sde_connector(connector); c_conn = to_sde_connector(connector);
c_state = to_sde_connector_state(connector->state); c_state = to_sde_connector_state(connector->state);
mutex_lock(&c_conn->property_info.property_lock);
while ((idx = msm_property_pop_dirty(&c_conn->property_info, while ((idx = msm_property_pop_dirty(&c_conn->property_info,
&c_state->property_state)) >= 0) { &c_state->property_state)) >= 0) {
switch (idx) { switch (idx) {
@@ -723,6 +724,7 @@ static int _sde_connector_update_dirty_properties(
break; break;
} }
} }
mutex_unlock(&c_conn->property_info.property_lock);
/* if colorspace needs to be updated do it first */ /* if colorspace needs to be updated do it first */
if (c_conn->colorspace_updated) { if (c_conn->colorspace_updated) {

View File

@@ -3182,14 +3182,13 @@ static int sde_plane_sspp_atomic_update(struct drm_plane *plane,
} }
/* determine what needs to be refreshed */ /* determine what needs to be refreshed */
mutex_lock(&psde->property_info.property_lock);
while ((idx = msm_property_pop_dirty(&psde->property_info, while ((idx = msm_property_pop_dirty(&psde->property_info,
&pstate->property_state)) >= 0) { &pstate->property_state)) >= 0) {
dirty_prop_flag = plane_prop_array[idx]; dirty_prop_flag = plane_prop_array[idx];
pstate->dirty |= dirty_prop_flag; pstate->dirty |= dirty_prop_flag;
if (dirty_prop_flag == SDE_PLANE_DIRTY_ALL)
break;
} }
mutex_unlock(&psde->property_info.property_lock);
/** /**
* since plane_atomic_check is invoked before crtc_atomic_check * since plane_atomic_check is invoked before crtc_atomic_check