Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Lyude Paul <lyude@redhat.com>
To: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org,
	amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org
Cc: Thomas Zimmermann <tzimmermann@suse.de>,
	Jani Nikula <jani.nikula@intel.com>,
	Daniel Vetter <daniel.vetter@ffwll.ch>,
	Javier Martinez Canillas <javierm@redhat.com>,
	open list <linux-kernel@vger.kernel.org>,
	Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>,
	David Airlie <airlied@linux.ie>, Fangzhi Zuo <Jerry.Zuo@amd.com>,
	Daniel Vetter <daniel@ffwll.ch>, Wayne Lin <Wayne.Lin@amd.com>
Subject: [Intel-gfx] [RFC v2 16/18] drm/display/dp_mst: Maintain time slot allocations when deleting payloads
Date: Mon,  8 Aug 2022 19:52:01 -0400	[thread overview]
Message-ID: <20220808235203.123892-17-lyude@redhat.com> (raw)
In-Reply-To: <20220808235203.123892-1-lyude@redhat.com>

Currently, we set drm_dp_atomic_payload->time_slots to 0 in order to
indicate that we're about to delete a payload in the current atomic state.
Since we're going to be dropping all of the legacy code for handling the
payload table however, we need to be able to ensure that we still keep
track of the current time slot allocations for each payload so we can reuse
this info when asking the root MST hub to delete payloads. We'll also be
using it to recalculate the start slots of each VC.

So, let's keep track of the intent of a payload in drm_dp_atomic_payload by
adding ->delete, which we set whenever we're planning on deleting a payload
during the current atomic commit.

