* [PATCH 1/7] drm/amdgpu: cleanup job header
@ 2018-07-13 15:19 Christian König
[not found] ` <20180713151949.13665-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
0 siblings, 1 reply; 11+ messages in thread
From: Christian König @ 2018-07-13 15:19 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Move job related defines, structure and function declarations to
amdgpu_job.h
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 46 +-------------------
drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 74 +++++++++++++++++++++++++++++++++
2 files changed, 75 insertions(+), 45 deletions(-)
create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 8eaba0f4db10..a60555f8e6fd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -73,6 +73,7 @@
#include "amdgpu_virt.h"
#include "amdgpu_gart.h"
#include "amdgpu_debugfs.h"
+#include "amdgpu_job.h"
/*
* Modules parameters.
@@ -600,17 +601,6 @@ struct amdgpu_ib {
extern const struct drm_sched_backend_ops amdgpu_sched_ops;
-int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
- struct amdgpu_job **job, struct amdgpu_vm *vm);
-int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size,
- struct amdgpu_job **job);
-
-void amdgpu_job_free_resources(struct amdgpu_job *job);
-void amdgpu_job_free(struct amdgpu_job *job);
-int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring,
- struct drm_sched_entity *entity, void *owner,
- struct dma_fence **f);
-
/*
* Queue manager
*/
@@ -1050,40 +1040,6 @@ struct amdgpu_cs_parser {
struct drm_syncobj **post_dep_syncobjs;
};
-#define AMDGPU_PREAMBLE_IB_PRESENT (1 << 0) /* bit set means command submit involves a preamble IB */
-#define AMDGPU_PREAMBLE_IB_PRESENT_FIRST (1 << 1) /* bit set means preamble IB is first presented in belonging context */
-#define AMDGPU_HAVE_CTX_SWITCH (1 << 2) /* bit set means context switch occured */
-
-struct amdgpu_job {
- struct drm_sched_job base;
- struct amdgpu_device *adev;
- struct amdgpu_vm *vm;
- struct amdgpu_ring *ring;
- struct amdgpu_sync sync;
- struct amdgpu_sync sched_sync;
- struct amdgpu_ib *ibs;
- struct dma_fence *fence; /* the hw fence */
- uint32_t preamble_status;
- uint32_t num_ibs;
- void *owner;
- uint64_t fence_ctx; /* the fence_context this job uses */
- bool vm_needs_flush;
- uint64_t vm_pd_addr;
- unsigned vmid;
- unsigned pasid;
- uint32_t gds_base, gds_size;
- uint32_t gws_base, gws_size;
- uint32_t oa_base, oa_size;
- uint32_t vram_lost_counter;
-
- /* user fence handling */
- uint64_t uf_addr;
- uint64_t uf_sequence;
-
-};
-#define to_amdgpu_job(sched_job) \
- container_of((sched_job), struct amdgpu_job, base)
-
static inline u32 amdgpu_get_ib_value(struct amdgpu_cs_parser *p,
uint32_t ib_idx, int idx)
{
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
new file mode 100644
index 000000000000..35bb93254eb2
--- /dev/null
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2018 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+#ifndef __AMDGPU_JOB_H__
+#define __AMDGPU_JOB_H__
+
+/* bit set means command submit involves a preamble IB */
+#define AMDGPU_PREAMBLE_IB_PRESENT (1 << 0)
+/* bit set means preamble IB is first presented in belonging context */
+#define AMDGPU_PREAMBLE_IB_PRESENT_FIRST (1 << 1)
+/* bit set means context switch occured */
+#define AMDGPU_HAVE_CTX_SWITCH (1 << 2)
+
+#define to_amdgpu_job(sched_job) \
+ container_of((sched_job), struct amdgpu_job, base)
+
+struct amdgpu_job {
+ struct drm_sched_job base;
+ struct amdgpu_device *adev;
+ struct amdgpu_vm *vm;
+ struct amdgpu_ring *ring;
+ struct amdgpu_sync sync;
+ struct amdgpu_sync sched_sync;
+ struct amdgpu_ib *ibs;
+ struct dma_fence *fence; /* the hw fence */
+ uint32_t preamble_status;
+ uint32_t num_ibs;
+ void *owner;
+ uint64_t fence_ctx; /* the fence_context this job uses */
+ bool vm_needs_flush;
+ uint64_t vm_pd_addr;
+ unsigned vmid;
+ unsigned pasid;
+ uint32_t gds_base, gds_size;
+ uint32_t gws_base, gws_size;
+ uint32_t oa_base, oa_size;
+ uint32_t vram_lost_counter;
+
+ /* user fence handling */
+ uint64_t uf_addr;
+ uint64_t uf_sequence;
+
+};
+
+int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
+ struct amdgpu_job **job, struct amdgpu_vm *vm);
+int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size,
+ struct amdgpu_job **job);
+
+void amdgpu_job_free_resources(struct amdgpu_job *job);
+void amdgpu_job_free(struct amdgpu_job *job);
+int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring,
+ struct drm_sched_entity *entity, void *owner,
+ struct dma_fence **f);
+#endif
--
2.14.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/7] drm/amdgpu: remove fence context from the job
[not found] ` <20180713151949.13665-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
@ 2018-07-13 15:19 ` Christian König
2018-07-13 15:19 ` [PATCH 3/7] drm/amdgpu: remove ring parameter from amdgpu_job_submit Christian König
` (5 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Christian König @ 2018-07-13 15:19 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Can be obtained directly from the fence as well.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 1 -
drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 1 -
drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 1 -
4 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 9881a1e55df3..67ee34cdfb1b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -1197,7 +1197,6 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
}
job->owner = p->filp;
- job->fence_ctx = entity->fence_context;
p->fence = dma_fence_get(&job->base.s_fence->finished);
r = amdgpu_ctx_add_fence(p->ctx, ring, p->fence, &seq);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
index ce7739832d29..5518e623fed2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
@@ -139,7 +139,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
/* ring tests don't use a job */
if (job) {
vm = job->vm;
- fence_ctx = job->fence_ctx;
+ fence_ctx = job->base.s_fence->scheduled.context;
} else {
vm = NULL;
fence_ctx = 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index 2bd56760c744..10e0a97c7c03 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -132,7 +132,6 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring,
return r;
job->owner = owner;
- job->fence_ctx = entity->fence_context;
*f = dma_fence_get(&job->base.s_fence->finished);
amdgpu_job_free_resources(job);
amdgpu_ring_priority_get(job->ring, job->base.s_priority);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
index 35bb93254eb2..3151692312bd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
@@ -45,7 +45,6 @@ struct amdgpu_job {
uint32_t preamble_status;
uint32_t num_ibs;
void *owner;
- uint64_t fence_ctx; /* the fence_context this job uses */
bool vm_needs_flush;
uint64_t vm_pd_addr;
unsigned vmid;
--
2.14.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/7] drm/amdgpu: remove ring parameter from amdgpu_job_submit
[not found] ` <20180713151949.13665-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-07-13 15:19 ` [PATCH 2/7] drm/amdgpu: remove fence context from the job Christian König
@ 2018-07-13 15:19 ` Christian König
2018-07-13 15:19 ` [PATCH 4/7] drm/amdgpu: remove job->ring Christian König
` (4 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Christian König @ 2018-07-13 15:19 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
We know the ring through the entity anyway.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 9 ++++-----
drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 5 ++---
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 2 ++
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 6 +++---
drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 11 +++++------
drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 2 +-
drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c | 2 +-
9 files changed, 20 insertions(+), 21 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index 10e0a97c7c03..51ff751e093b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -117,21 +117,20 @@ void amdgpu_job_free(struct amdgpu_job *job)
kfree(job);
}
-int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring,
- struct drm_sched_entity *entity, void *owner,
- struct dma_fence **f)
+int amdgpu_job_submit(struct amdgpu_job *job, struct drm_sched_entity *entity,
+ void *owner, struct dma_fence **f)
{
int r;
- job->ring = ring;
if (!f)
return -EINVAL;
- r = drm_sched_job_init(&job->base, &ring->sched, entity, owner);
+ r = drm_sched_job_init(&job->base, entity->sched, entity, owner);
if (r)
return r;
job->owner = owner;
+ job->ring = to_amdgpu_ring(entity->sched);
*f = dma_fence_get(&job->base.s_fence->finished);
amdgpu_job_free_resources(job);
amdgpu_ring_priority_get(job->ring, job->base.s_priority);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
index 3151692312bd..39f4230e1d37 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
@@ -67,7 +67,6 @@ int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size,
void amdgpu_job_free_resources(struct amdgpu_job *job);
void amdgpu_job_free(struct amdgpu_job *job);
-int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring,
- struct drm_sched_entity *entity, void *owner,
- struct dma_fence **f);
+int amdgpu_job_submit(struct amdgpu_job *job, struct drm_sched_entity *entity,
+ void *owner, struct dma_fence **f);
#endif
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
index a293f4e6760d..5018c0b6bf1a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
@@ -44,6 +44,8 @@
#define AMDGPU_FENCE_FLAG_INT (1 << 1)
#define AMDGPU_FENCE_FLAG_TC_WB_ONLY (1 << 2)
+#define to_amdgpu_ring(s) container_of((s), struct amdgpu_ring, sched)
+
enum amdgpu_ring_type {
AMDGPU_RING_TYPE_GFX,
AMDGPU_RING_TYPE_COMPUTE,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 11a12483c995..9958e76d1c78 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -2006,7 +2006,7 @@ static int amdgpu_map_buffer(struct ttm_buffer_object *bo,
if (r)
goto error_free;
- r = amdgpu_job_submit(job, ring, &adev->mman.entity,
+ r = amdgpu_job_submit(job, &adev->mman.entity,
AMDGPU_FENCE_OWNER_UNDEFINED, &fence);
if (r)
goto error_free;
@@ -2083,7 +2083,7 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring, uint64_t src_offset,
DRM_ERROR("Error scheduling IBs (%d)\n", r);
amdgpu_job_free(job);
} else {
- r = amdgpu_job_submit(job, ring, &adev->mman.entity,
+ r = amdgpu_job_submit(job, &adev->mman.entity,
AMDGPU_FENCE_OWNER_UNDEFINED, fence);
if (r)
goto error_free;
@@ -2175,7 +2175,7 @@ int amdgpu_fill_buffer(struct amdgpu_bo *bo,
amdgpu_ring_pad_ib(ring, &job->ibs[0]);
WARN_ON(job->ibs[0].length_dw > num_dw);
- r = amdgpu_job_submit(job, ring, &adev->mman.entity,
+ r = amdgpu_job_submit(job, &adev->mman.entity,
AMDGPU_FENCE_OWNER_UNDEFINED, fence);
if (r)
goto error_free;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index a6c2cace4b9d..848b2e898818 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
@@ -1074,7 +1074,7 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo,
if (r)
goto err_free;
- r = amdgpu_job_submit(job, ring, &adev->uvd.inst[ring->me].entity,
+ r = amdgpu_job_submit(job, &adev->uvd.inst[ring->me].entity,
AMDGPU_FENCE_OWNER_UNDEFINED, &f);
if (r)
goto err_free;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
index ffb0fcc9707e..7dfb4c4b19c5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
@@ -539,7 +539,7 @@ int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,
amdgpu_job_free(job);
} else {
- r = amdgpu_job_submit(job, ring, &ring->adev->vce.entity,
+ r = amdgpu_job_submit(job, &ring->adev->vce.entity,
AMDGPU_FENCE_OWNER_UNDEFINED, &f);
if (r)
goto err;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 484e2c19c027..5d3d783f2d72 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -425,8 +425,8 @@ static int amdgpu_vm_clear_bo(struct amdgpu_device *adev,
if (r)
goto error_free;
- r = amdgpu_job_submit(job, ring, &vm->entity,
- AMDGPU_FENCE_OWNER_UNDEFINED, &fence);
+ r = amdgpu_job_submit(job, &vm->entity, AMDGPU_FENCE_OWNER_UNDEFINED,
+ &fence);
if (r)
goto error_free;
@@ -1120,8 +1120,8 @@ int amdgpu_vm_update_directories(struct amdgpu_device *adev,
amdgpu_sync_resv(adev, &job->sync, root->tbo.resv,
AMDGPU_FENCE_OWNER_VM, false);
WARN_ON(params.ib->length_dw > ndw);
- r = amdgpu_job_submit(job, ring, &vm->entity,
- AMDGPU_FENCE_OWNER_VM, &fence);
+ r = amdgpu_job_submit(job, &vm->entity, AMDGPU_FENCE_OWNER_VM,
+ &fence);
if (r)
goto error;
@@ -1485,8 +1485,7 @@ static int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev,
amdgpu_ring_pad_ib(ring, params.ib);
WARN_ON(params.ib->length_dw > ndw);
- r = amdgpu_job_submit(job, ring, &vm->entity,
- AMDGPU_FENCE_OWNER_VM, &f);
+ r = amdgpu_job_submit(job, &vm->entity, AMDGPU_FENCE_OWNER_VM, &f);
if (r)
goto error_free;
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
index 1c118c02e8cb..591d1f211823 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
@@ -320,7 +320,7 @@ static int uvd_v6_0_enc_get_destroy_msg(struct amdgpu_ring *ring,
amdgpu_job_free(job);
} else {
- r = amdgpu_job_submit(job, ring, &ring->adev->vce.entity,
+ r = amdgpu_job_submit(job, &ring->adev->vce.entity,
AMDGPU_FENCE_OWNER_UNDEFINED, &f);
if (r)
goto err;
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
index d48bc3393545..ceb0a7037897 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
@@ -321,7 +321,7 @@ int uvd_v7_0_enc_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,
amdgpu_job_free(job);
} else {
- r = amdgpu_job_submit(job, ring, &ring->adev->vce.entity,
+ r = amdgpu_job_submit(job, &ring->adev->vce.entity,
AMDGPU_FENCE_OWNER_UNDEFINED, &f);
if (r)
goto err;
--
2.14.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/7] drm/amdgpu: remove job->ring
[not found] ` <20180713151949.13665-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-07-13 15:19 ` [PATCH 2/7] drm/amdgpu: remove fence context from the job Christian König
2018-07-13 15:19 ` [PATCH 3/7] drm/amdgpu: remove ring parameter from amdgpu_job_submit Christian König
@ 2018-07-13 15:19 ` Christian König
2018-07-13 15:19 ` [PATCH 5/7] drm/amdgpu: add amdgpu_job_submit_direct helper Christian König
` (3 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Christian König @ 2018-07-13 15:19 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
We can easily get that from the scheduler.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 18 +++++++++---------
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++--
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 23 ++++++++++++-----------
drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 1 -
drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h | 8 ++++----
drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +-
7 files changed, 29 insertions(+), 28 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index a60555f8e6fd..e72c42376911 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1019,6 +1019,7 @@ struct amdgpu_cs_parser {
/* scheduler job object */
struct amdgpu_job *job;
+ struct amdgpu_ring *ring;
/* buffer objects */
struct ww_acquire_ctx ticket;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 67ee34cdfb1b..fa4f4093fbda 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -870,11 +870,11 @@ static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev,
{
struct amdgpu_fpriv *fpriv = p->filp->driver_priv;
struct amdgpu_vm *vm = &fpriv->vm;
- struct amdgpu_ring *ring = p->job->ring;
+ struct amdgpu_ring *ring = p->ring;
int r;
/* Only for UVD/VCE VM emulation */
- if (p->job->ring->funcs->parse_cs) {
+ if (p->ring->funcs->parse_cs) {
unsigned i, j;
for (i = 0, j = 0; i < p->nchunks && j < p->job->num_ibs; i++) {
@@ -988,10 +988,10 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev,
}
}
- if (parser->job->ring && parser->job->ring != ring)
+ if (parser->ring && parser->ring != ring)
return -EINVAL;
- parser->job->ring = ring;
+ parser->ring = ring;
r = amdgpu_ib_get(adev, vm,
ring->funcs->parse_cs ? chunk_ib->ib_bytes : 0,
@@ -1010,11 +1010,11 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev,
/* UVD & VCE fw doesn't support user fences */
if (parser->job->uf_addr && (
- parser->job->ring->funcs->type == AMDGPU_RING_TYPE_UVD ||
- parser->job->ring->funcs->type == AMDGPU_RING_TYPE_VCE))
+ parser->ring->funcs->type == AMDGPU_RING_TYPE_UVD ||
+ parser->ring->funcs->type == AMDGPU_RING_TYPE_VCE))
return -EINVAL;
- return amdgpu_ctx_wait_prev_fence(parser->ctx, parser->job->ring->idx);
+ return amdgpu_ctx_wait_prev_fence(parser->ctx, parser->ring->idx);
}
static int amdgpu_cs_process_fence_dep(struct amdgpu_cs_parser *p,
@@ -1165,7 +1165,7 @@ static void amdgpu_cs_post_dependencies(struct amdgpu_cs_parser *p)
static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
union drm_amdgpu_cs *cs)
{
- struct amdgpu_ring *ring = p->job->ring;
+ struct amdgpu_ring *ring = p->ring;
struct drm_sched_entity *entity = &p->ctx->rings[ring->idx].entity;
struct amdgpu_job *job;
unsigned i;
@@ -1214,7 +1214,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
job->uf_sequence = seq;
amdgpu_job_free_resources(job);
- amdgpu_ring_priority_get(job->ring, job->base.s_priority);
+ amdgpu_ring_priority_get(p->ring, job->base.s_priority);
trace_amdgpu_cs_ioctl(job);
drm_sched_entity_push_job(&job->base, entity);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index aeb1b279a4cc..709e4a386a0e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -3254,7 +3254,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
kthread_park(ring->sched.thread);
- if (job && job->ring->idx != i)
+ if (job && job->base.sched == &ring->sched)
continue;
drm_sched_hw_job_reset(&ring->sched, &job->base);
@@ -3278,7 +3278,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
* or all rings (in the case @job is NULL)
* after above amdgpu_reset accomplished
*/
- if ((!job || job->ring->idx == i) && !r)
+ if ((!job || job->base.sched == &ring->sched) && !r)
drm_sched_job_recovery(&ring->sched);
kthread_unpark(ring->sched.thread);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index 51ff751e093b..2496f2269bcb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -30,12 +30,12 @@
static void amdgpu_job_timedout(struct drm_sched_job *s_job)
{
- struct amdgpu_job *job = container_of(s_job, struct amdgpu_job, base);
+ struct amdgpu_ring *ring = to_amdgpu_ring(s_job->sched);
+ struct amdgpu_job *job = to_amdgpu_job(s_job);
DRM_ERROR("ring %s timeout, last signaled seq=%u, last emitted seq=%u\n",
- job->base.sched->name,
- atomic_read(&job->ring->fence_drv.last_seq),
- job->ring->fence_drv.sync_seq);
+ job->base.sched->name, atomic_read(&ring->fence_drv.last_seq),
+ ring->fence_drv.sync_seq);
amdgpu_device_gpu_recover(job->adev, job, false);
}
@@ -98,9 +98,10 @@ void amdgpu_job_free_resources(struct amdgpu_job *job)
static void amdgpu_job_free_cb(struct drm_sched_job *s_job)
{
- struct amdgpu_job *job = container_of(s_job, struct amdgpu_job, base);
+ struct amdgpu_ring *ring = to_amdgpu_ring(s_job->sched);
+ struct amdgpu_job *job = to_amdgpu_job(s_job);
- amdgpu_ring_priority_put(job->ring, s_job->s_priority);
+ amdgpu_ring_priority_put(ring, s_job->s_priority);
dma_fence_put(job->fence);
amdgpu_sync_free(&job->sync);
amdgpu_sync_free(&job->sched_sync);
@@ -120,6 +121,7 @@ void amdgpu_job_free(struct amdgpu_job *job)
int amdgpu_job_submit(struct amdgpu_job *job, struct drm_sched_entity *entity,
void *owner, struct dma_fence **f)
{
+ struct amdgpu_ring *ring = to_amdgpu_ring(entity->sched);
int r;
if (!f)
@@ -130,10 +132,9 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct drm_sched_entity *entity,
return r;
job->owner = owner;
- job->ring = to_amdgpu_ring(entity->sched);
*f = dma_fence_get(&job->base.s_fence->finished);
amdgpu_job_free_resources(job);
- amdgpu_ring_priority_get(job->ring, job->base.s_priority);
+ amdgpu_ring_priority_get(ring, job->base.s_priority);
drm_sched_entity_push_job(&job->base, entity);
return 0;
@@ -142,6 +143,7 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct drm_sched_entity *entity,
static struct dma_fence *amdgpu_job_dependency(struct drm_sched_job *sched_job,
struct drm_sched_entity *s_entity)
{
+ struct amdgpu_ring *ring = to_amdgpu_ring(s_entity->sched);
struct amdgpu_job *job = to_amdgpu_job(sched_job);
struct amdgpu_vm *vm = job->vm;
bool explicit = false;
@@ -157,8 +159,6 @@ static struct dma_fence *amdgpu_job_dependency(struct drm_sched_job *sched_job,
}
while (fence == NULL && vm && !job->vmid) {
- struct amdgpu_ring *ring = job->ring;
-
r = amdgpu_vmid_grab(vm, ring, &job->sync,
&job->base.s_fence->finished,
job);
@@ -173,6 +173,7 @@ static struct dma_fence *amdgpu_job_dependency(struct drm_sched_job *sched_job,
static struct dma_fence *amdgpu_job_run(struct drm_sched_job *sched_job)
{
+ struct amdgpu_ring *ring = to_amdgpu_ring(sched_job->sched);
struct dma_fence *fence = NULL, *finished;
struct amdgpu_device *adev;
struct amdgpu_job *job;
@@ -196,7 +197,7 @@ static struct dma_fence *amdgpu_job_run(struct drm_sched_job *sched_job)
if (finished->error < 0) {
DRM_INFO("Skip scheduling IBs!\n");
} else {
- r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, job,
+ r = amdgpu_ib_schedule(ring, job->num_ibs, job->ibs, job,
&fence);
if (r)
DRM_ERROR("Error scheduling IBs (%d)\n", r);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
index 39f4230e1d37..c663c1925f91 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
@@ -37,7 +37,6 @@ struct amdgpu_job {
struct drm_sched_job base;
struct amdgpu_device *adev;
struct amdgpu_vm *vm;
- struct amdgpu_ring *ring;
struct amdgpu_sync sync;
struct amdgpu_sync sched_sync;
struct amdgpu_ib *ibs;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
index e96e26d3f3b0..76920035eb22 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
@@ -150,10 +150,10 @@ TRACE_EVENT(amdgpu_cs,
TP_fast_assign(
__entry->bo_list = p->bo_list;
- __entry->ring = p->job->ring->idx;
+ __entry->ring = p->ring->idx;
__entry->dw = p->job->ibs[i].length_dw;
__entry->fences = amdgpu_fence_count_emitted(
- p->job->ring);
+ p->ring);
),
TP_printk("bo_list=%p, ring=%u, dw=%u, fences=%u",
__entry->bo_list, __entry->ring, __entry->dw,
@@ -178,7 +178,7 @@ TRACE_EVENT(amdgpu_cs_ioctl,
__assign_str(timeline, AMDGPU_JOB_GET_TIMELINE_NAME(job))
__entry->context = job->base.s_fence->finished.context;
__entry->seqno = job->base.s_fence->finished.seqno;
- __entry->ring_name = job->ring->name;
+ __entry->ring_name = to_amdgpu_ring(job->base.sched)->name;
__entry->num_ibs = job->num_ibs;
),
TP_printk("sched_job=%llu, timeline=%s, context=%u, seqno=%u, ring_name=%s, num_ibs=%u",
@@ -203,7 +203,7 @@ TRACE_EVENT(amdgpu_sched_run_job,
__assign_str(timeline, AMDGPU_JOB_GET_TIMELINE_NAME(job))
__entry->context = job->base.s_fence->finished.context;
__entry->seqno = job->base.s_fence->finished.seqno;
- __entry->ring_name = job->ring->name;
+ __entry->ring_name = to_amdgpu_ring(job->base.sched)->name;
__entry->num_ibs = job->num_ibs;
),
TP_printk("sched_job=%llu, timeline=%s, context=%u, seqno=%u, ring_name=%s, num_ibs=%u",
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index 848b2e898818..7738d2b90dae 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
@@ -692,11 +692,11 @@ static int amdgpu_uvd_cs_msg(struct amdgpu_uvd_cs_ctx *ctx,
struct amdgpu_bo *bo, unsigned offset)
{
struct amdgpu_device *adev = ctx->parser->adev;
+ uint32_t ip_instance = ctx->parser->ring->me;
int32_t *msg, msg_type, handle;
void *ptr;
long r;
int i;
- uint32_t ip_instance = ctx->parser->job->ring->me;
if (offset & 0x3F) {
DRM_ERROR("UVD(%d) messages must be 64 byte aligned!\n", ip_instance);
--
2.14.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 5/7] drm/amdgpu: add amdgpu_job_submit_direct helper
[not found] ` <20180713151949.13665-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
` (2 preceding siblings ...)
2018-07-13 15:19 ` [PATCH 4/7] drm/amdgpu: remove job->ring Christian König
@ 2018-07-13 15:19 ` Christian König
2018-07-13 15:19 ` [PATCH 6/7] drm/amdgpu: remove job->adev Christian König
` (2 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Christian König @ 2018-07-13 15:19 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Make sure that we properly initialize at least the sched member.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 15 +++++++++++++++
drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 4 ++++
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 17 ++++++-----------
drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 5 +----
drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 20 ++++++--------------
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 17 ++++-------------
drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 20 ++++++--------------
drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c | 20 ++++++--------------
8 files changed, 48 insertions(+), 70 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index 2496f2269bcb..0e2b18ccdf2e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -140,6 +140,21 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct drm_sched_entity *entity,
return 0;
}
+int amdgpu_job_submit_direct(struct amdgpu_job *job, struct amdgpu_ring *ring,
+ struct dma_fence **fence)
+{
+ int r;
+
+ job->base.sched = &ring->sched;
+ r = amdgpu_ib_schedule(ring, job->num_ibs, job->ibs, NULL, fence);
+ job->fence = dma_fence_get(*fence);
+ if (r)
+ return r;
+
+ amdgpu_job_free(job);
+ return 0;
+}
+
static struct dma_fence *amdgpu_job_dependency(struct drm_sched_job *sched_job,
struct drm_sched_entity *s_entity)
{
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
index c663c1925f91..d77fd232f7ce 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
@@ -33,6 +33,8 @@
#define to_amdgpu_job(sched_job) \
container_of((sched_job), struct amdgpu_job, base)
+struct amdgpu_fence;
+
struct amdgpu_job {
struct drm_sched_job base;
struct amdgpu_device *adev;
@@ -68,4 +70,6 @@ void amdgpu_job_free_resources(struct amdgpu_job *job);
void amdgpu_job_free(struct amdgpu_job *job);
int amdgpu_job_submit(struct amdgpu_job *job, struct drm_sched_entity *entity,
void *owner, struct dma_fence **f);
+int amdgpu_job_submit_direct(struct amdgpu_job *job, struct amdgpu_ring *ring,
+ struct dma_fence **fence);
#endif
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 9958e76d1c78..13977ea6a097 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -2075,24 +2075,19 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring, uint64_t src_offset,
amdgpu_ring_pad_ib(ring, &job->ibs[0]);
WARN_ON(job->ibs[0].length_dw > num_dw);
- if (direct_submit) {
- r = amdgpu_ib_schedule(ring, job->num_ibs, job->ibs,
- NULL, fence);
- job->fence = dma_fence_get(*fence);
- if (r)
- DRM_ERROR("Error scheduling IBs (%d)\n", r);
- amdgpu_job_free(job);
- } else {
+ if (direct_submit)
+ r = amdgpu_job_submit_direct(job, ring, fence);
+ else
r = amdgpu_job_submit(job, &adev->mman.entity,
AMDGPU_FENCE_OWNER_UNDEFINED, fence);
- if (r)
- goto error_free;
- }
+ if (r)
+ goto error_free;
return r;
error_free:
amdgpu_job_free(job);
+ DRM_ERROR("Error scheduling IBs (%d)\n", r);
return r;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index 7738d2b90dae..d708970244eb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
@@ -1062,12 +1062,9 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo,
if (r < 0)
goto err_free;
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
- job->fence = dma_fence_get(f);
+ r = amdgpu_job_submit_direct(job, ring, &f);
if (r)
goto err_free;
-
- amdgpu_job_free(job);
} else {
r = amdgpu_sync_resv(adev, &job->sync, bo->tbo.resv,
AMDGPU_FENCE_OWNER_UNDEFINED, false);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
index 7dfb4c4b19c5..86182c966ed6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
@@ -469,12 +469,10 @@ int amdgpu_vce_get_create_msg(struct amdgpu_ring *ring, uint32_t handle,
for (i = ib->length_dw; i < ib_size_dw; ++i)
ib->ptr[i] = 0x0;
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
- job->fence = dma_fence_get(f);
+ r = amdgpu_job_submit_direct(job, ring, &f);
if (r)
goto err;
- amdgpu_job_free(job);
if (fence)
*fence = dma_fence_get(f);
dma_fence_put(f);
@@ -531,19 +529,13 @@ int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,
for (i = ib->length_dw; i < ib_size_dw; ++i)
ib->ptr[i] = 0x0;
- if (direct) {
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
- job->fence = dma_fence_get(f);
- if (r)
- goto err;
-
- amdgpu_job_free(job);
- } else {
+ if (direct)
+ r = amdgpu_job_submit_direct(job, ring, &f);
+ else
r = amdgpu_job_submit(job, &ring->adev->vce.entity,
AMDGPU_FENCE_OWNER_UNDEFINED, &f);
- if (r)
- goto err;
- }
+ if (r)
+ goto err;
if (fence)
*fence = dma_fence_get(f);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
index 769c6723c9ca..798648a19710 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
@@ -308,13 +308,10 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring,
}
ib->length_dw = 16;
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
- job->fence = dma_fence_get(f);
+ r = amdgpu_job_submit_direct(job, ring, &f);
if (r)
goto err_free;
- amdgpu_job_free(job);
-
amdgpu_bo_fence(bo, f, false);
amdgpu_bo_unreserve(bo);
amdgpu_bo_unref(&bo);
@@ -499,12 +496,10 @@ static int amdgpu_vcn_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t hand
for (i = ib->length_dw; i < ib_size_dw; ++i)
ib->ptr[i] = 0x0;
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
- job->fence = dma_fence_get(f);
+ r = amdgpu_job_submit_direct(job, ring, &f);
if (r)
goto err;
- amdgpu_job_free(job);
if (fence)
*fence = dma_fence_get(f);
dma_fence_put(f);
@@ -553,12 +548,10 @@ static int amdgpu_vcn_enc_get_destroy_msg(struct amdgpu_ring *ring, uint32_t han
for (i = ib->length_dw; i < ib_size_dw; ++i)
ib->ptr[i] = 0x0;
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
- job->fence = dma_fence_get(f);
+ r = amdgpu_job_submit_direct(job, ring, &f);
if (r)
goto err;
- amdgpu_job_free(job);
if (fence)
*fence = dma_fence_get(f);
dma_fence_put(f);
@@ -666,12 +659,10 @@ static int amdgpu_vcn_jpeg_set_reg(struct amdgpu_ring *ring, uint32_t handle,
}
ib->length_dw = 16;
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
- job->fence = dma_fence_get(f);
+ r = amdgpu_job_submit_direct(job, ring, &f);
if (r)
goto err;
- amdgpu_job_free(job);
if (fence)
*fence = dma_fence_get(f);
dma_fence_put(f);
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
index 591d1f211823..b796dc8375cd 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
@@ -248,12 +248,10 @@ static int uvd_v6_0_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t handle
for (i = ib->length_dw; i < ib_size_dw; ++i)
ib->ptr[i] = 0x0;
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
- job->fence = dma_fence_get(f);
+ r = amdgpu_job_submit_direct(job, ring, &f);
if (r)
goto err;
- amdgpu_job_free(job);
if (fence)
*fence = dma_fence_get(f);
dma_fence_put(f);
@@ -312,19 +310,13 @@ static int uvd_v6_0_enc_get_destroy_msg(struct amdgpu_ring *ring,
for (i = ib->length_dw; i < ib_size_dw; ++i)
ib->ptr[i] = 0x0;
- if (direct) {
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
- job->fence = dma_fence_get(f);
- if (r)
- goto err;
-
- amdgpu_job_free(job);
- } else {
+ if (direct)
+ r = amdgpu_job_submit_direct(job, ring, &f);
+ else
r = amdgpu_job_submit(job, &ring->adev->vce.entity,
AMDGPU_FENCE_OWNER_UNDEFINED, &f);
- if (r)
- goto err;
- }
+ if (r)
+ goto err;
if (fence)
*fence = dma_fence_get(f);
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
index ceb0a7037897..831bb995b0ed 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
@@ -250,12 +250,10 @@ static int uvd_v7_0_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t handle
for (i = ib->length_dw; i < ib_size_dw; ++i)
ib->ptr[i] = 0x0;
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
- job->fence = dma_fence_get(f);
+ r = amdgpu_job_submit_direct(job, ring, &f);
if (r)
goto err;
- amdgpu_job_free(job);
if (fence)
*fence = dma_fence_get(f);
dma_fence_put(f);
@@ -313,19 +311,13 @@ int uvd_v7_0_enc_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,
for (i = ib->length_dw; i < ib_size_dw; ++i)
ib->ptr[i] = 0x0;
- if (direct) {
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
- job->fence = dma_fence_get(f);
- if (r)
- goto err;
-
- amdgpu_job_free(job);
- } else {
+ if (direct)
+ r = amdgpu_job_submit_direct(job, ring, &f);
+ else
r = amdgpu_job_submit(job, &ring->adev->vce.entity,
AMDGPU_FENCE_OWNER_UNDEFINED, &f);
- if (r)
- goto err;
- }
+ if (r)
+ goto err;
if (fence)
*fence = dma_fence_get(f);
--
2.14.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 6/7] drm/amdgpu: remove job->adev
[not found] ` <20180713151949.13665-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
` (3 preceding siblings ...)
2018-07-13 15:19 ` [PATCH 5/7] drm/amdgpu: add amdgpu_job_submit_direct helper Christian König
@ 2018-07-13 15:19 ` Christian König
[not found] ` <20180713151949.13665-6-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-07-13 15:19 ` [PATCH 7/7] drm/amdgpu: minor cleanup in amdgpu_job.c Christian König
2018-07-16 3:00 ` [PATCH 1/7] drm/amdgpu: cleanup job header Zhang, Jerry (Junwei)
6 siblings, 1 reply; 11+ messages in thread
From: Christian König @ 2018-07-13 15:19 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
We can get that from the ring.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 13 ++++++-------
drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 1 -
2 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index 0e2b18ccdf2e..bd708b726003 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -37,7 +37,7 @@ static void amdgpu_job_timedout(struct drm_sched_job *s_job)
job->base.sched->name, atomic_read(&ring->fence_drv.last_seq),
ring->fence_drv.sync_seq);
- amdgpu_device_gpu_recover(job->adev, job, false);
+ amdgpu_device_gpu_recover(ring->adev, job, false);
}
int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
@@ -54,7 +54,6 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
if (!*job)
return -ENOMEM;
- (*job)->adev = adev;
(*job)->vm = vm;
(*job)->ibs = (void *)&(*job)[1];
(*job)->num_ibs = num_ibs;
@@ -86,6 +85,7 @@ int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size,
void amdgpu_job_free_resources(struct amdgpu_job *job)
{
+ struct amdgpu_ring *ring = to_amdgpu_ring(job->base.sched);
struct dma_fence *f;
unsigned i;
@@ -93,7 +93,7 @@ void amdgpu_job_free_resources(struct amdgpu_job *job)
f = job->base.s_fence ? &job->base.s_fence->finished : job->fence;
for (i = 0; i < job->num_ibs; ++i)
- amdgpu_ib_free(job->adev, &job->ibs[i], f);
+ amdgpu_ib_free(ring->adev, &job->ibs[i], f);
}
static void amdgpu_job_free_cb(struct drm_sched_job *s_job)
@@ -167,7 +167,8 @@ static struct dma_fence *amdgpu_job_dependency(struct drm_sched_job *sched_job,
if (fence && explicit) {
if (drm_sched_dependency_optimized(fence, s_entity)) {
- r = amdgpu_sync_fence(job->adev, &job->sched_sync, fence, false);
+ r = amdgpu_sync_fence(ring->adev, &job->sched_sync,
+ fence, false);
if (r)
DRM_ERROR("Error adding fence to sync (%d)\n", r);
}
@@ -190,7 +191,6 @@ static struct dma_fence *amdgpu_job_run(struct drm_sched_job *sched_job)
{
struct amdgpu_ring *ring = to_amdgpu_ring(sched_job->sched);
struct dma_fence *fence = NULL, *finished;
- struct amdgpu_device *adev;
struct amdgpu_job *job;
int r;
@@ -200,13 +200,12 @@ static struct dma_fence *amdgpu_job_run(struct drm_sched_job *sched_job)
}
job = to_amdgpu_job(sched_job);
finished = &job->base.s_fence->finished;
- adev = job->adev;
BUG_ON(amdgpu_sync_peek_fence(&job->sync, NULL));
trace_amdgpu_sched_run_job(job);
- if (job->vram_lost_counter != atomic_read(&adev->vram_lost_counter))
+ if (job->vram_lost_counter != atomic_read(&ring->adev->vram_lost_counter))
dma_fence_set_error(finished, -ECANCELED);/* skip IB as well if VRAM lost */
if (finished->error < 0) {
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
index d77fd232f7ce..57cfe78a262b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
@@ -37,7 +37,6 @@ struct amdgpu_fence;
struct amdgpu_job {
struct drm_sched_job base;
- struct amdgpu_device *adev;
struct amdgpu_vm *vm;
struct amdgpu_sync sync;
struct amdgpu_sync sched_sync;
--
2.14.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 7/7] drm/amdgpu: minor cleanup in amdgpu_job.c
[not found] ` <20180713151949.13665-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
` (4 preceding siblings ...)
2018-07-13 15:19 ` [PATCH 6/7] drm/amdgpu: remove job->adev Christian König
@ 2018-07-13 15:19 ` Christian König
[not found] ` <20180713151949.13665-7-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-07-16 3:00 ` [PATCH 1/7] drm/amdgpu: cleanup job header Zhang, Jerry (Junwei)
6 siblings, 1 reply; 11+ messages in thread
From: Christian König @ 2018-07-13 15:19 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Remove superflous NULL check, fix coding style a bit, shorten error
messages.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index bd708b726003..024efb7ea6d6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -33,7 +33,7 @@ static void amdgpu_job_timedout(struct drm_sched_job *s_job)
struct amdgpu_ring *ring = to_amdgpu_ring(s_job->sched);
struct amdgpu_job *job = to_amdgpu_job(s_job);
- DRM_ERROR("ring %s timeout, last signaled seq=%u, last emitted seq=%u\n",
+ DRM_ERROR("ring %s timeout, signaled seq=%u, emitted seq=%u\n",
job->base.sched->name, atomic_read(&ring->fence_drv.last_seq),
ring->fence_drv.sync_seq);
@@ -161,16 +161,17 @@ static struct dma_fence *amdgpu_job_dependency(struct drm_sched_job *sched_job,
struct amdgpu_ring *ring = to_amdgpu_ring(s_entity->sched);
struct amdgpu_job *job = to_amdgpu_job(sched_job);
struct amdgpu_vm *vm = job->vm;
+ struct dma_fence *fence;
bool explicit = false;
int r;
- struct dma_fence *fence = amdgpu_sync_get_fence(&job->sync, &explicit);
+ fence = amdgpu_sync_get_fence(&job->sync, &explicit);
if (fence && explicit) {
if (drm_sched_dependency_optimized(fence, s_entity)) {
r = amdgpu_sync_fence(ring->adev, &job->sched_sync,
fence, false);
if (r)
- DRM_ERROR("Error adding fence to sync (%d)\n", r);
+ DRM_ERROR("Error adding fence (%d)\n", r);
}
}
@@ -194,10 +195,6 @@ static struct dma_fence *amdgpu_job_run(struct drm_sched_job *sched_job)
struct amdgpu_job *job;
int r;
- if (!sched_job) {
- DRM_ERROR("job is null\n");
- return NULL;
- }
job = to_amdgpu_job(sched_job);
finished = &job->base.s_fence->finished;
--
2.14.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 11+ messages in thread
* RE: [PATCH 7/7] drm/amdgpu: minor cleanup in amdgpu_job.c
[not found] ` <20180713151949.13665-7-christian.koenig-5C7GfCeVMHo@public.gmane.org>
@ 2018-07-16 1:47 ` Zhou, David(ChunMing)
0 siblings, 0 replies; 11+ messages in thread
From: Zhou, David(ChunMing) @ 2018-07-16 1:47 UTC (permalink / raw)
To: Christian König,
amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Series is Acked-by: Chunming Zhou <david1.zhou@amd.com>
-----Original Message-----
From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf Of Christian K?nig
Sent: Friday, July 13, 2018 11:20 PM
To: amd-gfx@lists.freedesktop.org
Subject: [PATCH 7/7] drm/amdgpu: minor cleanup in amdgpu_job.c
Remove superflous NULL check, fix coding style a bit, shorten error messages.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index bd708b726003..024efb7ea6d6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -33,7 +33,7 @@ static void amdgpu_job_timedout(struct drm_sched_job *s_job)
struct amdgpu_ring *ring = to_amdgpu_ring(s_job->sched);
struct amdgpu_job *job = to_amdgpu_job(s_job);
- DRM_ERROR("ring %s timeout, last signaled seq=%u, last emitted seq=%u\n",
+ DRM_ERROR("ring %s timeout, signaled seq=%u, emitted seq=%u\n",
job->base.sched->name, atomic_read(&ring->fence_drv.last_seq),
ring->fence_drv.sync_seq);
@@ -161,16 +161,17 @@ static struct dma_fence *amdgpu_job_dependency(struct drm_sched_job *sched_job,
struct amdgpu_ring *ring = to_amdgpu_ring(s_entity->sched);
struct amdgpu_job *job = to_amdgpu_job(sched_job);
struct amdgpu_vm *vm = job->vm;
+ struct dma_fence *fence;
bool explicit = false;
int r;
- struct dma_fence *fence = amdgpu_sync_get_fence(&job->sync, &explicit);
+ fence = amdgpu_sync_get_fence(&job->sync, &explicit);
if (fence && explicit) {
if (drm_sched_dependency_optimized(fence, s_entity)) {
r = amdgpu_sync_fence(ring->adev, &job->sched_sync,
fence, false);
if (r)
- DRM_ERROR("Error adding fence to sync (%d)\n", r);
+ DRM_ERROR("Error adding fence (%d)\n", r);
}
}
@@ -194,10 +195,6 @@ static struct dma_fence *amdgpu_job_run(struct drm_sched_job *sched_job)
struct amdgpu_job *job;
int r;
- if (!sched_job) {
- DRM_ERROR("job is null\n");
- return NULL;
- }
job = to_amdgpu_job(sched_job);
finished = &job->base.s_fence->finished;
--
2.14.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/7] drm/amdgpu: cleanup job header
[not found] ` <20180713151949.13665-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
` (5 preceding siblings ...)
2018-07-13 15:19 ` [PATCH 7/7] drm/amdgpu: minor cleanup in amdgpu_job.c Christian König
@ 2018-07-16 3:00 ` Zhang, Jerry (Junwei)
6 siblings, 0 replies; 11+ messages in thread
From: Zhang, Jerry (Junwei) @ 2018-07-16 3:00 UTC (permalink / raw)
To: Christian König, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
On 07/13/2018 11:19 PM, Christian König wrote:
> Move job related defines, structure and function declarations to
> amdgpu_job.h
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
The series is
Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
One more cleanup is on the way.
Jerry
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 46 +-------------------
> drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 74 +++++++++++++++++++++++++++++++++
> 2 files changed, 75 insertions(+), 45 deletions(-)
> create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 8eaba0f4db10..a60555f8e6fd 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -73,6 +73,7 @@
> #include "amdgpu_virt.h"
> #include "amdgpu_gart.h"
> #include "amdgpu_debugfs.h"
> +#include "amdgpu_job.h"
>
> /*
> * Modules parameters.
> @@ -600,17 +601,6 @@ struct amdgpu_ib {
>
> extern const struct drm_sched_backend_ops amdgpu_sched_ops;
>
> -int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
> - struct amdgpu_job **job, struct amdgpu_vm *vm);
> -int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size,
> - struct amdgpu_job **job);
> -
> -void amdgpu_job_free_resources(struct amdgpu_job *job);
> -void amdgpu_job_free(struct amdgpu_job *job);
> -int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring,
> - struct drm_sched_entity *entity, void *owner,
> - struct dma_fence **f);
> -
> /*
> * Queue manager
> */
> @@ -1050,40 +1040,6 @@ struct amdgpu_cs_parser {
> struct drm_syncobj **post_dep_syncobjs;
> };
>
> -#define AMDGPU_PREAMBLE_IB_PRESENT (1 << 0) /* bit set means command submit involves a preamble IB */
> -#define AMDGPU_PREAMBLE_IB_PRESENT_FIRST (1 << 1) /* bit set means preamble IB is first presented in belonging context */
> -#define AMDGPU_HAVE_CTX_SWITCH (1 << 2) /* bit set means context switch occured */
> -
> -struct amdgpu_job {
> - struct drm_sched_job base;
> - struct amdgpu_device *adev;
> - struct amdgpu_vm *vm;
> - struct amdgpu_ring *ring;
> - struct amdgpu_sync sync;
> - struct amdgpu_sync sched_sync;
> - struct amdgpu_ib *ibs;
> - struct dma_fence *fence; /* the hw fence */
> - uint32_t preamble_status;
> - uint32_t num_ibs;
> - void *owner;
> - uint64_t fence_ctx; /* the fence_context this job uses */
> - bool vm_needs_flush;
> - uint64_t vm_pd_addr;
> - unsigned vmid;
> - unsigned pasid;
> - uint32_t gds_base, gds_size;
> - uint32_t gws_base, gws_size;
> - uint32_t oa_base, oa_size;
> - uint32_t vram_lost_counter;
> -
> - /* user fence handling */
> - uint64_t uf_addr;
> - uint64_t uf_sequence;
> -
> -};
> -#define to_amdgpu_job(sched_job) \
> - container_of((sched_job), struct amdgpu_job, base)
> -
> static inline u32 amdgpu_get_ib_value(struct amdgpu_cs_parser *p,
> uint32_t ib_idx, int idx)
> {
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
> new file mode 100644
> index 000000000000..35bb93254eb2
> --- /dev/null
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
> @@ -0,0 +1,74 @@
> +/*
> + * Copyright 2018 Advanced Micro Devices, Inc.
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
> + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> + * OTHER DEALINGS IN THE SOFTWARE.
> + *
> + */
> +#ifndef __AMDGPU_JOB_H__
> +#define __AMDGPU_JOB_H__
> +
> +/* bit set means command submit involves a preamble IB */
> +#define AMDGPU_PREAMBLE_IB_PRESENT (1 << 0)
> +/* bit set means preamble IB is first presented in belonging context */
> +#define AMDGPU_PREAMBLE_IB_PRESENT_FIRST (1 << 1)
> +/* bit set means context switch occured */
> +#define AMDGPU_HAVE_CTX_SWITCH (1 << 2)
> +
> +#define to_amdgpu_job(sched_job) \
> + container_of((sched_job), struct amdgpu_job, base)
> +
> +struct amdgpu_job {
> + struct drm_sched_job base;
> + struct amdgpu_device *adev;
> + struct amdgpu_vm *vm;
> + struct amdgpu_ring *ring;
> + struct amdgpu_sync sync;
> + struct amdgpu_sync sched_sync;
> + struct amdgpu_ib *ibs;
> + struct dma_fence *fence; /* the hw fence */
> + uint32_t preamble_status;
> + uint32_t num_ibs;
> + void *owner;
> + uint64_t fence_ctx; /* the fence_context this job uses */
> + bool vm_needs_flush;
> + uint64_t vm_pd_addr;
> + unsigned vmid;
> + unsigned pasid;
> + uint32_t gds_base, gds_size;
> + uint32_t gws_base, gws_size;
> + uint32_t oa_base, oa_size;
> + uint32_t vram_lost_counter;
> +
> + /* user fence handling */
> + uint64_t uf_addr;
> + uint64_t uf_sequence;
> +
> +};
> +
> +int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
> + struct amdgpu_job **job, struct amdgpu_vm *vm);
> +int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size,
> + struct amdgpu_job **job);
> +
> +void amdgpu_job_free_resources(struct amdgpu_job *job);
> +void amdgpu_job_free(struct amdgpu_job *job);
> +int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring,
> + struct drm_sched_entity *entity, void *owner,
> + struct dma_fence **f);
> +#endif
>
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 6/7] drm/amdgpu: remove job->adev
[not found] ` <20180713151949.13665-6-christian.koenig-5C7GfCeVMHo@public.gmane.org>
@ 2018-07-16 15:50 ` Michel Dänzer
[not found] ` <e0930c99-0221-23b4-7357-9e7eee16945e-otUistvHUpPR7s880joybQ@public.gmane.org>
0 siblings, 1 reply; 11+ messages in thread
From: Michel Dänzer @ 2018-07-16 15:50 UTC (permalink / raw)
To: Christian König; +Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
[-- Attachment #1: Type: text/plain, Size: 580 bytes --]
On 2018-07-13 05:19 PM, Christian König wrote:
> We can get that from the ring.
>
> Signed-off-by: Christian König <christian.koenig-5C7GfCeVMHo@public.gmane.org>
This change introduced the attached oops when running the piglit
max-texture-size test, after which the test process hangs.
Note that the test always triggers the out of memory condition in
amdgpu_cs_ioctl, but before this change that was handled gracefully.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: kern.log --]
[-- Type: text/x-log; name="kern.log", Size: 7459 bytes --]
Jul 16 17:35:32 kaveri kernel: [ 97.203039] [drm:amdgpu_cs_ioctl [amdgpu]] *ERROR* amdgpu_cs_list_validate(validated) failed.
Jul 16 17:35:32 kaveri kernel: [ 97.203299] [drm:amdgpu_cs_ioctl [amdgpu]] *ERROR* Not enough memory for command submission!
Jul 16 17:35:32 kaveri kernel: [ 97.203388] BUG: unable to handle kernel paging request at ffffffffffffff30
Jul 16 17:35:32 kaveri kernel: [ 97.203398] PGD 1a6e16067 P4D 1a6e16067 PUD 1a6e18067 PMD 0
Jul 16 17:35:32 kaveri kernel: [ 97.203414] Oops: 0000 [#1] SMP KASAN NOPTI
Jul 16 17:35:32 kaveri kernel: [ 97.203423] CPU: 10 PID: 2009 Comm: max-textur:cs0 Tainted: G W OE 4.18.0-rc1+ #110
Jul 16 17:35:32 kaveri kernel: [ 97.203428] Hardware name: Micro-Star International Co., Ltd. MS-7A34/B350 TOMAHAWK (MS-7A34), BIOS 1.80 09/13/2017
Jul 16 17:35:32 kaveri kernel: [ 97.203555] RIP: 0010:amdgpu_job_free_resources+0x122/0x1f0 [amdgpu]
Jul 16 17:35:32 kaveri kernel: [ 97.203559] Code: 85 dc 00 00 00 48 8b 44 24 08 89 ea 48 8d 34 92 49 8b 96 48 02 00 00 42 80 3c 38 00 48 8d 34 f2 0f 85 a2 00 00 00 48 8b 14 24 <49> 8b bc 24 30 ff ff ff 83 c5 01 e8 2e 45 d9 ff 48 89 da 48 c1 ea
Jul 16 17:35:32 kaveri kernel: [ 97.203664] RSP: 0018:ffff8803de2e7698 EFLAGS: 00010246
Jul 16 17:35:32 kaveri kernel: [ 97.203671] RAX: 1fffffffffffffe6 RBX: ffff8803465969dc RCX: 1fffffffffffffe6
Jul 16 17:35:32 kaveri kernel: [ 97.203677] RDX: 0000000000000000 RSI: ffff880346596a30 RDI: ffff8803465969d0
Jul 16 17:35:32 kaveri kernel: [ 97.203682] RBP: 0000000000000000 R08: ffff8803de2e74b0 R09: 0000000000000000
Jul 16 17:35:32 kaveri kernel: [ 97.203686] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
Jul 16 17:35:32 kaveri kernel: [ 97.203691] R13: ffffed0068cb2d39 R14: ffff880346596780 R15: dffffc0000000000
Jul 16 17:35:32 kaveri kernel: [ 97.203698] FS: 00007fca13089700(0000) GS:ffff8803ee280000(0000) knlGS:0000000000000000
Jul 16 17:35:32 kaveri kernel: [ 97.203703] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Jul 16 17:35:32 kaveri kernel: [ 97.203708] CR2: ffffffffffffff30 CR3: 00000003cf8f4000 CR4: 00000000003406e0
Jul 16 17:35:32 kaveri kernel: [ 97.203712] Call Trace:
Jul 16 17:35:32 kaveri kernel: [ 97.203843] amdgpu_job_free+0xf/0x80 [amdgpu]
Jul 16 17:35:32 kaveri kernel: [ 97.203947] amdgpu_cs_ioctl+0x8dd/0x4e60 [amdgpu]
Jul 16 17:35:32 kaveri kernel: [ 97.204058] ? amdgpu_bo_list_ioctl+0x2d1/0x3e0 [amdgpu]
Jul 16 17:35:32 kaveri kernel: [ 97.204160] ? amdgpu_cs_find_mapping+0x3c0/0x3c0 [amdgpu]
Jul 16 17:35:32 kaveri kernel: [ 97.204170] ? do_vfs_ioctl+0x192/0xf30
Jul 16 17:35:32 kaveri kernel: [ 97.204176] ? ksys_ioctl+0x70/0x80
Jul 16 17:35:32 kaveri kernel: [ 97.204182] ? __x64_sys_ioctl+0x6f/0xb0
Jul 16 17:35:32 kaveri kernel: [ 97.204189] ? do_syscall_64+0xa5/0x3f0
Jul 16 17:35:32 kaveri kernel: [ 97.204199] ? __lock_acquire+0x605/0x3670
Jul 16 17:35:32 kaveri kernel: [ 97.204207] ? idr_get_free+0x4bc/0x980
Jul 16 17:35:32 kaveri kernel: [ 97.204215] ? find_held_lock+0x32/0x1c0
Jul 16 17:35:32 kaveri kernel: [ 97.204228] ? debug_check_no_locks_freed+0x2c0/0x2c0
Jul 16 17:35:32 kaveri kernel: [ 97.204235] ? __fprop_inc_percpu_max+0x1d0/0x1d0
Jul 16 17:35:32 kaveri kernel: [ 97.204361] ? amdgpu_cs_find_mapping+0x3c0/0x3c0 [amdgpu]
Jul 16 17:35:32 kaveri kernel: [ 97.204391] drm_ioctl_kernel+0x197/0x220 [drm]
Jul 16 17:35:32 kaveri kernel: [ 97.204422] ? drm_setversion+0x7d0/0x7d0 [drm]
Jul 16 17:35:32 kaveri kernel: [ 97.204432] ? __check_object_size+0x149/0x360
Jul 16 17:35:32 kaveri kernel: [ 97.204464] drm_ioctl+0x60a/0x970 [drm]
Jul 16 17:35:32 kaveri kernel: [ 97.204568] ? amdgpu_cs_find_mapping+0x3c0/0x3c0 [amdgpu]
Jul 16 17:35:32 kaveri kernel: [ 97.204599] ? drm_ioctl_kernel+0x220/0x220 [drm]
Jul 16 17:35:32 kaveri kernel: [ 97.204612] ? lock_downgrade+0x5e0/0x5e0
Jul 16 17:35:32 kaveri kernel: [ 97.204621] ? _raw_spin_unlock_irqrestore+0x32/0x60
Jul 16 17:35:32 kaveri kernel: [ 97.204629] ? trace_hardirqs_on_caller+0x381/0x570
Jul 16 17:35:32 kaveri kernel: [ 97.204729] amdgpu_drm_ioctl+0xcc/0x1a0 [amdgpu]
Jul 16 17:35:32 kaveri kernel: [ 97.204739] do_vfs_ioctl+0x192/0xf30
Jul 16 17:35:32 kaveri kernel: [ 97.204747] ? find_held_lock+0x32/0x1c0
Jul 16 17:35:32 kaveri kernel: [ 97.204754] ? ioctl_preallocate+0x1b0/0x1b0
Jul 16 17:35:32 kaveri kernel: [ 97.204763] ? __fget+0x1c8/0x300
Jul 16 17:35:32 kaveri kernel: [ 97.204771] ? lock_downgrade+0x5e0/0x5e0
Jul 16 17:35:32 kaveri kernel: [ 97.204783] ? __fget+0x1e0/0x300
Jul 16 17:35:32 kaveri kernel: [ 97.204796] ksys_ioctl+0x70/0x80
Jul 16 17:35:32 kaveri kernel: [ 97.204805] __x64_sys_ioctl+0x6f/0xb0
Jul 16 17:35:32 kaveri kernel: [ 97.204811] ? trace_hardirqs_on_caller+0x381/0x570
Jul 16 17:35:32 kaveri kernel: [ 97.204818] do_syscall_64+0xa5/0x3f0
Jul 16 17:35:32 kaveri kernel: [ 97.204826] entry_SYSCALL_64_after_hwframe+0x49/0xbe
Jul 16 17:35:32 kaveri kernel: [ 97.204832] RIP: 0033:0x7fca1ae40097
Jul 16 17:35:32 kaveri kernel: [ 97.204836] Code: b3 66 90 48 8b 05 f1 7d 0c 00 64 c7 00 26 00 00 00 48 c7 c0 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d c1 7d 0c 00 f7 d8 64 89 01 48
Jul 16 17:35:32 kaveri kernel: [ 97.204941] RSP: 002b:00007fca13088c68 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
Jul 16 17:35:32 kaveri kernel: [ 97.204949] RAX: ffffffffffffffda RBX: 00007fca13088d58 RCX: 00007fca1ae40097
Jul 16 17:35:32 kaveri kernel: [ 97.204954] RDX: 00007fca13088cd0 RSI: 00000000c0186444 RDI: 0000000000000006
Jul 16 17:35:32 kaveri kernel: [ 97.204959] RBP: 00007fca13088c90 R08: 00007fca13088d80 R09: 00007fca13088d58
Jul 16 17:35:32 kaveri kernel: [ 97.204964] R10: 00007fca13088d80 R11: 0000000000000246 R12: 00007fca13088cd0
Jul 16 17:35:32 kaveri kernel: [ 97.204968] R13: 00000000c0186444 R14: 0000000000000006 R15: 0000000000000000
Jul 16 17:35:32 kaveri kernel: [ 97.204981] Modules linked in: lz4(E) lz4_compress(E) cpufreq_powersave(E) cpufreq_userspace(E) cpufreq_conservative(E) binfmt_misc(E) amdkfd(OE) nls_ascii(E) nls_cp437(E) vfat(E) fat(E) amdgpu(OE) edac_mce_amd(E) chash(OE) gpu_sched(OE) snd_hda_codec_realtek(E) radeon(OE) snd_hda_codec_generic(E) kvm(E) snd_hda_codec_hdmi(E) irqbypass(E) snd_hda_intel(E) ttm(OE) crct10dif_pclmul(E) crc32_pclmul(E) ghash_clmulni_intel(E) snd_hda_codec(E) pcbc(E) wmi_bmof(E) drm_kms_helper(OE) snd_hda_core(E) snd_hwdep(E) efi_pstore(E) drm(OE) snd_pcm(E) aesni_intel(E) aes_x86_64(E) snd_timer(E) i2c_algo_bit(E) crypto_simd(E) fb_sys_fops(E) r8169(E) syscopyarea(E) cryptd(E) snd(E) sysfillrect(E) pcspkr(E) glue_helper(E) efivars(E) k10temp(E) mii(E) sg(E) sysimgblt(E) soundcore(E) ccp(E) sp5100_tco(E) rng_core(E) i2c_piix4(E)
Jul 16 17:35:32 kaveri kernel: [ 97.205092] wmi(E) button(E) acpi_cpufreq(E) tcp_bbr(E) sch_fq(E) sunrpc(E) nct6775(E) hwmon_vid(E) efivarfs(E) ip_tables(E) x_tables(E) ext4(E) crc32c_generic(E) crc16(E) mbcache(E) jbd2(E) fscrypto(E) dm_mod(E) raid10(E) raid1(E) raid0(E) multipath(E) linear(E) md_mod(E) sd_mod(E) evdev(E) hid_generic(E) usbhid(E) hid(E) ahci(E) xhci_pci(E) libahci(E) xhci_hcd(E) libata(E) crc32c_intel(E) usbcore(E) scsi_mod(E) gpio_amdpt(E) gpio_generic(E)
Jul 16 17:35:32 kaveri kernel: [ 97.205167] CR2: ffffffffffffff30
[-- Attachment #3: Type: text/plain, Size: 154 bytes --]
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 6/7] drm/amdgpu: remove job->adev
[not found] ` <e0930c99-0221-23b4-7357-9e7eee16945e-otUistvHUpPR7s880joybQ@public.gmane.org>
@ 2018-07-17 8:25 ` Christian König
0 siblings, 0 replies; 11+ messages in thread
From: Christian König @ 2018-07-17 8:25 UTC (permalink / raw)
To: Michel Dänzer; +Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Am 16.07.2018 um 17:50 schrieb Michel Dänzer:
> On 2018-07-13 05:19 PM, Christian König wrote:
>> We can get that from the ring.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
> This change introduced the attached oops when running the piglit
> max-texture-size test, after which the test process hangs.
>
> Note that the test always triggers the out of memory condition in
> amdgpu_cs_ioctl, but before this change that was handled gracefully.
Sorry for the noise. I didn't thought about the possibility of
destroying the job before the scheduler was determined.
Patch to fix this was just pushed to amd-staging-drm-next.
Regards,
Christian.
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2018-07-17 8:25 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-07-13 15:19 [PATCH 1/7] drm/amdgpu: cleanup job header Christian König
[not found] ` <20180713151949.13665-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-07-13 15:19 ` [PATCH 2/7] drm/amdgpu: remove fence context from the job Christian König
2018-07-13 15:19 ` [PATCH 3/7] drm/amdgpu: remove ring parameter from amdgpu_job_submit Christian König
2018-07-13 15:19 ` [PATCH 4/7] drm/amdgpu: remove job->ring Christian König
2018-07-13 15:19 ` [PATCH 5/7] drm/amdgpu: add amdgpu_job_submit_direct helper Christian König
2018-07-13 15:19 ` [PATCH 6/7] drm/amdgpu: remove job->adev Christian König
[not found] ` <20180713151949.13665-6-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-07-16 15:50 ` Michel Dänzer
[not found] ` <e0930c99-0221-23b4-7357-9e7eee16945e-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-07-17 8:25 ` Christian König
2018-07-13 15:19 ` [PATCH 7/7] drm/amdgpu: minor cleanup in amdgpu_job.c Christian König
[not found] ` <20180713151949.13665-7-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-07-16 1:47 ` Zhou, David(ChunMing)
2018-07-16 3:00 ` [PATCH 1/7] drm/amdgpu: cleanup job header Zhang, Jerry (Junwei)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox