Thank you for your contribution! Sashiko AI review found 1 potential issue(s) 
to consider:
- [Medium] drm/hisilicon/hibmc: WARN_ON in hibmc_unload() on hibmc_load() error
--

commit 289d0414bb2d6ac0dd51c3f3424d35a2428b1b8c
Author: Maxime Ripard <[email protected]>

drm/hisilicon/hibmc: Switch to drm_mode_config_create_initial_state

This commit replaces drm_mode_config_reset() with
drm_mode_config_create_initial_state() in hibmc_load() to initialize
the KMS state at probe time.

> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c 
> b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> index 602930964e930..236840cb5b3ad 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> @@ -411,8 +411,10 @@ static int hibmc_load(struct drm_device *dev)
>               goto err;
>       }
>  
> -     /* reset all the states of crtc/plane/encoder/connector */
> -     drm_mode_config_reset(dev);
> +     /* Create all the states of crtc/plane/encoder/connector */
> +     ret = drm_mode_config_create_initial_state(dev);
> +     if (ret)
> +             goto err;

[Severity: Medium]
If drm_mode_config_create_initial_state() fails while allocating the plane
or CRTC state in hibmc_load(), jumping to err calls hibmc_unload() while
priv->crtc.state is still NULL:

drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c:hibmc_load() {
        ...
err:
        hibmc_unload(dev);
        drm_err(dev, "failed to initialize drm driver: %d\n", ret);
        return ret;
}

drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c:hibmc_unload() {
        drm_atomic_helper_shutdown(dev);
}

Since hibmc_kms_init() has already registered priv->crtc on
dev->mode_config.crtc_list, won't the call chain

  hibmc_unload()
  -> drm_atomic_helper_shutdown()
  -> drm_atomic_helper_disable_all()
  -> drm_atomic_get_crtc_state()
  -> drm_atomic_helper_crtc_duplicate_state()

trigger WARN_ON(!crtc->state) in drm_atomic_helper_crtc_duplicate_state()?

(The earlier error jumps in hibmc_load() for hibmc_kms_init(),
drm_vblank_init(), and hibmc_msi_init() also jump to err and call
hibmc_unload() before drm_mode_config_create_initial_state() has populated
crtc->state.)

-- 
Sashiko AI review ยท 
https://sashiko.dev/#/patchset/[email protected]?part=14

Reply via email to