]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
drm/amd/scheduler:introduce guilty pointer member
authorMonk Liu <Monk.Liu@amd.com>
Mon, 23 Oct 2017 04:23:29 +0000 (12:23 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 4 Dec 2017 21:33:09 +0000 (16:33 -0500)
this member will be used later, it will points to
the real var inside of context and CS_SUBMIT & gpu schdduler
can decide if skip a job depends on context->guilty or *entity->guilty

Signed-off-by: Monk Liu <Monk.Liu@amd.com>
Reviewed-by: Chunming Zhou <David1.Zhou@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
drivers/gpu/drm/amd/scheduler/gpu_scheduler.h

index c184468e2b2b31cc196c9494e94ce31538091ae4..bb5a46a000eee797916d8aa0ff513c94d80057d9 100644 (file)
@@ -90,7 +90,7 @@ static int amdgpu_ctx_init(struct amdgpu_device *adev,
                        continue;
 
                r = amd_sched_entity_init(&ring->sched, &ctx->rings[i].entity,
-                                         rq, amdgpu_sched_jobs);
+                                         rq, amdgpu_sched_jobs, NULL);
                if (r)
                        goto failed;
        }
index ad5bf86ee8a31911e1bf014b2f354f39a88fd337..bdefc7b9fcff486faf4b5a97f0565bb9bb42e6ea 100644 (file)
@@ -110,7 +110,7 @@ static int amdgpu_ttm_global_init(struct amdgpu_device *adev)
        ring = adev->mman.buffer_funcs_ring;
        rq = &ring->sched.sched_rq[AMD_SCHED_PRIORITY_KERNEL];
        r = amd_sched_entity_init(&ring->sched, &adev->mman.entity,
-                                 rq, amdgpu_sched_jobs);
+                                 rq, amdgpu_sched_jobs, NULL);
        if (r) {
                DRM_ERROR("Failed setting up TTM BO move run queue.\n");
                goto error_entity;
index e8bd50cf97857ee5d4a0ea12f9bf033b902bf7d8..6604771356cd909d1f337807b90016510e791766 100644 (file)
@@ -232,7 +232,7 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev)
        ring = &adev->uvd.ring;
        rq = &ring->sched.sched_rq[AMD_SCHED_PRIORITY_NORMAL];
        r = amd_sched_entity_init(&ring->sched, &adev->uvd.entity,
-                                 rq, amdgpu_sched_jobs);
+                                 rq, amdgpu_sched_jobs, NULL);
        if (r != 0) {
                DRM_ERROR("Failed setting up UVD run queue.\n");
                return r;
index 2918de2f39ec5761bf1af6a3e1fdf199b6b50b31..873c99518954e0566918b3e03c0311e9c6e28f33 100644 (file)
@@ -176,7 +176,7 @@ int amdgpu_vce_sw_init(struct amdgpu_device *adev, unsigned long size)
        ring = &adev->vce.ring[0];
        rq = &ring->sched.sched_rq[AMD_SCHED_PRIORITY_NORMAL];
        r = amd_sched_entity_init(&ring->sched, &adev->vce.entity,
-                                 rq, amdgpu_sched_jobs);
+                                 rq, amdgpu_sched_jobs, NULL);
        if (r != 0) {
                DRM_ERROR("Failed setting up VCE run queue.\n");
                return r;
index 041e0121590c96bb34e17444d32ec0186efeb539..96df21cca85ded164034a9a1e640af2baa21d53b 100644 (file)
@@ -106,7 +106,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev)
        ring = &adev->vcn.ring_dec;
        rq = &ring->sched.sched_rq[AMD_SCHED_PRIORITY_NORMAL];
        r = amd_sched_entity_init(&ring->sched, &adev->vcn.entity_dec,
-                                 rq, amdgpu_sched_jobs);
+                                 rq, amdgpu_sched_jobs, NULL);
        if (r != 0) {
                DRM_ERROR("Failed setting up VCN dec run queue.\n");
                return r;
@@ -115,7 +115,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev)
        ring = &adev->vcn.ring_enc[0];
        rq = &ring->sched.sched_rq[AMD_SCHED_PRIORITY_NORMAL];
        r = amd_sched_entity_init(&ring->sched, &adev->vcn.entity_enc,
-                                 rq, amdgpu_sched_jobs);
+                                 rq, amdgpu_sched_jobs, NULL);
        if (r != 0) {
                DRM_ERROR("Failed setting up VCN enc run queue.\n");
                return r;
index c8c26f21993ccd7078172a264f21dd276d3895bb..1e727da2bb64f263b53403eb4932e81ff4fee9e5 100644 (file)
@@ -2637,7 +2637,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
        ring = adev->vm_manager.vm_pte_rings[ring_instance];
        rq = &ring->sched.sched_rq[AMD_SCHED_PRIORITY_KERNEL];
        r = amd_sched_entity_init(&ring->sched, &vm->entity,
-                                 rq, amdgpu_sched_jobs);
+                                 rq, amdgpu_sched_jobs, NULL);
        if (r)
                return r;
 
