Stop using deprecated drm_handle_vblank(), use drm_crtc_handle_vblank() instead.
Signed-off-by: Dmitry Baryshkov dmitry.baryshkov@linaro.org --- drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c index 87675c162eea..62cc566756e8 100644 --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c @@ -72,8 +72,7 @@ static irqreturn_t mdp4_irq(int irq, void *arg) struct mdp_kms *mdp_kms = to_mdp_kms(kms); struct mdp4_kms *mdp4_kms = to_mdp4_kms(mdp_kms); struct drm_device *dev = mdp4_kms->dev; - struct msm_drm_private *priv = dev->dev_private; - unsigned int id; + struct drm_crtc *crtc; uint32_t status, enable;
enable = mdp4_read(mdp4_kms, REG_MDP4_INTR_ENABLE); @@ -84,9 +83,9 @@ static irqreturn_t mdp4_irq(int irq, void *arg)
mdp_dispatch_irqs(mdp_kms, status);
- for (id = 0; id < priv->num_crtcs; id++) - if (status & mdp4_crtc_vblank(priv->crtcs[id])) - drm_handle_vblank(dev, id); + drm_for_each_crtc(crtc, dev) + if (status & mdp4_crtc_vblank(crtc)) + drm_crtc_handle_vblank(crtc);
return IRQ_HANDLED; }
Stop using deprecated drm_handle_vblank(), use drm_crtc_handle_vblank() instead.
Signed-off-by: Dmitry Baryshkov dmitry.baryshkov@linaro.org --- drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c index d573ff29d5a4..18cc62f1e7ec 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c @@ -85,8 +85,7 @@ static irqreturn_t mdp5_irq(int irq, void *arg) struct mdp_kms *mdp_kms = to_mdp_kms(kms); struct mdp5_kms *mdp5_kms = to_mdp5_kms(mdp_kms); struct drm_device *dev = mdp5_kms->dev; - struct msm_drm_private *priv = dev->dev_private; - unsigned int id; + struct drm_crtc *crtc; uint32_t status, enable;
enable = mdp5_read(mdp5_kms, REG_MDP5_INTR_EN); @@ -97,9 +96,9 @@ static irqreturn_t mdp5_irq(int irq, void *arg)
mdp_dispatch_irqs(mdp_kms, status);
- for (id = 0; id < priv->num_crtcs; id++) - if (status & mdp5_crtc_vblank(priv->crtcs[id])) - drm_handle_vblank(dev, id); + drm_for_each_crtc(crtc, dev) + if (status & mdp5_crtc_vblank(crtc)) + drm_crtc_handle_vblank(crtc);
return IRQ_HANDLED; }
Handling the array of CRTC duplicate the struct msm_drm_private duplicates a list of CRTCs in the drm_device. Drop it and use the existing list for CRTC enumeration.
Signed-off-by: Dmitry Baryshkov dmitry.baryshkov@linaro.org --- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 2 +- drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c | 2 +- drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 2 +- drivers/gpu/drm/msm/msm_drv.c | 27 ++++++++++++------------ drivers/gpu/drm/msm/msm_drv.h | 3 +-- 5 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c index 494978da7785..f89dcb903869 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -808,7 +808,7 @@ static int _dpu_kms_drm_obj_init(struct dpu_kms *dpu_kms) ret = PTR_ERR(crtc); return ret; } - priv->crtcs[priv->num_crtcs++] = crtc; + priv->num_crtcs++; }
/* All CRTCs are compatible with all encoders */ diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c index b7aced272af9..375643a14198 100644 --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c @@ -335,7 +335,7 @@ static int modeset_init(struct mdp4_kms *mdp4_kms) goto fail; }
- priv->crtcs[priv->num_crtcs++] = crtc; + priv->num_crtcs++; }
/* diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c index 18cf0ff4da6c..35242e76de10 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c @@ -495,7 +495,7 @@ static int modeset_init(struct mdp5_kms *mdp5_kms) DRM_DEV_ERROR(dev->dev, "failed to construct crtc %d (%d)\n", i, ret); goto fail; } - priv->crtcs[priv->num_crtcs++] = crtc; + priv->num_crtcs++; }
/* diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index d2fbe54fec4d..576d346cc860 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -98,7 +98,7 @@ static void msm_irq_uninstall(struct drm_device *dev)
struct msm_vblank_work { struct work_struct work; - int crtc_id; + struct drm_crtc *crtc; bool enable; struct msm_drm_private *priv; }; @@ -111,15 +111,15 @@ static void vblank_ctrl_worker(struct work_struct *work) struct msm_kms *kms = priv->kms;
if (vbl_work->enable) - kms->funcs->enable_vblank(kms, priv->crtcs[vbl_work->crtc_id]); + kms->funcs->enable_vblank(kms, vbl_work->crtc); else - kms->funcs->disable_vblank(kms, priv->crtcs[vbl_work->crtc_id]); + kms->funcs->disable_vblank(kms, vbl_work->crtc);
kfree(vbl_work); }
static int vblank_ctrl_queue_work(struct msm_drm_private *priv, - int crtc_id, bool enable) + struct drm_crtc *crtc, bool enable) { struct msm_vblank_work *vbl_work;
@@ -129,7 +129,7 @@ static int vblank_ctrl_queue_work(struct msm_drm_private *priv,
INIT_WORK(&vbl_work->work, vblank_ctrl_worker);
- vbl_work->crtc_id = crtc_id; + vbl_work->crtc = crtc; vbl_work->enable = enable; vbl_work->priv = priv;
@@ -303,6 +303,7 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv) struct msm_drm_private *priv = dev_get_drvdata(dev); struct drm_device *ddev; struct msm_kms *kms; + struct drm_crtc *crtc; int ret, i;
if (drm_firmware_drivers_only()) @@ -376,12 +377,12 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv) ddev->mode_config.funcs = &mode_config_funcs; ddev->mode_config.helper_private = &mode_config_helper_funcs;
- for (i = 0; i < priv->num_crtcs; i++) { + drm_for_each_crtc(crtc, ddev) { /* initialize event thread */ - priv->event_thread[i].crtc_id = priv->crtcs[i]->base.id; + priv->event_thread[i].crtc = crtc; priv->event_thread[i].dev = ddev; priv->event_thread[i].worker = kthread_create_worker(0, - "crtc_event:%d", priv->event_thread[i].crtc_id); + "crtc_event:%d", priv->event_thread[i].crtc->base.id); if (IS_ERR(priv->event_thread[i].worker)) { ret = PTR_ERR(priv->event_thread[i].worker); DRM_DEV_ERROR(dev, "failed to create crtc_event kthread\n"); @@ -517,25 +518,23 @@ static void msm_postclose(struct drm_device *dev, struct drm_file *file) int msm_crtc_enable_vblank(struct drm_crtc *crtc) { struct drm_device *dev = crtc->dev; - unsigned int pipe = crtc->index; struct msm_drm_private *priv = dev->dev_private; struct msm_kms *kms = priv->kms; if (!kms) return -ENXIO; - drm_dbg_vbl(dev, "crtc=%u", pipe); - return vblank_ctrl_queue_work(priv, pipe, true); + drm_dbg_vbl(dev, "crtc=%u", crtc->base.id); + return vblank_ctrl_queue_work(priv, crtc, true); }
void msm_crtc_disable_vblank(struct drm_crtc *crtc) { struct drm_device *dev = crtc->dev; - unsigned int pipe = crtc->index; struct msm_drm_private *priv = dev->dev_private; struct msm_kms *kms = priv->kms; if (!kms) return; - drm_dbg_vbl(dev, "crtc=%u", pipe); - vblank_ctrl_queue_work(priv, pipe, false); + drm_dbg_vbl(dev, "crtc=%u", crtc->base.id); + vblank_ctrl_queue_work(priv, crtc, false); }
/* diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index fdbaad53eb84..2ba57c575e13 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -102,7 +102,7 @@ struct msm_display_topology { /* Commit/Event thread specific structure */ struct msm_drm_thread { struct drm_device *dev; - unsigned int crtc_id; + struct drm_crtc *crtc; struct kthread_worker *worker; };
@@ -178,7 +178,6 @@ struct msm_drm_private { struct workqueue_struct *wq;
unsigned int num_crtcs; - struct drm_crtc *crtcs[MAX_CRTCS];
struct msm_drm_thread event_thread[MAX_CRTCS];
Hi Dmitry,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on next-20220506] [also build test WARNING on v5.18-rc5] [cannot apply to drm/drm-next v5.18-rc5 v5.18-rc4 v5.18-rc3] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch]
url: https://github.com/intel-lab-lkp/linux/commits/Dmitry-Baryshkov/drm-msm-mdp4... base: 38a288f5941ef03752887ad86f2d85442358c99a config: hexagon-allyesconfig (https://download.01.org/0day-ci/archive/20220507/202205072052.67OjKtjD-lkp@i...) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project af4cf1c6b8ed0d8102fc5e69acdc2fcbbcdaa9a7) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/08ab9442139f4b4c9e33ce35986014... git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Dmitry-Baryshkov/drm-msm-mdp4-convert-to-drm_crtc_handle_vblank/20220507-090522 git checkout 08ab9442139f4b4c9e33ce35986014219fd1d5d0 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash drivers/gpu/drm/msm/
If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot lkp@intel.com
All warnings (new ones prefixed by >>):
drivers/gpu/drm/msm/msm_drv.c:428:22: warning: variable 'i' is uninitialized when used here [-Wuninitialized]
priv->event_thread[i].crtc = crtc; ^ drivers/gpu/drm/msm/msm_drv.c:353:12: note: initialize the variable 'i' to silence this warning int ret, i; ^ = 0 1 warning generated.
vim +/i +428 drivers/gpu/drm/msm/msm_drv.c
346 347 static int msm_drm_init(struct device *dev, const struct drm_driver *drv) 348 { 349 struct msm_drm_private *priv = dev_get_drvdata(dev); 350 struct drm_device *ddev; 351 struct msm_kms *kms; 352 struct drm_crtc *crtc; 353 int ret, i; 354 355 if (drm_firmware_drivers_only()) 356 return -ENODEV; 357 358 ddev = drm_dev_alloc(drv, dev); 359 if (IS_ERR(ddev)) { 360 DRM_DEV_ERROR(dev, "failed to allocate drm_device\n"); 361 return PTR_ERR(ddev); 362 } 363 ddev->dev_private = priv; 364 priv->dev = ddev; 365 366 priv->wq = alloc_ordered_workqueue("msm", 0); 367 priv->hangcheck_period = DRM_MSM_HANGCHECK_DEFAULT_PERIOD; 368 369 INIT_LIST_HEAD(&priv->objects); 370 mutex_init(&priv->obj_lock); 371 372 INIT_LIST_HEAD(&priv->inactive_willneed); 373 INIT_LIST_HEAD(&priv->inactive_dontneed); 374 INIT_LIST_HEAD(&priv->inactive_unpinned); 375 mutex_init(&priv->mm_lock); 376 377 /* Teach lockdep about lock ordering wrt. shrinker: */ 378 fs_reclaim_acquire(GFP_KERNEL); 379 might_lock(&priv->mm_lock); 380 fs_reclaim_release(GFP_KERNEL); 381 382 drm_mode_config_init(ddev); 383 384 ret = msm_init_vram(ddev); 385 if (ret) 386 return ret; 387 388 /* Bind all our sub-components: */ 389 ret = component_bind_all(dev, ddev); 390 if (ret) 391 return ret; 392 393 dma_set_max_seg_size(dev, UINT_MAX); 394 395 msm_gem_shrinker_init(ddev); 396 397 if (priv->kms_init) { 398 ret = priv->kms_init(ddev); 399 if (ret) { 400 DRM_DEV_ERROR(dev, "failed to load kms\n"); 401 priv->kms = NULL; 402 goto err_msm_uninit; 403 } 404 kms = priv->kms; 405 } else { 406 /* valid only for the dummy headless case, where of_node=NULL */ 407 WARN_ON(dev->of_node); 408 kms = NULL; 409 } 410 411 /* Enable normalization of plane zpos */ 412 ddev->mode_config.normalize_zpos = true; 413 414 if (kms) { 415 kms->dev = ddev; 416 ret = kms->funcs->hw_init(kms); 417 if (ret) { 418 DRM_DEV_ERROR(dev, "kms hw init failed: %d\n", ret); 419 goto err_msm_uninit; 420 } 421 } 422 423 ddev->mode_config.funcs = &mode_config_funcs; 424 ddev->mode_config.helper_private = &mode_config_helper_funcs; 425 426 drm_for_each_crtc(crtc, ddev) { 427 /* initialize event thread */
428 priv->event_thread[i].crtc = crtc;
429 priv->event_thread[i].dev = ddev; 430 priv->event_thread[i].worker = kthread_create_worker(0, 431 "crtc_event:%d", priv->event_thread[i].crtc->base.id); 432 if (IS_ERR(priv->event_thread[i].worker)) { 433 ret = PTR_ERR(priv->event_thread[i].worker); 434 DRM_DEV_ERROR(dev, "failed to create crtc_event kthread\n"); 435 ret = PTR_ERR(priv->event_thread[i].worker); 436 goto err_msm_uninit; 437 } 438 439 sched_set_fifo(priv->event_thread[i].worker->task); 440 } 441 442 ret = drm_vblank_init(ddev, priv->num_crtcs); 443 if (ret < 0) { 444 DRM_DEV_ERROR(dev, "failed to initialize vblank\n"); 445 goto err_msm_uninit; 446 } 447 448 if (kms) { 449 pm_runtime_get_sync(dev); 450 ret = msm_irq_install(ddev, kms->irq); 451 pm_runtime_put_sync(dev); 452 if (ret < 0) { 453 DRM_DEV_ERROR(dev, "failed to install IRQ handler\n"); 454 goto err_msm_uninit; 455 } 456 } 457 458 ret = drm_dev_register(ddev, 0); 459 if (ret) 460 goto err_msm_uninit; 461 462 if (kms) { 463 ret = msm_disp_snapshot_init(ddev); 464 if (ret) 465 DRM_DEV_ERROR(dev, "msm_disp_snapshot_init failed ret = %d\n", ret); 466 } 467 drm_mode_config_reset(ddev); 468
dri-devel@lists.freedesktop.org