[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
lkp at intel.com
Thu Jul 4 22:04:03 UTC 2019
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 at 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 at kernel.org>
:::::: CC: Rob Herring <robh at kernel.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 69488 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20190705/a585e1a4/attachment-0001.gz>
More information about the dri-devel
mailing list