From: Rob Clark <robdclark@gmail.com>
To: dri-devel@lists.freedesktop.org
Cc: maarten.lankhorst@canonical.com, linux-arm-msm@vger.kernel.org,
freedreno@lists.freedesktop.org
Subject: [PATCH 07/11] drm/msm/gpu: simplify tracking in-flight bo's
Date: Fri, 18 Mar 2016 19:15:00 -0400 [thread overview]
Message-ID: <1458342904-23326-8-git-send-email-robdclark@gmail.com> (raw)
In-Reply-To: <1458342904-23326-1-git-send-email-robdclark@gmail.com>
Since we already track the array of bo's in the submit object, just
unconditionally take and drop ref's per submit (rather than only taking
ref's if bo is not already active). This simplifies later patches.
Signed-off-by: Rob Clark <robdclark@gmail.com>
---
drivers/gpu/drm/msm/msm_gpu.c | 51 +++++++++++++++++++------------------------
1 file changed, 22 insertions(+), 29 deletions(-)
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index 5f6704c..dfa72b8 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -432,6 +432,22 @@ out:
* Cmdstream submission/retirement:
*/
+static void retire_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit)
+{
+ int i;
+
+ for (i = 0; i < submit->nr_bos; i++) {
+ struct msm_gem_object *msm_obj = submit->bos[i].obj;
+ /* move to inactive: */
+ msm_gem_move_to_inactive(&msm_obj->base);
+ msm_gem_put_iova(&msm_obj->base, gpu->id);
+ drm_gem_object_unreference(&msm_obj->base);
+ }
+
+ list_del(&submit->node);
+ kfree(submit);
+}
+
static void retire_submits(struct msm_gpu *gpu, uint32_t fence)
{
struct drm_device *dev = gpu->dev;
@@ -445,8 +461,7 @@ static void retire_submits(struct msm_gpu *gpu, uint32_t fence)
struct msm_gem_submit, node);
if (submit->fence <= fence) {
- list_del(&submit->node);
- kfree(submit);
+ retire_submit(gpu, submit);
} else {
break;
}
@@ -462,26 +477,7 @@ static void retire_worker(struct work_struct *work)
msm_update_fence(gpu->dev, fence);
mutex_lock(&dev->struct_mutex);
-
retire_submits(gpu, fence);
-
- while (!list_empty(&gpu->active_list)) {
- struct msm_gem_object *obj;
-
- obj = list_first_entry(&gpu->active_list,
- struct msm_gem_object, mm_list);
-
- if ((obj->read_fence <= fence) &&
- (obj->write_fence <= fence)) {
- /* move to inactive: */
- msm_gem_move_to_inactive(&obj->base);
- msm_gem_put_iova(&obj->base, gpu->id);
- drm_gem_object_unreference(&obj->base);
- } else {
- break;
- }
- }
-
mutex_unlock(&dev->struct_mutex);
if (!msm_gpu_active(gpu))
@@ -522,20 +518,17 @@ int msm_gpu_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit,
for (i = 0; i < submit->nr_bos; i++) {
struct msm_gem_object *msm_obj = submit->bos[i].obj;
+ uint32_t iova;
/* can't happen yet.. but when we add 2d support we'll have
* to deal w/ cross-ring synchronization:
*/
WARN_ON(is_active(msm_obj) && (msm_obj->gpu != gpu));
- if (!is_active(msm_obj)) {
- uint32_t iova;
-
- /* ring takes a reference to the bo and iova: */
- drm_gem_object_reference(&msm_obj->base);
- msm_gem_get_iova_locked(&msm_obj->base,
- submit->gpu->id, &iova);
- }
+ /* submit takes a reference to the bo and iova until retired: */
+ drm_gem_object_reference(&msm_obj->base);
+ msm_gem_get_iova_locked(&msm_obj->base,
+ submit->gpu->id, &iova);
if (submit->bos[i].flags & MSM_SUBMIT_BO_READ)
msm_gem_move_to_active(&msm_obj->base, gpu, false, submit->fence);
--
2.5.0
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2016-03-18 23:15 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-18 23:14 [PATCH 00/11] drm/msm: fencification Rob Clark
2016-03-18 23:14 ` [PATCH 01/11] reservation: add reservation_object_get_excl_unlocked() Rob Clark
2016-03-18 23:14 ` [PATCH 02/11] drm/atomic: export drm_atomic_helper_wait_for_fences() Rob Clark
2016-03-30 20:51 ` Gustavo Padovan
2016-03-31 5:57 ` Daniel Vetter
2016-03-18 23:14 ` [PATCH 03/11] drm/msm: move debugfs code to it's own file Rob Clark
2016-03-18 23:14 ` [PATCH 04/11] drm/msm: move fence " Rob Clark
2016-03-18 23:14 ` [PATCH 05/11] drm/msm: use imported dmabuf's reservation object Rob Clark
2016-03-18 23:14 ` [PATCH 06/11] drm/msm: split out timeout_to_jiffies helper Rob Clark
2016-03-18 23:15 ` Rob Clark [this message]
2016-03-18 23:15 ` [PATCH 08/11] drm/msm: split locking and pinning BO's Rob Clark
2016-03-18 23:15 ` [PATCH 09/11] drm/msm: introduce msm_fence_context Rob Clark
2016-03-18 23:15 ` [PATCH 10/11] drm/msm: remove fence_cbs Rob Clark
2016-03-18 23:15 ` [PATCH 11/11] drm/msm: 'struct fence' conversion Rob Clark
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=1458342904-23326-8-git-send-email-robdclark@gmail.com \
--to=robdclark@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=maarten.lankhorst@canonical.com \
/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;
as well as URLs for NNTP newsgroup(s).