All of lore.kernel.org
 help / color / mirror / Atom feed
* [radeon-alex:amd-staging-drm-next-navi14 56/56] drivers/gpu/drm/panfrost/panfrost_job.c:390:31: sparse: error: not enough arguments for function drm_sched_stop
@ 2019-07-04 22:04 kbuild test robot
  0 siblings, 0 replies; only message in thread
From: kbuild test robot @ 2019-07-04 22:04 UTC (permalink / raw)
  To: Alex Deucher; +Cc: kbuild-all, dri-devel

[-- Attachment #1: Type: text/plain, Size: 14911 bytes --]

tree:   git://people.freedesktop.org/~agd5f/linux.git amd-staging-drm-next-navi14
head:   a40514b64b37d96b20c25841227302d4aab28afb
commit: a40514b64b37d96b20c25841227302d4aab28afb [56/56] drm/amdgpu: consolidate navi14 IP init
reproduce:
        # apt-get install sparse
        # sparse version: 
        git checkout a40514b64b37d96b20c25841227302d4aab28afb
        make ARCH=x86_64 allmodconfig
        make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> drivers/gpu/drm/panfrost/panfrost_job.c:390:31: sparse: error: not enough arguments for function drm_sched_stop

vim +390 drivers/gpu/drm/panfrost/panfrost_job.c

f3ba91228e8e91 Rob Herring  2018-09-10  365  
f3ba91228e8e91 Rob Herring  2018-09-10  366  static void panfrost_job_timedout(struct drm_sched_job *sched_job)
f3ba91228e8e91 Rob Herring  2018-09-10  367  {
f3ba91228e8e91 Rob Herring  2018-09-10  368  	struct panfrost_job *job = to_panfrost_job(sched_job);
f3ba91228e8e91 Rob Herring  2018-09-10  369  	struct panfrost_device *pfdev = job->pfdev;
f3ba91228e8e91 Rob Herring  2018-09-10  370  	int js = panfrost_job_get_slot(job);
f3ba91228e8e91 Rob Herring  2018-09-10  371  	int i;
f3ba91228e8e91 Rob Herring  2018-09-10  372  
f3ba91228e8e91 Rob Herring  2018-09-10  373  	/*
f3ba91228e8e91 Rob Herring  2018-09-10  374  	 * If the GPU managed to complete this jobs fence, the timeout is
f3ba91228e8e91 Rob Herring  2018-09-10  375  	 * spurious. Bail out.
f3ba91228e8e91 Rob Herring  2018-09-10  376  	 */
f3ba91228e8e91 Rob Herring  2018-09-10  377  	if (dma_fence_is_signaled(job->done_fence))
f3ba91228e8e91 Rob Herring  2018-09-10  378  		return;
f3ba91228e8e91 Rob Herring  2018-09-10  379  
f3ba91228e8e91 Rob Herring  2018-09-10  380  	dev_err(pfdev->dev, "gpu sched timeout, js=%d, status=0x%x, head=0x%x, tail=0x%x, sched_job=%p",
f3ba91228e8e91 Rob Herring  2018-09-10  381  		js,
f3ba91228e8e91 Rob Herring  2018-09-10  382  		job_read(pfdev, JS_STATUS(js)),
f3ba91228e8e91 Rob Herring  2018-09-10  383  		job_read(pfdev, JS_HEAD_LO(js)),
f3ba91228e8e91 Rob Herring  2018-09-10  384  		job_read(pfdev, JS_TAIL_LO(js)),
f3ba91228e8e91 Rob Herring  2018-09-10  385  		sched_job);
f3ba91228e8e91 Rob Herring  2018-09-10  386  
aa20236784ab3d Tomeu Vizoso 2019-04-18  387  	mutex_lock(&pfdev->reset_lock);
aa20236784ab3d Tomeu Vizoso 2019-04-18  388  
f3ba91228e8e91 Rob Herring  2018-09-10  389  	for (i = 0; i < NUM_JOB_SLOTS; i++)
f3ba91228e8e91 Rob Herring  2018-09-10 @390  		drm_sched_stop(&pfdev->js->queue[i].sched);
f3ba91228e8e91 Rob Herring  2018-09-10  391  
f3ba91228e8e91 Rob Herring  2018-09-10  392  	if (sched_job)
f3ba91228e8e91 Rob Herring  2018-09-10  393  		drm_sched_increase_karma(sched_job);
f3ba91228e8e91 Rob Herring  2018-09-10  394  
f3ba91228e8e91 Rob Herring  2018-09-10  395  	/* panfrost_core_dump(pfdev); */
f3ba91228e8e91 Rob Herring  2018-09-10  396  
f3ba91228e8e91 Rob Herring  2018-09-10  397  	panfrost_devfreq_record_transition(pfdev, js);
f3ba91228e8e91 Rob Herring  2018-09-10  398  	panfrost_gpu_soft_reset(pfdev);
f3ba91228e8e91 Rob Herring  2018-09-10  399  
f3ba91228e8e91 Rob Herring  2018-09-10  400  	/* TODO: Re-enable all other address spaces */
f3ba91228e8e91 Rob Herring  2018-09-10  401  	panfrost_mmu_enable(pfdev, 0);
f3ba91228e8e91 Rob Herring  2018-09-10  402  	panfrost_gpu_power_on(pfdev);
f3ba91228e8e91 Rob Herring  2018-09-10  403  	panfrost_job_enable_interrupts(pfdev);
f3ba91228e8e91 Rob Herring  2018-09-10  404  
f3ba91228e8e91 Rob Herring  2018-09-10  405  	for (i = 0; i < NUM_JOB_SLOTS; i++)
f3ba91228e8e91 Rob Herring  2018-09-10  406  		drm_sched_resubmit_jobs(&pfdev->js->queue[i].sched);
f3ba91228e8e91 Rob Herring  2018-09-10  407  
f3ba91228e8e91 Rob Herring  2018-09-10  408  	/* restart scheduler after GPU is usable again */
f3ba91228e8e91 Rob Herring  2018-09-10  409  	for (i = 0; i < NUM_JOB_SLOTS; i++)
f3ba91228e8e91 Rob Herring  2018-09-10  410  		drm_sched_start(&pfdev->js->queue[i].sched, true);
aa20236784ab3d Tomeu Vizoso 2019-04-18  411  
aa20236784ab3d Tomeu Vizoso 2019-04-18  412  	mutex_unlock(&pfdev->reset_lock);
f3ba91228e8e91 Rob Herring  2018-09-10  413  }
f3ba91228e8e91 Rob Herring  2018-09-10  414  
f3ba91228e8e91 Rob Herring  2018-09-10  415  static const struct drm_sched_backend_ops panfrost_sched_ops = {
f3ba91228e8e91 Rob Herring  2018-09-10  416  	.dependency = panfrost_job_dependency,
f3ba91228e8e91 Rob Herring  2018-09-10  417  	.run_job = panfrost_job_run,
f3ba91228e8e91 Rob Herring  2018-09-10  418  	.timedout_job = panfrost_job_timedout,
f3ba91228e8e91 Rob Herring  2018-09-10  419  	.free_job = panfrost_job_free
f3ba91228e8e91 Rob Herring  2018-09-10  420  };
f3ba91228e8e91 Rob Herring  2018-09-10  421  
f3ba91228e8e91 Rob Herring  2018-09-10  422  static irqreturn_t panfrost_job_irq_handler(int irq, void *data)
f3ba91228e8e91 Rob Herring  2018-09-10  423  {
f3ba91228e8e91 Rob Herring  2018-09-10  424  	struct panfrost_device *pfdev = data;
f3ba91228e8e91 Rob Herring  2018-09-10  425  	u32 status = job_read(pfdev, JOB_INT_STAT);
f3ba91228e8e91 Rob Herring  2018-09-10  426  	int j;
f3ba91228e8e91 Rob Herring  2018-09-10  427  
f3ba91228e8e91 Rob Herring  2018-09-10  428  	dev_dbg(pfdev->dev, "jobslot irq status=%x\n", status);
f3ba91228e8e91 Rob Herring  2018-09-10  429  
f3ba91228e8e91 Rob Herring  2018-09-10  430  	if (!status)
f3ba91228e8e91 Rob Herring  2018-09-10  431  		return IRQ_NONE;
f3ba91228e8e91 Rob Herring  2018-09-10  432  
f3ba91228e8e91 Rob Herring  2018-09-10  433  	pm_runtime_mark_last_busy(pfdev->dev);
f3ba91228e8e91 Rob Herring  2018-09-10  434  
f3ba91228e8e91 Rob Herring  2018-09-10  435  	for (j = 0; status; j++) {
f3ba91228e8e91 Rob Herring  2018-09-10  436  		u32 mask = MK_JS_MASK(j);
f3ba91228e8e91 Rob Herring  2018-09-10  437  
f3ba91228e8e91 Rob Herring  2018-09-10  438  		if (!(status & mask))
f3ba91228e8e91 Rob Herring  2018-09-10  439  			continue;
f3ba91228e8e91 Rob Herring  2018-09-10  440  
f3ba91228e8e91 Rob Herring  2018-09-10  441  		job_write(pfdev, JOB_INT_CLEAR, mask);
f3ba91228e8e91 Rob Herring  2018-09-10  442  
f3ba91228e8e91 Rob Herring  2018-09-10  443  		if (status & JOB_INT_MASK_ERR(j)) {
f3ba91228e8e91 Rob Herring  2018-09-10  444  			job_write(pfdev, JS_COMMAND_NEXT(j), JS_COMMAND_NOP);
f3ba91228e8e91 Rob Herring  2018-09-10  445  
f3ba91228e8e91 Rob Herring  2018-09-10  446  			dev_err(pfdev->dev, "js fault, js=%d, status=%s, head=0x%x, tail=0x%x",
f3ba91228e8e91 Rob Herring  2018-09-10  447  				j,
f3ba91228e8e91 Rob Herring  2018-09-10  448  				panfrost_exception_name(pfdev, job_read(pfdev, JS_STATUS(j))),
f3ba91228e8e91 Rob Herring  2018-09-10  449  				job_read(pfdev, JS_HEAD_LO(j)),
f3ba91228e8e91 Rob Herring  2018-09-10  450  				job_read(pfdev, JS_TAIL_LO(j)));
f3ba91228e8e91 Rob Herring  2018-09-10  451  
f3ba91228e8e91 Rob Herring  2018-09-10  452  			drm_sched_fault(&pfdev->js->queue[j].sched);
f3ba91228e8e91 Rob Herring  2018-09-10  453  		}
f3ba91228e8e91 Rob Herring  2018-09-10  454  
f3ba91228e8e91 Rob Herring  2018-09-10  455  		if (status & JOB_INT_MASK_DONE(j)) {
f3ba91228e8e91 Rob Herring  2018-09-10  456  			panfrost_devfreq_record_transition(pfdev, j);
f3ba91228e8e91 Rob Herring  2018-09-10  457  			dma_fence_signal(pfdev->jobs[j]->done_fence);
f3ba91228e8e91 Rob Herring  2018-09-10  458  		}
f3ba91228e8e91 Rob Herring  2018-09-10  459  
f3ba91228e8e91 Rob Herring  2018-09-10  460  		status &= ~mask;
f3ba91228e8e91 Rob Herring  2018-09-10  461  	}
f3ba91228e8e91 Rob Herring  2018-09-10  462  
f3ba91228e8e91 Rob Herring  2018-09-10  463  	return IRQ_HANDLED;
f3ba91228e8e91 Rob Herring  2018-09-10  464  }
f3ba91228e8e91 Rob Herring  2018-09-10  465  
f3ba91228e8e91 Rob Herring  2018-09-10  466  int panfrost_job_init(struct panfrost_device *pfdev)
f3ba91228e8e91 Rob Herring  2018-09-10  467  {
f3ba91228e8e91 Rob Herring  2018-09-10  468  	struct panfrost_job_slot *js;
f3ba91228e8e91 Rob Herring  2018-09-10  469  	int ret, j, irq;
f3ba91228e8e91 Rob Herring  2018-09-10  470  
f3ba91228e8e91 Rob Herring  2018-09-10  471  	pfdev->js = js = devm_kzalloc(pfdev->dev, sizeof(*js), GFP_KERNEL);
f3ba91228e8e91 Rob Herring  2018-09-10  472  	if (!js)
f3ba91228e8e91 Rob Herring  2018-09-10  473  		return -ENOMEM;
f3ba91228e8e91 Rob Herring  2018-09-10  474  
f3ba91228e8e91 Rob Herring  2018-09-10  475  	spin_lock_init(&js->job_lock);
f3ba91228e8e91 Rob Herring  2018-09-10  476  
f3ba91228e8e91 Rob Herring  2018-09-10  477  	irq = platform_get_irq_byname(to_platform_device(pfdev->dev), "job");
f3ba91228e8e91 Rob Herring  2018-09-10  478  	if (irq <= 0)
f3ba91228e8e91 Rob Herring  2018-09-10  479  		return -ENODEV;
f3ba91228e8e91 Rob Herring  2018-09-10  480  
f3ba91228e8e91 Rob Herring  2018-09-10  481  	ret = devm_request_irq(pfdev->dev, irq, panfrost_job_irq_handler,
f3ba91228e8e91 Rob Herring  2018-09-10  482  			       IRQF_SHARED, "job", pfdev);
f3ba91228e8e91 Rob Herring  2018-09-10  483  	if (ret) {
f3ba91228e8e91 Rob Herring  2018-09-10  484  		dev_err(pfdev->dev, "failed to request job irq");
f3ba91228e8e91 Rob Herring  2018-09-10  485  		return ret;
f3ba91228e8e91 Rob Herring  2018-09-10  486  	}
f3ba91228e8e91 Rob Herring  2018-09-10  487  
f3ba91228e8e91 Rob Herring  2018-09-10  488  	for (j = 0; j < NUM_JOB_SLOTS; j++) {
f3ba91228e8e91 Rob Herring  2018-09-10  489  		js->queue[j].fence_context = dma_fence_context_alloc(1);
f3ba91228e8e91 Rob Herring  2018-09-10  490  
f3ba91228e8e91 Rob Herring  2018-09-10  491  		ret = drm_sched_init(&js->queue[j].sched,
f3ba91228e8e91 Rob Herring  2018-09-10  492  				     &panfrost_sched_ops,
f3ba91228e8e91 Rob Herring  2018-09-10  493  				     1, 0, msecs_to_jiffies(500),
f3ba91228e8e91 Rob Herring  2018-09-10  494  				     "pan_js");
f3ba91228e8e91 Rob Herring  2018-09-10  495  		if (ret) {
f3ba91228e8e91 Rob Herring  2018-09-10  496  			dev_err(pfdev->dev, "Failed to create scheduler: %d.", ret);
f3ba91228e8e91 Rob Herring  2018-09-10  497  			goto err_sched;
f3ba91228e8e91 Rob Herring  2018-09-10  498  		}
f3ba91228e8e91 Rob Herring  2018-09-10  499  	}
f3ba91228e8e91 Rob Herring  2018-09-10  500  
f3ba91228e8e91 Rob Herring  2018-09-10  501  	panfrost_job_enable_interrupts(pfdev);
f3ba91228e8e91 Rob Herring  2018-09-10  502  
f3ba91228e8e91 Rob Herring  2018-09-10  503  	return 0;
f3ba91228e8e91 Rob Herring  2018-09-10  504  
f3ba91228e8e91 Rob Herring  2018-09-10  505  err_sched:
f3ba91228e8e91 Rob Herring  2018-09-10  506  	for (j--; j >= 0; j--)
f3ba91228e8e91 Rob Herring  2018-09-10  507  		drm_sched_fini(&js->queue[j].sched);
f3ba91228e8e91 Rob Herring  2018-09-10  508  
f3ba91228e8e91 Rob Herring  2018-09-10  509  	return ret;
f3ba91228e8e91 Rob Herring  2018-09-10  510  }
f3ba91228e8e91 Rob Herring  2018-09-10  511  
f3ba91228e8e91 Rob Herring  2018-09-10  512  void panfrost_job_fini(struct panfrost_device *pfdev)
f3ba91228e8e91 Rob Herring  2018-09-10  513  {
f3ba91228e8e91 Rob Herring  2018-09-10  514  	struct panfrost_job_slot *js = pfdev->js;
f3ba91228e8e91 Rob Herring  2018-09-10  515  	int j;
f3ba91228e8e91 Rob Herring  2018-09-10  516  
f3ba91228e8e91 Rob Herring  2018-09-10  517  	job_write(pfdev, JOB_INT_MASK, 0);
f3ba91228e8e91 Rob Herring  2018-09-10  518  
f3ba91228e8e91 Rob Herring  2018-09-10  519  	for (j = 0; j < NUM_JOB_SLOTS; j++)
f3ba91228e8e91 Rob Herring  2018-09-10  520  		drm_sched_fini(&js->queue[j].sched);
f3ba91228e8e91 Rob Herring  2018-09-10  521  
f3ba91228e8e91 Rob Herring  2018-09-10  522  }
f3ba91228e8e91 Rob Herring  2018-09-10  523  
f3ba91228e8e91 Rob Herring  2018-09-10  524  int panfrost_job_open(struct panfrost_file_priv *panfrost_priv)
f3ba91228e8e91 Rob Herring  2018-09-10  525  {
f3ba91228e8e91 Rob Herring  2018-09-10  526  	struct panfrost_device *pfdev = panfrost_priv->pfdev;
f3ba91228e8e91 Rob Herring  2018-09-10  527  	struct panfrost_job_slot *js = pfdev->js;
f3ba91228e8e91 Rob Herring  2018-09-10  528  	struct drm_sched_rq *rq;
f3ba91228e8e91 Rob Herring  2018-09-10  529  	int ret, i;
f3ba91228e8e91 Rob Herring  2018-09-10  530  
f3ba91228e8e91 Rob Herring  2018-09-10  531  	for (i = 0; i < NUM_JOB_SLOTS; i++) {
f3ba91228e8e91 Rob Herring  2018-09-10  532  		rq = &js->queue[i].sched.sched_rq[DRM_SCHED_PRIORITY_NORMAL];
f3ba91228e8e91 Rob Herring  2018-09-10  533  		ret = drm_sched_entity_init(&panfrost_priv->sched_entity[i], &rq, 1, NULL);
f3ba91228e8e91 Rob Herring  2018-09-10  534  		if (WARN_ON(ret))
f3ba91228e8e91 Rob Herring  2018-09-10  535  			return ret;
f3ba91228e8e91 Rob Herring  2018-09-10  536  	}
f3ba91228e8e91 Rob Herring  2018-09-10  537  	return 0;
f3ba91228e8e91 Rob Herring  2018-09-10  538  }
f3ba91228e8e91 Rob Herring  2018-09-10  539  
f3ba91228e8e91 Rob Herring  2018-09-10  540  void panfrost_job_close(struct panfrost_file_priv *panfrost_priv)
f3ba91228e8e91 Rob Herring  2018-09-10  541  {
f3ba91228e8e91 Rob Herring  2018-09-10  542  	int i;
f3ba91228e8e91 Rob Herring  2018-09-10  543  
f3ba91228e8e91 Rob Herring  2018-09-10  544  	for (i = 0; i < NUM_JOB_SLOTS; i++)
f3ba91228e8e91 Rob Herring  2018-09-10  545  		drm_sched_entity_destroy(&panfrost_priv->sched_entity[i]);
f3ba91228e8e91 Rob Herring  2018-09-10  546  }
f3ba91228e8e91 Rob Herring  2018-09-10  547  
f3ba91228e8e91 Rob Herring  2018-09-10  548  int panfrost_job_is_idle(struct panfrost_device *pfdev)
f3ba91228e8e91 Rob Herring  2018-09-10  549  {
f3ba91228e8e91 Rob Herring  2018-09-10  550  	struct panfrost_job_slot *js = pfdev->js;
f3ba91228e8e91 Rob Herring  2018-09-10  551  	int i;
f3ba91228e8e91 Rob Herring  2018-09-10  552  
f3ba91228e8e91 Rob Herring  2018-09-10  553  	for (i = 0; i < NUM_JOB_SLOTS; i++) {
f3ba91228e8e91 Rob Herring  2018-09-10  554  		/* If there are any jobs in the HW queue, we're not idle */
f3ba91228e8e91 Rob Herring  2018-09-10  555  		if (atomic_read(&js->queue[i].sched.hw_rq_count))
f3ba91228e8e91 Rob Herring  2018-09-10  556  			return false;
f3ba91228e8e91 Rob Herring  2018-09-10  557  
f3ba91228e8e91 Rob Herring  2018-09-10  558  		/* Check whether the hardware is idle */
f3ba91228e8e91 Rob Herring  2018-09-10  559  		if (pfdev->devfreq.slot[i].busy)
f3ba91228e8e91 Rob Herring  2018-09-10  560  			return false;
f3ba91228e8e91 Rob Herring  2018-09-10  561  	}
f3ba91228e8e91 Rob Herring  2018-09-10  562  
f3ba91228e8e91 Rob Herring  2018-09-10  563  	return true;
f3ba91228e8e91 Rob Herring  2018-09-10  564  }

:::::: The code at line 390 was first introduced by commit
:::::: f3ba91228e8e917e5bd6c4b72bfe846933d17370 drm/panfrost: Add initial panfrost driver

:::::: TO: Rob Herring <robh@kernel.org>
:::::: CC: Rob Herring <robh@kernel.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 69488 bytes --]

[-- Attachment #3: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-07-04 22:04 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-04 22:04 [radeon-alex:amd-staging-drm-next-navi14 56/56] drivers/gpu/drm/panfrost/panfrost_job.c:390:31: sparse: error: not enough arguments for function drm_sched_stop kbuild test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.