From: "Christian König" <ckoenig.leichtzumerken@gmail.com>
To: "Deucher, Alexander" <Alexander.Deucher@amd.com>,
"amd-gfx@lists.freedesktop.org" <amd-gfx@lists.freedesktop.org>
Cc: "Tuikov, Luben" <Luben.Tuikov@amd.com>
Subject: Re: [PATCH 1/8] drm/scheduler: properly forward fence errors
Date: Mon, 24 Apr 2023 12:06:58 +0200 [thread overview]
Message-ID: <7cb2b22f-eec6-567b-dc1d-76adb9959ed5@gmail.com> (raw)
In-Reply-To: <BL1PR12MB5144DF199535F1DC66F981F4F7609@BL1PR12MB5144.namprd12.prod.outlook.com>
[-- Attachment #1: Type: text/plain, Size: 7582 bytes --]
I've pushed the scheduler patch to drm-misc-next and the whole set to
amd-staging-drm-next.
Christian.
Am 21.04.23 um 15:40 schrieb Deucher, Alexander:
>
> [AMD Official Use Only - General]
>
>
> Sure. We can pull it into amd-staging-drm-next as well if we need it
> for any customers in the short term.
>
> Alex
> ------------------------------------------------------------------------
> *From:* Christian König <ckoenig.leichtzumerken@gmail.com>
> *Sent:* Friday, April 21, 2023 9:27 AM
> *To:* amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>;
> Deucher, Alexander <Alexander.Deucher@amd.com>
> *Cc:* Tuikov, Luben <Luben.Tuikov@amd.com>
> *Subject:* Re: [PATCH 1/8] drm/scheduler: properly forward fence errors
> Alex can I merge that through drm-misc-next or do we really need
> amd-staging-drm-next?
>
> Christian.
>
> Am 21.04.23 um 07:22 schrieb Luben Tuikov:
> > Hi Christian,
> >
> > Thanks for working on this.
> >
> > Series is,
> > Reviewed-by: Luben Tuikov <luben.tuikov@amd.com>
> >
> > Regards,
> > Luben
> >
> > On 2023-04-20 07:57, Christian König wrote:
> >> When a hw fence is signaled with an error properly forward that to the
> >> finished fence.
> >>
> >> Signed-off-by: Christian König <christian.koenig@amd.com>
> >> ---
> >> drivers/gpu/drm/scheduler/sched_entity.c | 4 +---
> >> drivers/gpu/drm/scheduler/sched_fence.c | 4 +++-
> >> drivers/gpu/drm/scheduler/sched_main.c | 18 ++++++++----------
> >> include/drm/gpu_scheduler.h | 2 +-
> >> 4 files changed, 13 insertions(+), 15 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/scheduler/sched_entity.c
> b/drivers/gpu/drm/scheduler/sched_entity.c
> >> index 15d04a0ec623..eaf71fe15ed3 100644
> >> --- a/drivers/gpu/drm/scheduler/sched_entity.c
> >> +++ b/drivers/gpu/drm/scheduler/sched_entity.c
> >> @@ -144,7 +144,7 @@ static void
> drm_sched_entity_kill_jobs_work(struct work_struct *wrk)
> >> {
> >> struct drm_sched_job *job = container_of(wrk, typeof(*job),
> work);
> >>
> >> - drm_sched_fence_finished(job->s_fence);
> >> + drm_sched_fence_finished(job->s_fence, -ESRCH);
> >> WARN_ON(job->s_fence->parent);
> >> job->sched->ops->free_job(job);
> >> }
> >> @@ -195,8 +195,6 @@ static void drm_sched_entity_kill(struct
> drm_sched_entity *entity)
> >> while ((job =
> to_drm_sched_job(spsc_queue_pop(&entity->job_queue)))) {
> >> struct drm_sched_fence *s_fence = job->s_fence;
> >>
> >> - dma_fence_set_error(&s_fence->finished, -ESRCH);
> >> -
> >> dma_fence_get(&s_fence->finished);
> >> if (!prev || dma_fence_add_callback(prev,
> &job->finish_cb,
> >> drm_sched_entity_kill_jobs_cb))
> >> diff --git a/drivers/gpu/drm/scheduler/sched_fence.c
> b/drivers/gpu/drm/scheduler/sched_fence.c
> >> index 7fd869520ef2..1a6bea98c5cc 100644
> >> --- a/drivers/gpu/drm/scheduler/sched_fence.c
> >> +++ b/drivers/gpu/drm/scheduler/sched_fence.c
> >> @@ -53,8 +53,10 @@ void drm_sched_fence_scheduled(struct
> drm_sched_fence *fence)
> >> dma_fence_signal(&fence->scheduled);
> >> }
> >>
> >> -void drm_sched_fence_finished(struct drm_sched_fence *fence)
> >> +void drm_sched_fence_finished(struct drm_sched_fence *fence, int
> result)
> >> {
> >> + if (result)
> >> + dma_fence_set_error(&fence->finished, result);
> >> dma_fence_signal(&fence->finished);
> >> }
> >>
> >> diff --git a/drivers/gpu/drm/scheduler/sched_main.c
> b/drivers/gpu/drm/scheduler/sched_main.c
> >> index fcd4bfef7415..649fac2e1ccb 100644
> >> --- a/drivers/gpu/drm/scheduler/sched_main.c
> >> +++ b/drivers/gpu/drm/scheduler/sched_main.c
> >> @@ -257,7 +257,7 @@ drm_sched_rq_select_entity_fifo(struct
> drm_sched_rq *rq)
> >> *
> >> * Finish the job's fence and wake up the worker thread.
> >> */
> >> -static void drm_sched_job_done(struct drm_sched_job *s_job)
> >> +static void drm_sched_job_done(struct drm_sched_job *s_job, int
> result)
> >> {
> >> struct drm_sched_fence *s_fence = s_job->s_fence;
> >> struct drm_gpu_scheduler *sched = s_fence->sched;
> >> @@ -268,7 +268,7 @@ static void drm_sched_job_done(struct
> drm_sched_job *s_job)
> >> trace_drm_sched_process_job(s_fence);
> >>
> >> dma_fence_get(&s_fence->finished);
> >> - drm_sched_fence_finished(s_fence);
> >> + drm_sched_fence_finished(s_fence, result);
> >> dma_fence_put(&s_fence->finished);
> >> wake_up_interruptible(&sched->wake_up_worker);
> >> }
> >> @@ -282,7 +282,7 @@ static void drm_sched_job_done_cb(struct
> dma_fence *f, struct dma_fence_cb *cb)
> >> {
> >> struct drm_sched_job *s_job = container_of(cb, struct
> drm_sched_job, cb);
> >>
> >> - drm_sched_job_done(s_job);
> >> + drm_sched_job_done(s_job, f->error);
> >> }
> >>
> >> /**
> >> @@ -533,12 +533,12 @@ void drm_sched_start(struct drm_gpu_scheduler
> *sched, bool full_recovery)
> >> r = dma_fence_add_callback(fence, &s_job->cb,
> >> drm_sched_job_done_cb);
> >> if (r == -ENOENT)
> >> - drm_sched_job_done(s_job);
> >> + drm_sched_job_done(s_job, fence->error);
> >> else if (r)
> >> DRM_DEV_ERROR(sched->dev, "fence add callback failed (%d)\n",
> >> r);
> >> } else
> >> - drm_sched_job_done(s_job);
> >> + drm_sched_job_done(s_job, 0);
> >> }
> >>
> >> if (full_recovery) {
> >> @@ -1010,15 +1010,13 @@ static int drm_sched_main(void *param)
> >> r = dma_fence_add_callback(fence, &sched_job->cb,
> >> drm_sched_job_done_cb);
> >> if (r == -ENOENT)
> >> - drm_sched_job_done(sched_job);
> >> + drm_sched_job_done(sched_job, fence->error);
> >> else if (r)
> >> DRM_DEV_ERROR(sched->dev, "fence add callback failed (%d)\n",
> >> r);
> >> } else {
> >> - if (IS_ERR(fence))
> >> - dma_fence_set_error(&s_fence->finished, PTR_ERR(fence));
> >> -
> >> - drm_sched_job_done(sched_job);
> >> + drm_sched_job_done(sched_job, IS_ERR(fence) ?
> >> + PTR_ERR(fence) : 0);
> >> }
> >>
> >> wake_up(&sched->job_scheduled);
> >> diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
> >> index ca857ec9e7eb..5c1df6b12ced 100644
> >> --- a/include/drm/gpu_scheduler.h
> >> +++ b/include/drm/gpu_scheduler.h
> >> @@ -569,7 +569,7 @@ void drm_sched_fence_init(struct
> drm_sched_fence *fence,
> >> void drm_sched_fence_free(struct drm_sched_fence *fence);
> >>
> >> void drm_sched_fence_scheduled(struct drm_sched_fence *fence);
> >> -void drm_sched_fence_finished(struct drm_sched_fence *fence);
> >> +void drm_sched_fence_finished(struct drm_sched_fence *fence, int
> result);
> >>
> >> unsigned long drm_sched_suspend_timeout(struct drm_gpu_scheduler
> *sched);
> >> void drm_sched_resume_timeout(struct drm_gpu_scheduler *sched,
>
[-- Attachment #2: Type: text/html, Size: 15537 bytes --]
next prev parent reply other threads:[~2023-04-24 10:07 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-20 11:57 [PATCH 1/8] drm/scheduler: properly forward fence errors Christian König
2023-04-20 11:57 ` [PATCH 2/8] drm/scheduler: add drm_sched_entity_error and use rcu for last_scheduled Christian König
2023-04-20 11:57 ` [PATCH 3/8] drm/amdgpu: add amdgpu_error_* debugfs file Christian König
2023-04-20 11:57 ` [PATCH 4/8] drm/amdgpu: mark force completed fences with -ECANCELED Christian König
2023-04-20 11:57 ` [PATCH 5/8] drm/amdgpu: mark soft recovered fences with -ENODATA Christian König
2023-04-20 11:57 ` [PATCH 6/8] drm/amdgpu: abort submissions during prepare on error Christian König
2023-04-20 11:57 ` [PATCH 7/8] drm/amdgpu: reset VM when an error is detected Christian König
2023-04-20 11:57 ` [PATCH 8/8] drm/amdgpu: add VM generation token Christian König
2023-04-21 5:22 ` [PATCH 1/8] drm/scheduler: properly forward fence errors Luben Tuikov
2023-04-21 13:27 ` Christian König
2023-04-21 13:40 ` Deucher, Alexander
2023-04-24 10:06 ` Christian König [this message]
2023-04-27 10:35 ` Yin, ZhenGuo (Chris)
2023-04-27 12:05 ` Christian König
2023-08-17 8:17 ` Yin, ZhenGuo (Chris)
2023-08-23 8:12 ` Yin, ZhenGuo (Chris)
2023-08-23 8:26 ` Christian König
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=7cb2b22f-eec6-567b-dc1d-76adb9959ed5@gmail.com \
--to=ckoenig.leichtzumerken@gmail.com \
--cc=Alexander.Deucher@amd.com \
--cc=Luben.Tuikov@amd.com \
--cc=amd-gfx@lists.freedesktop.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.