The reset.work work_struct and its rocket_reset_work() handler were initialized and cancelled, but never actually queued: no code path calls queue_work()/schedule_work() on core->reset.work. The only reset entry point is the scheduler's timedout_job callback, rocket_job_timedout(), which invokes rocket_reset() directly on the timeout workqueue.
Drop the dead worker, its initialization and cancellation, and the unused struct member. Signed-off-by: Maíra Canal <[email protected]> --- drivers/accel/rocket/rocket_core.h | 1 - drivers/accel/rocket/rocket_job.c | 10 ---------- 2 files changed, 11 deletions(-) diff --git a/drivers/accel/rocket/rocket_core.h b/drivers/accel/rocket/rocket_core.h index f6d7382854ca..4d163a6ac653 100644 --- a/drivers/accel/rocket/rocket_core.h +++ b/drivers/accel/rocket/rocket_core.h @@ -48,7 +48,6 @@ struct rocket_core { struct { struct workqueue_struct *wq; - struct work_struct work; atomic_t pending; } reset; diff --git a/drivers/accel/rocket/rocket_job.c b/drivers/accel/rocket/rocket_job.c index 2f1861f960cc..8a26139a44f4 100644 --- a/drivers/accel/rocket/rocket_job.c +++ b/drivers/accel/rocket/rocket_job.c @@ -393,14 +393,6 @@ static enum drm_gpu_sched_stat rocket_job_timedout(struct drm_sched_job *sched_j return DRM_GPU_SCHED_STAT_RESET; } -static void rocket_reset_work(struct work_struct *work) -{ - struct rocket_core *core; - - core = container_of(work, struct rocket_core, reset.work); - rocket_reset(core, NULL); -} - static const struct drm_sched_backend_ops rocket_sched_ops = { .run_job = rocket_job_run, .timedout_job = rocket_job_timedout, @@ -444,7 +436,6 @@ int rocket_job_init(struct rocket_core *core) }; int ret; - INIT_WORK(&core->reset.work, rocket_reset_work); spin_lock_init(&core->fence_lock); mutex_init(&core->job_lock); @@ -488,7 +479,6 @@ void rocket_job_fini(struct rocket_core *core) { drm_sched_fini(&core->sched); - cancel_work_sync(&core->reset.work); destroy_workqueue(core->reset.wq); } -- 2.54.0
