From: Alex Deucher <alexdeucher@gmail.com>
To: stable@vger.kernel.org
Cc: nicholas.kazlauskas@amd.com,
Alex Deucher <alexander.deucher@amd.com>,
David Francis <david.francis@amd.com>
Subject: [PATCH 2/3] drm/amd/display: Skip determining update type for async updates
Date: Fri, 20 Sep 2019 09:03:37 -0500 [thread overview]
Message-ID: <20190920140338.3172-3-alexander.deucher@amd.com> (raw)
In-Reply-To: <20190920140338.3172-1-alexander.deucher@amd.com>
From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
[Why]
By passing through the dm_determine_update_type_for_commit for atomic
commits that can be done asynchronously we are incurring a
performance penalty by locking access to the global private object
and holding that access until the end of the programming sequence.
This is also allocating a new large dc_state on every access in addition
to retaining all the references on each stream and plane until the end
of the programming sequence.
[How]
Shift the determination for async update before validation. Return early
if it's going to be an async update.
Bug: https://bugzilla.kernel.org/show_bug.cgi?id=204181
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: David Francis <david.francis@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 43d10d30df156f7834fa91aecb69614fefc8bb0a)
Cc: stable@vger.kernel.org
---
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 27 ++++++++++++++-----
1 file changed, 20 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index ab341fca9647..8df49740518e 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -7274,6 +7274,26 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
if (ret)
goto fail;
+ if (state->legacy_cursor_update) {
+ /*
+ * This is a fast cursor update coming from the plane update
+ * helper, check if it can be done asynchronously for better
+ * performance.
+ */
+ state->async_update =
+ !drm_atomic_helper_async_check(dev, state);
+
+ /*
+ * Skip the remaining global validation if this is an async
+ * update. Cursor updates can be done without affecting
+ * state or bandwidth calcs and this avoids the performance
+ * penalty of locking the private state object and
+ * allocating a new dc_state.
+ */
+ if (state->async_update)
+ return 0;
+ }
+
/* Check scaling and underscan changes*/
/* TODO Removed scaling changes validation due to inability to commit
* new stream into context w\o causing full reset. Need to
@@ -7326,13 +7346,6 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
ret = -EINVAL;
goto fail;
}
- } else if (state->legacy_cursor_update) {
- /*
- * This is a fast cursor update coming from the plane update
- * helper, check if it can be done asynchronously for better
- * performance.
- */
- state->async_update = !drm_atomic_helper_async_check(dev, state);
}
/* Must be success */
--
2.20.1
next prev parent reply other threads:[~2019-09-20 14:04 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-20 14:03 [PATCH 0/3] amdgpu DC fixes for stable Alex Deucher
2019-09-20 14:03 ` [PATCH 1/3] drm/amd/display: Allow cursor async updates for framebuffer swaps Alex Deucher
2019-09-20 14:03 ` Alex Deucher [this message]
2019-09-20 14:03 ` [PATCH 3/3] drm/amd/display: Don't replace the dc_state for fast updates Alex Deucher
2019-09-20 14:11 ` [PATCH 0/3] amdgpu DC fixes for stable Greg KH
2019-09-20 14:15 ` Deucher, Alexander
2019-09-22 8:14 ` Greg KH
-- strict thread matches above, loose matches on Subject: below --
2019-07-31 16:26 [PATCH 1/3] drm/amd/display: Allow cursor async updates for framebuffer swaps Nicholas Kazlauskas
[not found] ` <20190731162604.28509-1-nicholas.kazlauskas-5C7GfCeVMHo@public.gmane.org>
2019-07-31 16:26 ` [PATCH 2/3] drm/amd/display: Skip determining update type for async updates Nicholas Kazlauskas
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=20190920140338.3172-3-alexander.deucher@amd.com \
--to=alexdeucher@gmail.com \
--cc=alexander.deucher@amd.com \
--cc=david.francis@amd.com \
--cc=nicholas.kazlauskas@amd.com \
--cc=stable@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.