Explorar o código

Merge "disp: msm: dp: change to internal lm bookkeeping"

qctecmdr %!s(int64=2) %!d(string=hai) anos
pai
achega
31acaaa2f5
Modificáronse 1 ficheiros con 9 adicións e 3 borrados
  1. 9 3
      msm/dp/dp_display.c

+ 9 - 3
msm/dp/dp_display.c

@@ -2851,8 +2851,10 @@ static int dp_display_unprepare(struct dp_display *dp_display, void *panel)
 	/* log this as it results from user action of cable dis-connection */
 	DP_INFO("[OK]\n");
 end:
+	mutex_lock(&dp->accounting_lock);
 	dp->tot_lm_blks_in_use -= dp_panel->max_lm;
 	dp_panel->max_lm = 0;
+	mutex_unlock(&dp->accounting_lock);
 	dp_panel->deinit(dp_panel, flags);
 	mutex_unlock(&dp->session_lock);
 	SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state);
@@ -3050,9 +3052,13 @@ static enum drm_mode_status dp_display_validate_mode(
 
 	mode_status = MODE_OK;
 
-	dp->tot_lm_blks_in_use -= dp_panel->max_lm;
-	dp_panel->max_lm = max(dp_panel->max_lm, dp_mode.lm_count);
-	dp->tot_lm_blks_in_use += dp_panel->max_lm;
+	if (!avail_res->num_lm_in_use) {
+		mutex_lock(&dp->accounting_lock);
+		dp->tot_lm_blks_in_use -= dp_panel->max_lm;
+		dp_panel->max_lm = max(dp_panel->max_lm, dp_mode.lm_count);
+		dp->tot_lm_blks_in_use += dp_panel->max_lm;
+		mutex_unlock(&dp->accounting_lock);
+	}
 
 end:
 	mutex_unlock(&dp->session_lock);