[drm-exynos:exynos-drm-misc-next 1286/1301] drivers/accel/rocket/rocket_job.c:393:16: error: 'DRM_GPU_SCHED_STAT_NOMINAL' undeclared; did you mean 'DRM_GPU_SCHED_STAT_NO_HANG'?

kernel test robot lkp at intel.com
Tue Jul 29 22:03:37 UTC 2025


tree:   https://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git exynos-drm-misc-next
head:   01ac6e4e53b6351df42c97d217b0d2dbeef5c917
commit: 0810d5ad88a18f1e6d549853a388ad0316f74e36 [1286/1301] accel/rocket: Add job submission IOCTL
config: m68k-allmodconfig (https://download.01.org/0day-ci/archive/20250730/202507300607.O0gDZwRJ-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 15.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250730/202507300607.O0gDZwRJ-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp at intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202507300607.O0gDZwRJ-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/accel/rocket/rocket_job.c: In function 'rocket_job_timedout':
>> drivers/accel/rocket/rocket_job.c:393:16: error: 'DRM_GPU_SCHED_STAT_NOMINAL' undeclared (first use in this function); did you mean 'DRM_GPU_SCHED_STAT_NO_HANG'?
     393 |         return DRM_GPU_SCHED_STAT_NOMINAL;
         |                ^~~~~~~~~~~~~~~~~~~~~~~~~~
         |                DRM_GPU_SCHED_STAT_NO_HANG
   drivers/accel/rocket/rocket_job.c:393:16: note: each undeclared identifier is reported only once for each function it appears in
   drivers/accel/rocket/rocket_job.c: In function 'rocket_ioctl_submit_job':
>> drivers/accel/rocket/rocket_job.c:553:15: error: too few arguments to function 'drm_sched_job_init'; expected 5, have 4
     553 |         ret = drm_sched_job_init(&rjob->base,
         |               ^~~~~~~~~~~~~~~~~~
   In file included from drivers/accel/rocket/rocket_core.h:7,
                    from drivers/accel/rocket/rocket_job.c:15:
   include/drm/gpu_scheduler.h:655:5: note: declared here
     655 | int drm_sched_job_init(struct drm_sched_job *job,
         |     ^~~~~~~~~~~~~~~~~~


vim +393 drivers/accel/rocket/rocket_job.c

   381	
   382	static enum drm_gpu_sched_stat rocket_job_timedout(struct drm_sched_job *sched_job)
   383	{
   384		struct rocket_job *job = to_rocket_job(sched_job);
   385		struct rocket_device *rdev = job->rdev;
   386		struct rocket_core *core = sched_to_core(rdev, sched_job->sched);
   387	
   388		dev_err(core->dev, "NPU job timed out");
   389	
   390		atomic_set(&core->reset.pending, 1);
   391		rocket_reset(core, sched_job);
   392	
 > 393		return DRM_GPU_SCHED_STAT_NOMINAL;
   394	}
   395	
   396	static void rocket_reset_work(struct work_struct *work)
   397	{
   398		struct rocket_core *core;
   399	
   400		core = container_of(work, struct rocket_core, reset.work);
   401		rocket_reset(core, NULL);
   402	}
   403	
   404	static const struct drm_sched_backend_ops rocket_sched_ops = {
   405		.run_job = rocket_job_run,
   406		.timedout_job = rocket_job_timedout,
   407		.free_job = rocket_job_free
   408	};
   409	
   410	static irqreturn_t rocket_job_irq_handler_thread(int irq, void *data)
   411	{
   412		struct rocket_core *core = data;
   413	
   414		rocket_job_handle_irq(core);
   415	
   416		return IRQ_HANDLED;
   417	}
   418	
   419	static irqreturn_t rocket_job_irq_handler(int irq, void *data)
   420	{
   421		struct rocket_core *core = data;
   422		u32 raw_status = rocket_pc_readl(core, INTERRUPT_RAW_STATUS);
   423	
   424		WARN_ON(raw_status & PC_INTERRUPT_RAW_STATUS_DMA_READ_ERROR);
   425		WARN_ON(raw_status & PC_INTERRUPT_RAW_STATUS_DMA_READ_ERROR);
   426	
   427		if (!(raw_status & PC_INTERRUPT_RAW_STATUS_DPU_0 ||
   428		      raw_status & PC_INTERRUPT_RAW_STATUS_DPU_1))
   429			return IRQ_NONE;
   430	
   431		rocket_pc_writel(core, INTERRUPT_MASK, 0x0);
   432	
   433		return IRQ_WAKE_THREAD;
   434	}
   435	
   436	int rocket_job_init(struct rocket_core *core)
   437	{
   438		struct drm_sched_init_args args = {
   439			.ops = &rocket_sched_ops,
   440			.num_rqs = DRM_SCHED_PRIORITY_COUNT,
   441			.credit_limit = 1,
   442			.timeout = msecs_to_jiffies(JOB_TIMEOUT_MS),
   443			.name = dev_name(core->dev),
   444			.dev = core->dev,
   445		};
   446		int ret;
   447	
   448		INIT_WORK(&core->reset.work, rocket_reset_work);
   449		spin_lock_init(&core->fence_lock);
   450		mutex_init(&core->job_lock);
   451	
   452		core->irq = platform_get_irq(to_platform_device(core->dev), 0);
   453		if (core->irq < 0)
   454			return core->irq;
   455	
   456		ret = devm_request_threaded_irq(core->dev, core->irq,
   457						rocket_job_irq_handler,
   458						rocket_job_irq_handler_thread,
   459						IRQF_SHARED, dev_name(core->dev),
   460						core);
   461		if (ret) {
   462			dev_err(core->dev, "failed to request job irq");
   463			return ret;
   464		}
   465	
   466		core->reset.wq = alloc_ordered_workqueue("rocket-reset-%d", 0, core->index);
   467		if (!core->reset.wq)
   468			return -ENOMEM;
   469	
   470		core->fence_context = dma_fence_context_alloc(1);
   471	
   472		args.timeout_wq = core->reset.wq;
   473		ret = drm_sched_init(&core->sched, &args);
   474		if (ret) {
   475			dev_err(core->dev, "Failed to create scheduler: %d.", ret);
   476			goto err_sched;
   477		}
   478	
   479		return 0;
   480	
   481	err_sched:
   482		drm_sched_fini(&core->sched);
   483	
   484		destroy_workqueue(core->reset.wq);
   485		return ret;
   486	}
   487	
   488	void rocket_job_fini(struct rocket_core *core)
   489	{
   490		drm_sched_fini(&core->sched);
   491	
   492		cancel_work_sync(&core->reset.work);
   493		destroy_workqueue(core->reset.wq);
   494	}
   495	
   496	int rocket_job_open(struct rocket_file_priv *rocket_priv)
   497	{
   498		struct rocket_device *rdev = rocket_priv->rdev;
   499		struct drm_gpu_scheduler **scheds = kmalloc_array(rdev->num_cores, sizeof(scheds),
   500								  GFP_KERNEL);
   501		unsigned int core;
   502		int ret;
   503	
   504		for (core = 0; core < rdev->num_cores; core++)
   505			scheds[core] = &rdev->cores[core].sched;
   506	
   507		ret = drm_sched_entity_init(&rocket_priv->sched_entity,
   508					    DRM_SCHED_PRIORITY_NORMAL,
   509					    scheds,
   510					    rdev->num_cores, NULL);
   511		if (WARN_ON(ret))
   512			return ret;
   513	
   514		return 0;
   515	}
   516	
   517	void rocket_job_close(struct rocket_file_priv *rocket_priv)
   518	{
   519		struct drm_sched_entity *entity = &rocket_priv->sched_entity;
   520	
   521		kfree(entity->sched_list);
   522		drm_sched_entity_destroy(entity);
   523	}
   524	
   525	int rocket_job_is_idle(struct rocket_core *core)
   526	{
   527		/* If there are any jobs in this HW queue, we're not idle */
   528		if (atomic_read(&core->sched.credit_count))
   529			return false;
   530	
   531		return true;
   532	}
   533	
   534	static int rocket_ioctl_submit_job(struct drm_device *dev, struct drm_file *file,
   535					   struct drm_rocket_job *job)
   536	{
   537		struct rocket_device *rdev = to_rocket_device(dev);
   538		struct rocket_file_priv *file_priv = file->driver_priv;
   539		struct rocket_job *rjob = NULL;
   540		int ret = 0;
   541	
   542		if (job->task_count == 0)
   543			return -EINVAL;
   544	
   545		rjob = kzalloc(sizeof(*rjob), GFP_KERNEL);
   546		if (!rjob)
   547			return -ENOMEM;
   548	
   549		kref_init(&rjob->refcount);
   550	
   551		rjob->rdev = rdev;
   552	
 > 553		ret = drm_sched_job_init(&rjob->base,
   554					 &file_priv->sched_entity,
   555					 1, NULL);
   556		if (ret)
   557			goto out_put_job;
   558	
   559		ret = rocket_copy_tasks(dev, file, job, rjob);
   560		if (ret)
   561			goto out_cleanup_job;
   562	
   563		ret = drm_gem_objects_lookup(file, u64_to_user_ptr(job->in_bo_handles),
   564					     job->in_bo_handle_count, &rjob->in_bos);
   565		if (ret)
   566			goto out_cleanup_job;
   567	
   568		rjob->in_bo_count = job->in_bo_handle_count;
   569	
   570		ret = drm_gem_objects_lookup(file, u64_to_user_ptr(job->out_bo_handles),
   571					     job->out_bo_handle_count, &rjob->out_bos);
   572		if (ret)
   573			goto out_cleanup_job;
   574	
   575		rjob->out_bo_count = job->out_bo_handle_count;
   576	
   577		rjob->domain = rocket_iommu_domain_get(file_priv);
   578	
   579		ret = rocket_job_push(rjob);
   580		if (ret)
   581			goto out_cleanup_job;
   582	
   583	out_cleanup_job:
   584		if (ret)
   585			drm_sched_job_cleanup(&rjob->base);
   586	out_put_job:
   587		rocket_job_put(rjob);
   588	
   589		return ret;
   590	}
   591	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


More information about the dri-devel mailing list