index 920910ac8663a97bfc6354b0ad5f178285cc6d43..246dfd74f5c9610177b0928ec595c6476b1ba2c4 100644 (file)
@@ -416,7 +416,7 @@ static int uvd_v6_0_sw_init(void *handle)
                ring = &adev->uvd.ring_enc[0];
                rq = &ring->sched.sched_rq[AMD_SCHED_PRIORITY_NORMAL];
                r = amd_sched_entity_init(&ring->sched, &adev->uvd.entity_enc,
-                                         rq, amdgpu_sched_jobs);
+                                         rq, amdgpu_sched_jobs, NULL);
                if (r) {
                        DRM_ERROR("Failed setting up UVD ENC run queue.\n");
                        return r;
index 6634545060fd4404a01cd0c0eddceb29451c744b..762ff3901a7ad2a0d34f4d8ccec9dfbf996c7f82 100644 (file)
@@ -418,7 +418,7 @@ static int uvd_v7_0_sw_init(void *handle)
        ring = &adev->uvd.ring_enc[0];
        rq = &ring->sched.sched_rq[AMD_SCHED_PRIORITY_NORMAL];
        r = amd_sched_entity_init(&ring->sched, &adev->uvd.entity_enc,
-                                 rq, amdgpu_sched_jobs);
+                                 rq, amdgpu_sched_jobs, NULL);
        if (r) {
                DRM_ERROR("Failed setting up UVD ENC run queue.\n");
                return r;
index 5a1ece2774b50cf0949ada76f3074508331ccc6f..764606ce3541a82ad746acc1288e769812aa8df1 100644 (file)
@@ -121,7 +121,7 @@ amd_sched_rq_select_entity(struct amd_sched_rq *rq)
 int amd_sched_entity_init(struct amd_gpu_scheduler *sched,
                          struct amd_sched_entity *entity,
                          struct amd_sched_rq *rq,
-                         uint32_t jobs)
+                         uint32_t jobs, atomic_t *guilty)
 {
        int r;
 
@@ -132,6 +132,7 @@ int amd_sched_entity_init(struct amd_gpu_scheduler *sched,
        INIT_LIST_HEAD(&entity->list);
        entity->rq = rq;
        entity->sched = sched;
+       entity->guilty = guilty;
 
        spin_lock_init(&entity->rq_lock);
        spin_lock_init(&entity->queue_lock);
index 3ea75a2f35d4722d3ddcf668629587b90810a19a..a05994c60b34168984c87d6b83a7df85a66eab16 100644 (file)
@@ -63,6 +63,7 @@ struct amd_sched_entity {
 
        struct dma_fence                *dependency;
        struct dma_fence_cb             cb;
+       atomic_t        *guilty; /* points to ctx's guilty */
 };
 
 /**
@@ -155,7 +156,7 @@ void amd_sched_fini(struct amd_gpu_scheduler *sched);
 int amd_sched_entity_init(struct amd_gpu_scheduler *sched,
                          struct amd_sched_entity *entity,
                          struct amd_sched_rq *rq,
-                         uint32_t jobs);
+                         uint32_t jobs, atomic_t* guilty);
 void amd_sched_entity_fini(struct amd_gpu_scheduler *sched,
                           struct amd_sched_entity *entity);
 void amd_sched_entity_push_job(struct amd_sched_job *sched_job);