* [PATCH] drm/amdgpu: add dep_sync for amdgpu job
@ 2017-05-18 8:18 Chunming Zhou
[not found] ` <1495095519-23674-1-git-send-email-David1.Zhou-5C7GfCeVMHo@public.gmane.org>
0 siblings, 1 reply; 2+ messages in thread
From: Chunming Zhou @ 2017-05-18 8:18 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Chunming Zhou
The fence in dep_sync cannot be optimized.
Change-Id: Ica1924ad4fe991c0f13438ab521036f60544afcc
Signed-off-by: Chunming Zhou <David1.Zhou@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 17 +++++++++++------
3 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 8351dd2..49bcafd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1162,6 +1162,7 @@ struct amdgpu_job {
struct amdgpu_vm *vm;
struct amdgpu_ring *ring;
struct amdgpu_sync sync;
+ struct amdgpu_sync dep_sync;
struct amdgpu_sync sched_sync;
struct amdgpu_ib *ibs;
struct fence *fence; /* the hw fence */
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 2f5ef94..dce3ed6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -1048,7 +1048,7 @@ static int amdgpu_cs_dependencies(struct amdgpu_device *adev,
}
}
- return amdgpu_sem_add_cs(p->ctx, p->job->ring, &p->job->sync);
+ return amdgpu_sem_add_cs(p->ctx, p->job->ring, &p->job->dep_sync);
}
static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index 0c177bb..12f3207 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -63,6 +63,7 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
(*job)->num_ibs = num_ibs;
amdgpu_sync_create(&(*job)->sync);
+ amdgpu_sync_create(&(*job)->dep_sync);
amdgpu_sync_create(&(*job)->sched_sync);
return 0;
@@ -102,6 +103,7 @@ static void amdgpu_job_free_cb(struct amd_sched_job *s_job)
fence_put(job->fence);
amdgpu_sync_free(&job->sync);
+ amdgpu_sync_free(&job->dep_sync);
amdgpu_sync_free(&job->sched_sync);
kfree(job);
}
@@ -112,6 +114,7 @@ void amdgpu_job_free(struct amdgpu_job *job)
fence_put(job->fence);
amdgpu_sync_free(&job->sync);
+ amdgpu_sync_free(&job->dep_sync);
amdgpu_sync_free(&job->sched_sync);
kfree(job);
}
@@ -144,9 +147,16 @@ static struct fence *amdgpu_job_dependency(struct amd_sched_job *sched_job)
struct amdgpu_job *job = to_amdgpu_job(sched_job);
struct amdgpu_vm *vm = job->vm;
- struct fence *fence = amdgpu_sync_get_fence(&job->sync);
+ struct fence *fence = amdgpu_sync_get_fence(&job->dep_sync);
int r;
+ if (amd_sched_dependency_optimized(fence, sched_job->s_entity)) {
+ r = amdgpu_sync_fence(job->adev, &job->sched_sync, fence);
+ if (r)
+ DRM_ERROR("Error adding fence to sync (%d)\n", r);
+ }
+ if (!fence)
+ fence = amdgpu_sync_get_fence(&job->sync);
while (fence == NULL && vm && !job->vm_id) {
struct amdgpu_ring *ring = job->ring;
@@ -159,11 +169,6 @@ static struct fence *amdgpu_job_dependency(struct amd_sched_job *sched_job)
fence = amdgpu_sync_get_fence(&job->sync);
}
- if (amd_sched_dependency_optimized(fence, sched_job->s_entity)) {
- r = amdgpu_sync_fence(job->adev, &job->sched_sync, fence);
- if (r)
- DRM_ERROR("Error adding fence to sync (%d)\n", r);
- }
return fence;
}
--
1.9.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] drm/amdgpu: add dep_sync for amdgpu job
[not found] ` <1495095519-23674-1-git-send-email-David1.Zhou-5C7GfCeVMHo@public.gmane.org>
@ 2017-05-18 10:39 ` Christian König
0 siblings, 0 replies; 2+ messages in thread
From: Christian König @ 2017-05-18 10:39 UTC (permalink / raw)
To: Chunming Zhou, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Am 18.05.2017 um 10:18 schrieb Chunming Zhou:
> The fence in dep_sync cannot be optimized.
>
> Change-Id: Ica1924ad4fe991c0f13438ab521036f60544afcc
> Signed-off-by: Chunming Zhou <David1.Zhou@amd.com>
A bit more commit message wouldn't hurt, but either way the patch is
Reviewed-by: Christian König <christian.koenig@amd.com>
Regards,
Christian.
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
> drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 17 +++++++++++------
> 3 files changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 8351dd2..49bcafd 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -1162,6 +1162,7 @@ struct amdgpu_job {
> struct amdgpu_vm *vm;
> struct amdgpu_ring *ring;
> struct amdgpu_sync sync;
> + struct amdgpu_sync dep_sync;
> struct amdgpu_sync sched_sync;
> struct amdgpu_ib *ibs;
> struct fence *fence; /* the hw fence */
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index 2f5ef94..dce3ed6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -1048,7 +1048,7 @@ static int amdgpu_cs_dependencies(struct amdgpu_device *adev,
> }
> }
>
> - return amdgpu_sem_add_cs(p->ctx, p->job->ring, &p->job->sync);
> + return amdgpu_sem_add_cs(p->ctx, p->job->ring, &p->job->dep_sync);
> }
>
> static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
> index 0c177bb..12f3207 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
> @@ -63,6 +63,7 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
> (*job)->num_ibs = num_ibs;
>
> amdgpu_sync_create(&(*job)->sync);
> + amdgpu_sync_create(&(*job)->dep_sync);
> amdgpu_sync_create(&(*job)->sched_sync);
>
> return 0;
> @@ -102,6 +103,7 @@ static void amdgpu_job_free_cb(struct amd_sched_job *s_job)
>
> fence_put(job->fence);
> amdgpu_sync_free(&job->sync);
> + amdgpu_sync_free(&job->dep_sync);
> amdgpu_sync_free(&job->sched_sync);
> kfree(job);
> }
> @@ -112,6 +114,7 @@ void amdgpu_job_free(struct amdgpu_job *job)
>
> fence_put(job->fence);
> amdgpu_sync_free(&job->sync);
> + amdgpu_sync_free(&job->dep_sync);
> amdgpu_sync_free(&job->sched_sync);
> kfree(job);
> }
> @@ -144,9 +147,16 @@ static struct fence *amdgpu_job_dependency(struct amd_sched_job *sched_job)
> struct amdgpu_job *job = to_amdgpu_job(sched_job);
> struct amdgpu_vm *vm = job->vm;
>
> - struct fence *fence = amdgpu_sync_get_fence(&job->sync);
> + struct fence *fence = amdgpu_sync_get_fence(&job->dep_sync);
> int r;
>
> + if (amd_sched_dependency_optimized(fence, sched_job->s_entity)) {
> + r = amdgpu_sync_fence(job->adev, &job->sched_sync, fence);
> + if (r)
> + DRM_ERROR("Error adding fence to sync (%d)\n", r);
> + }
> + if (!fence)
> + fence = amdgpu_sync_get_fence(&job->sync);
> while (fence == NULL && vm && !job->vm_id) {
> struct amdgpu_ring *ring = job->ring;
>
> @@ -159,11 +169,6 @@ static struct fence *amdgpu_job_dependency(struct amd_sched_job *sched_job)
> fence = amdgpu_sync_get_fence(&job->sync);
> }
>
> - if (amd_sched_dependency_optimized(fence, sched_job->s_entity)) {
> - r = amdgpu_sync_fence(job->adev, &job->sched_sync, fence);
> - if (r)
> - DRM_ERROR("Error adding fence to sync (%d)\n", r);
> - }
> return fence;
> }
>
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-05-18 10:39 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-18 8:18 [PATCH] drm/amdgpu: add dep_sync for amdgpu job Chunming Zhou
[not found] ` <1495095519-23674-1-git-send-email-David1.Zhou-5C7GfCeVMHo@public.gmane.org>
2017-05-18 10:39 ` Christian König
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.