OSDN Git Service

drm/amd/sched: add a unique job id to amd_sched_job
authorAndres Rodriguez <andresx7@gmail.com>
Fri, 10 Mar 2017 02:25:50 +0000 (21:25 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 30 Mar 2017 03:53:53 +0000 (23:53 -0400)
A unique id is useful for debugging and tracing. Intended to replace
pointers in ftrace output.

Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Andres Rodriguez <andresx7@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
drivers/gpu/drm/amd/scheduler/gpu_scheduler.h

index 16f9656..4122dbe 100644 (file)
@@ -460,6 +460,7 @@ int amd_sched_job_init(struct amd_sched_job *job,
        job->sched = sched;
        job->s_entity = entity;
        job->s_fence = amd_sched_fence_create(entity, owner);
+       job->id = atomic64_inc_return(&sched->job_id_count);
        if (!job->s_fence)
                return -ENOMEM;
 
@@ -617,6 +618,7 @@ int amd_sched_init(struct amd_gpu_scheduler *sched,
        INIT_LIST_HEAD(&sched->ring_mirror_list);
        spin_lock_init(&sched->job_list_lock);
        atomic_set(&sched->hw_rq_count, 0);
+       atomic64_set(&sched->job_id_count, 0);
 
        /* Each scheduler will run on a seperate kernel thread */
        sched->thread = kthread_run(amd_sched_main, sched, sched->name);
index d8dc681..e037b1e 100644 (file)
@@ -80,6 +80,7 @@ struct amd_sched_job {
        struct work_struct              finish_work;
        struct list_head                node;
        struct delayed_work             work_tdr;
+       uint64_t                        id;
 };
 
 extern const struct dma_fence_ops amd_sched_fence_ops_scheduled;
@@ -124,6 +125,7 @@ struct amd_gpu_scheduler {
        wait_queue_head_t               wake_up_worker;
        wait_queue_head_t               job_scheduled;
        atomic_t                        hw_rq_count;
+       atomic64_t                      job_id_count;
        struct task_struct              *thread;
        struct list_head        ring_mirror_list;
        spinlock_t                      job_list_lock;