Signed-off-by: Lyude Paul <lyude@redhat.com>
Cc: Wayne Lin <Wayne.Lin@amd.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Fangzhi Zuo <Jerry.Zuo@amd.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Imre Deak <imre.deak@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Sean Paul <sean@poorly.run>
Acked-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/display/drm_dp_mst_topology.c | 14 +++++++-------
 include/drm/display/drm_dp_mst_helper.h       |  5 ++++-
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c
index e9cf09a4b2a4..3fce1ed8d5e8 100644
--- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
@@ -4399,7 +4399,7 @@ int drm_dp_atomic_find_time_slots(struct drm_atomic_state *state,
 		 * releasing and allocating the same timeslot allocation,
 		 * which is an error
 		 */
-		if (WARN_ON(!prev_slots)) {
+		if (drm_WARN_ON(mgr->dev, payload->delete)) {
 			drm_err(mgr->dev,
 				"cannot allocate and release time slots on [MST PORT:%p] in the same state\n",
 				port);
@@ -4504,10 +4504,10 @@ int drm_dp_atomic_release_time_slots(struct drm_atomic_state *state,
 	}
 
 	drm_dbg_atomic(mgr->dev, "[MST PORT:%p] TU %d -> 0\n", port, payload->time_slots);
-	if (payload->time_slots) {
+	if (!payload->delete) {
 		drm_dp_mst_put_port_malloc(port);
-		payload->time_slots = 0;
 		payload->pbn = 0;
+		payload->delete = true;
 	}
 
 	return 0;
@@ -5222,7 +5222,7 @@ drm_dp_mst_duplicate_state(struct drm_private_obj *obj)
 
 	list_for_each_entry(pos, &old_state->payloads, next) {
 		/* Prune leftover freed timeslot allocations */
-		if (!pos->time_slots)
+		if (pos->delete)
 			continue;
 
 		payload = kmemdup(pos, sizeof(*payload), GFP_KERNEL);
@@ -5254,8 +5254,8 @@ static void drm_dp_mst_destroy_state(struct drm_private_obj *obj,
 	int i;
 
 	list_for_each_entry_safe(pos, tmp, &mst_state->payloads, next) {
-		/* We only keep references to ports with non-zero VCPIs */
-		if (pos->time_slots)
+		/* We only keep references to ports with active payloads */
+		if (!pos->delete)
 			drm_dp_mst_put_port_malloc(pos->port);
 		kfree(pos);
 	}
@@ -5383,7 +5383,7 @@ drm_dp_mst_atomic_check_payload_alloc_limits(struct drm_dp_mst_topology_mgr *mgr
 
 	list_for_each_entry(payload, &mst_state->payloads, next) {
 		/* Releasing payloads is always OK-even if the port is gone */
-		if (!payload->time_slots) {
+		if (payload->delete) {
 			drm_dbg_atomic(mgr->dev, "[MST PORT:%p] releases all time slots\n",
 				       payload->port);
 			continue;
diff --git a/include/drm/display/drm_dp_mst_helper.h b/include/drm/display/drm_dp_mst_helper.h
index b9c361b242ea..8b847836a0b4 100644
--- a/include/drm/display/drm_dp_mst_helper.h
+++ b/include/drm/display/drm_dp_mst_helper.h
@@ -560,8 +560,11 @@ struct drm_dp_mst_atomic_payload {
 	int time_slots;
 	/** @pbn: The payload bandwidth for this payload */
 	int pbn;
+
+	/** @delete: Whether or not we intend to delete this payload during this atomic commit */
+	bool delete : 1;
 	/** @dsc_enabled: Whether or not this payload has DSC enabled */
-	bool dsc_enabled;
+	bool dsc_enabled : 1;
 
 	/** @next: The list node for this payload */
 	struct list_head next;
-- 
2.37.1


  parent reply	other threads:[~2022-08-08 23:58 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-08 23:51 [Intel-gfx] [RFC v2 00/18] drm/display/dp_mst: Drop Radeon MST support, make MST atomic-only Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 01/18] drm/amdgpu/dc/mst: Rename dp_mst_stream_allocation(_table) Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 02/18] drm/amdgpu/dm/mst: Rename get_payload_table() Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 03/18] drm/display/dp_mst: Rename drm_dp_mst_vcpi_allocation Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 04/18] drm/display/dp_mst: Call them time slots, not VCPI slots Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 05/18] drm/display/dp_mst: Fix confusing docs for drm_dp_atomic_release_time_slots() Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 06/18] drm/display/dp_mst: Add some missing kdocs for atomic MST structs Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 07/18] drm/display/dp_mst: Add helper for finding payloads in atomic MST state Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 08/18] drm/display/dp_mst: Add nonblocking helpers for DP MST Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 09/18] drm/display/dp_mst: Don't open code modeset checks for releasing time slots Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 10/18] drm/display/dp_mst: Fix modeset tracking in drm_dp_atomic_release_vcpi_slots() Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 11/18] drm/nouveau/kms: Cache DP encoders in nouveau_connector Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 12/18] drm/nouveau/kms: Pull mst state in for all modesets Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 13/18] drm/display/dp_mst: Add helpers for serializing SST <-> MST transitions Lyude Paul
2022-08-09 23:42   ` [Intel-gfx] [RFC v3] " Lyude Paul
2022-08-08 23:51 ` [Intel-gfx] [RFC v2 14/18] drm/display/dp_mst: Drop all ports from topology on CSNs before queueing link address work Lyude Paul
2022-08-08 23:52 ` [Intel-gfx] [RFC v2 15/18] drm/display/dp_mst: Skip releasing payloads if last connected port isn't connected Lyude Paul
2022-08-08 23:52 ` Lyude Paul [this message]
2022-08-08 23:52 ` [Intel-gfx] [RFC v2 17/18] drm/radeon: Drop legacy MST support Lyude Paul
2022-08-08 23:52 ` [Intel-gfx] [RFC v2 18/18] drm/display/dp_mst: Move all payload info into the atomic state Lyude Paul
2022-08-09  0:21 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/display/dp_mst: Drop Radeon MST support, make MST atomic-only Patchwork
2022-08-09  0:43 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
2022-08-10  0:25 ` [Intel-gfx] ✓ Fi.CI.BAT: success for drm/display/dp_mst: Drop Radeon MST support, make MST atomic-only (rev2) Patchwork
2022-08-10  3:08 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2022-08-10 20:35 ` [Intel-gfx] ✓ Fi.CI.BAT: success for drm/display/dp_mst: Drop Radeon MST support, make MST atomic-only (rev3) Patchwork
2022-08-11  9:46 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220808235203.123892-17-lyude@redhat.com \
    --to=lyude@redhat.com \
    --cc=Bhawanpreet.Lakha@amd.com \
    --cc=Jerry.Zuo@amd.com \
    --cc=Wayne.Lin@amd.com \
    --cc=airlied@linux.ie \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=daniel.vetter@ffwll.ch \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@intel.com \
    --cc=javierm@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nouveau@lists.freedesktop.org \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox