Linux-mediatek Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Zimmermann <tzimmermann@suse.de>
To: Lyude Paul <lyude@redhat.com>,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	freedreno@lists.freedesktop.org,
	linux-arm-kernel@lists.infradead.org,
	nouveau@lists.freedesktop.org, linux-arm-msm@vger.kernel.org,
	linux-hyperv@vger.kernel.org, linux-sunxi@lists.linux.dev,
	asahi@lists.linux.dev, linux-stm32@st-md-mailman.stormreply.com,
	linux-samsung-soc@vger.kernel.org,
	linux-amlogic@lists.infradead.org,
	linux-mediatek@lists.infradead.org,
	intel-gfx@lists.freedesktop.org, linux-aspeed@lists.ozlabs.org,
	linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org,
	linux-renesas-soc@vger.kernel.org, linux-mips@vger.kernel.org,
	amd-gfx@lists.freedesktop.org, spice-devel@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org, imx@lists.linux.dev
Subject: Re: [PATCH 3/5] drm/vblank: Remove num_crtcs argument from drm_vblank_init()
Date: Wed, 26 Aug 2026 13:57:47 +0200	[thread overview]
Message-ID: <23ffe7db-5657-444a-9963-a5715d40658d@suse.de> (raw)
In-Reply-To: <20260814203542.1405135-4-lyude@redhat.com>

Hi

Am 14.08.26 um 22:35 schrieb Lyude Paul:
> As it turns out: the entire reason we ever asked for the number of CRTCs as
> a parameter for drm_vblank_init() is because that function was previously
> in charge of setting up the legacy drm_device.num_crtcs variable, which
> itself was also used to keep track of whether or not drm_vblank_init() was
> called. And, that number was kept in addition to a properly maintained
> drm_device->mode_config.num_crtc.
>
> Now that we've removed that legacy variable entirely, let's stop requiring
> the num_crtc argument for drm_vblank_init() entirely. The main motivation
> for this is the fact that at the moment, we've had to workaround this
> oddity in the Rust kernel bindings for a few reasons:
>
> * We can't know the number of CRTCs until they've all been created, which
>    meant that we had to keep track of that.
> * Additionally, we also had to keep track of which CRTCs did and did not
>    have vblank support. This is especially silly, because I am not aware of
>    any physical hardware that only supports vblank interrupts on certain
>    heads - and I can't think of any reasonable explanation for any hardware
>    manufacturer making a design choice like that.
> * This also implies that drivers could, with the current C API, register
>    that they have a different number of CRTCs then they have actually
>    created. This appears to be an edge case that could easily lead to UB
>    since it's not obvious and as such has likely never really been tested.
>    And we can't have that in Rust!
>
> While the last point could technically still be an issue if a driver
> doesn't fill out the vblank handling callbacks for all CRTCs, this is a
> good start at cleaning this strange behavior up.
>
> So, just get rid of this parameter entirely and start using the DRM's
> internal count of CRTCs. We apply this change across the tree using this
> coccinelle patch:

I had been working on better support for software-timer vblank events. 
And for user space, we wanted to distinguish between real HW support and 
the software-based implementation.

Therefore, could we keep the parameter, but re-designate it to be a 
flags argument? All drivers with software vblank timers would flag them 
as such.

Best regards
Thomas


>
>    virtual patch
>
>    @depends on patch@
>    expression dev;
>    @@
>
>    - drm_vblank_init(dev, ...)
>    + drm_vblank_init(dev)
>
> And then fixup some of the funky whitespace errors that introduces by hand.
>
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> Assisted-by: Coccinelle
> ---
>   drivers/gpu/drm/adp/adp_drv.c                       | 2 +-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c            | 2 +-
>   drivers/gpu/drm/amd/amdgpu/dce_v10_0.c              | 2 +-
>   drivers/gpu/drm/amd/amdgpu/dce_v6_0.c               | 2 +-
>   drivers/gpu/drm/amd/amdgpu/dce_v8_0.c               | 2 +-
>   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c   | 2 +-
>   drivers/gpu/drm/arm/display/komeda/komeda_kms.c     | 2 +-
>   drivers/gpu/drm/arm/hdlcd_drv.c                     | 2 +-
>   drivers/gpu/drm/arm/malidp_drv.c                    | 2 +-
>   drivers/gpu/drm/armada/armada_drv.c                 | 2 +-
>   drivers/gpu/drm/aspeed/aspeed_gfx_drv.c             | 2 +-
>   drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c        | 2 +-
>   drivers/gpu/drm/drm_vblank.c                        | 6 +++---
>   drivers/gpu/drm/exynos/exynos_drm_drv.c             | 2 +-
>   drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c           | 2 +-
>   drivers/gpu/drm/gma500/psb_drv.c                    | 2 +-
>   drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c     | 2 +-
>   drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c     | 2 +-
>   drivers/gpu/drm/hyperv/hyperv_drm_modeset.c         | 2 +-
>   drivers/gpu/drm/i915/display/intel_display_driver.c | 3 +--
>   drivers/gpu/drm/imx/dc/dc-kms.c                     | 2 +-
>   drivers/gpu/drm/imx/dcss/dcss-kms.c                 | 2 +-
>   drivers/gpu/drm/imx/ipuv3/imx-drm-core.c            | 2 +-
>   drivers/gpu/drm/imx/lcdc/imx-lcdc.c                 | 2 +-
>   drivers/gpu/drm/ingenic/ingenic-drm-drv.c           | 2 +-
>   drivers/gpu/drm/kmb/kmb_drv.c                       | 2 +-
>   drivers/gpu/drm/logicvc/logicvc_mode.c              | 2 +-
>   drivers/gpu/drm/loongson/lsdc_drv.c                 | 2 +-
>   drivers/gpu/drm/mcde/mcde_drv.c                     | 2 +-
>   drivers/gpu/drm/mediatek/mtk_drm_drv.c              | 2 +-
>   drivers/gpu/drm/meson/meson_drv.c                   | 2 +-
>   drivers/gpu/drm/msm/msm_kms.c                       | 2 +-
>   drivers/gpu/drm/mxsfb/lcdif_drv.c                   | 2 +-
>   drivers/gpu/drm/mxsfb/mxsfb_drv.c                   | 2 +-
>   drivers/gpu/drm/nouveau/nouveau_display.c           | 2 +-
>   drivers/gpu/drm/omapdrm/omap_drv.c                  | 2 +-
>   drivers/gpu/drm/pl111/pl111_drv.c                   | 2 +-
>   drivers/gpu/drm/qxl/qxl_display.c                   | 2 +-
>   drivers/gpu/drm/radeon/radeon_irq_kms.c             | 2 +-
>   drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c       | 2 +-
>   drivers/gpu/drm/renesas/rz-du/rzg2l_du_kms.c        | 2 +-
>   drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c    | 2 +-
>   drivers/gpu/drm/rockchip/rockchip_drm_drv.c         | 2 +-
>   drivers/gpu/drm/sprd/sprd_drm.c                     | 2 +-
>   drivers/gpu/drm/sti/sti_compositor.c                | 2 +-
>   drivers/gpu/drm/stm/ltdc.c                          | 2 +-
>   drivers/gpu/drm/sun4i/sun4i_drv.c                   | 2 +-
>   drivers/gpu/drm/tegra/drm.c                         | 2 +-
>   drivers/gpu/drm/tidss/tidss_kms.c                   | 2 +-
>   drivers/gpu/drm/tilcdc/tilcdc_drv.c                 | 2 +-
>   drivers/gpu/drm/tiny/bochs.c                        | 2 +-
>   drivers/gpu/drm/tiny/cirrus-qemu.c                  | 2 +-
>   drivers/gpu/drm/tve200/tve200_drv.c                 | 2 +-
>   drivers/gpu/drm/vc4/vc4_kms.c                       | 2 +-
>   drivers/gpu/drm/verisilicon/vs_drm.c                | 2 +-
>   drivers/gpu/drm/virtio/virtgpu_display.c            | 2 +-
>   drivers/gpu/drm/vkms/vkms_drv.c                     | 3 +--
>   drivers/gpu/drm/vmwgfx/vmwgfx_vkms.c                | 2 +-
>   drivers/gpu/drm/xlnx/zynqmp_kms.c                   | 2 +-
>   include/drm/drm_vblank.h                            | 2 +-
>   60 files changed, 62 insertions(+), 64 deletions(-)
>
> diff --git a/drivers/gpu/drm/adp/adp_drv.c b/drivers/gpu/drm/adp/adp_drv.c
> index ce9dd6222634d..cc1ed68806cf1 100644
> --- a/drivers/gpu/drm/adp/adp_drv.c
> +++ b/drivers/gpu/drm/adp/adp_drv.c
> @@ -444,7 +444,7 @@ static int adp_setup_mode_config(struct adp_drv_private *adp)
>   	if (IS_ERR(adp->connector))
>   		return PTR_ERR(adp->connector);
>   
> -	ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
> +	ret = drm_vblank_init(drm);
>   	if (ret < 0) {
>   		drm_err(drm, "failed to initialize vblank");
>   		return ret;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
> index 170adaf7e76ab..79aaa9d8fcdaf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
> @@ -413,7 +413,7 @@ static int amdgpu_vkms_sw_init(struct amdgpu_ip_block *ip_block)
>   			return r;
>   	}
>   
> -	r = drm_vblank_init(adev_to_drm(adev), adev->mode_info.num_crtc);
> +	r = drm_vblank_init(adev_to_drm(adev));
>   	if (r)
>   		return r;
>   
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> index f2977fe6d8242..649d331973280 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> @@ -2809,7 +2809,7 @@ static int dce_v10_0_sw_init(struct amdgpu_ip_block *ip_block)
>   	/* XXX: can this be enabled for DC? */
>   	adev_to_drm(adev)->vblank_disable_immediate = true;
>   
> -	r = drm_vblank_init(adev_to_drm(adev), adev->mode_info.num_crtc);
> +	r = drm_vblank_init(adev_to_drm(adev));
>   	if (r)
>   		return r;
>   
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
> index c68de0fe1d7d3..d82272ca3b33d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
> @@ -2759,7 +2759,7 @@ static int dce_v6_0_sw_init(struct amdgpu_ip_block *ip_block)
>   	/* XXX: can this be enabled for DC? */
>   	adev_to_drm(adev)->vblank_disable_immediate = true;
>   
> -	r = drm_vblank_init(adev_to_drm(adev), adev->mode_info.num_crtc);
> +	r = drm_vblank_init(adev_to_drm(adev));
>   	if (r)
>   		return r;
>   
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> index c3906270f25ef..76d6db1959643 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> @@ -2728,7 +2728,7 @@ static int dce_v8_0_sw_init(struct amdgpu_ip_block *ip_block)
>   	/* XXX: can this be enabled for DC? */
>   	adev_to_drm(adev)->vblank_disable_immediate = true;
>   
> -	r = drm_vblank_init(adev_to_drm(adev), adev->mode_info.num_crtc);
> +	r = drm_vblank_init(adev_to_drm(adev));
>   	if (r)
>   		return r;
>   
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 38cffe1279896..07b83584c7a9d 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -893,7 +893,7 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
>   	adev_to_drm(adev)->mode_config.cursor_width = adev->dm.dc->caps.max_cursor_size;
>   	adev_to_drm(adev)->mode_config.cursor_height = adev->dm.dc->caps.max_cursor_size;
>   
> -	if (drm_vblank_init(adev_to_drm(adev), adev->dm.display_indexes_num)) {
> +	if (drm_vblank_init(adev_to_drm(adev))) {
>   		drm_err(adev_to_drm(adev),
>   		"failed to initialize vblank for display support.\n");
>   		goto error;
> diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> index faa8b041373a7..02e7037c9b46e 100644
> --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> @@ -297,7 +297,7 @@ struct komeda_kms_dev *komeda_kms_attach(struct komeda_dev *mdev)
>   	if (err)
>   		goto cleanup_mode_config;
>   
> -	err = drm_vblank_init(drm, kms->n_crtcs);
> +	err = drm_vblank_init(drm);
>   	if (err)
>   		goto cleanup_mode_config;
>   
> diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
> index 81d45f2dd6a70..f353406d0f7fd 100644
> --- a/drivers/gpu/drm/arm/hdlcd_drv.c
> +++ b/drivers/gpu/drm/arm/hdlcd_drv.c
> @@ -275,7 +275,7 @@ static int hdlcd_drm_bind(struct device *dev)
>   
>   	pm_runtime_enable(dev);
>   
> -	ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
> +	ret = drm_vblank_init(drm);
>   	if (ret < 0) {
>   		DRM_ERROR("failed to initialise vblank\n");
>   		goto err_vblank;
> diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
> index 23fa942ae4bbe..96df6790444fe 100644
> --- a/drivers/gpu/drm/arm/malidp_drv.c
> +++ b/drivers/gpu/drm/arm/malidp_drv.c
> @@ -849,7 +849,7 @@ static int malidp_bind(struct device *dev)
>   	if (ret < 0)
>   		goto irq_init_fail;
>   
> -	ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
> +	ret = drm_vblank_init(drm);
>   	if (ret < 0) {
>   		DRM_ERROR("failed to initialise vblank\n");
>   		goto vblank_fail;
> diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c
> index cae25ad66c749..3638b13d0cee9 100644
> --- a/drivers/gpu/drm/armada/armada_drv.c
> +++ b/drivers/gpu/drm/armada/armada_drv.c
> @@ -122,7 +122,7 @@ static int armada_drm_bind(struct device *dev)
>   	if (ret)
>   		goto err_kms;
>   
> -	ret = drm_vblank_init(&priv->drm, priv->drm.mode_config.num_crtc);
> +	ret = drm_vblank_init(&priv->drm);
>   	if (ret)
>   		goto err_comp;
>   
> diff --git a/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c b/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c
> index d4577663a1f0e..ba78695d1015c 100644
> --- a/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c
> +++ b/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c
> @@ -205,7 +205,7 @@ static int aspeed_gfx_load(struct drm_device *drm)
>   	if (ret < 0)
>   		return ret;
>   
> -	ret = drm_vblank_init(drm, 1);
> +	ret = drm_vblank_init(drm);
>   	if (ret < 0) {
>   		dev_err(drm->dev, "Failed to initialise vblank\n");
>   		return ret;
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> index 2f41bce574dc5..1a5f273527bb4 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> @@ -867,7 +867,7 @@ static int atmel_hlcdc_dc_load(struct drm_device *dev)
>   
>   	pm_runtime_enable(dev->dev);
>   
> -	ret = drm_vblank_init(dev, 1);
> +	ret = drm_vblank_init(dev);
>   	if (ret < 0) {
>   		drm_err(dev, "failed to initialize vblank\n");
>   		goto err_periph_clk_disable;
> diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
> index c6f61a39b5d16..17283e8920378 100644
> --- a/drivers/gpu/drm/drm_vblank.c
> +++ b/drivers/gpu/drm/drm_vblank.c
> @@ -536,18 +536,18 @@ static void drm_vblank_init_release(struct drm_device *dev, void *ptr)
>   /**
>    * drm_vblank_init - initialize vblank support
>    * @dev: DRM device
> - * @num_crtcs: number of CRTCs supported by @dev
>    *
> - * This function initializes vblank support for @num_crtcs display pipelines.
> + * This function initializes vblank support for display pipelines.
>    * Cleanup is handled automatically through a cleanup function added with
>    * drmm_add_action_or_reset().
>    *
>    * Returns:
>    * Zero on success or a negative error code on failure.
>    */
> -int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs)
> +int drm_vblank_init(struct drm_device *dev)
>   {
>   	int ret;
> +	unsigned int num_crtcs = dev->mode_config.num_crtc;
>   	unsigned int i;
>   
>   	spin_lock_init(&dev->vbl_lock);
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index 9ee30086879f9..42c6053cdc9ec 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> @@ -273,7 +273,7 @@ static int exynos_drm_bind(struct device *dev)
>   	if (ret)
>   		goto err_mode_config_cleanup;
>   
> -	ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
> +	ret = drm_vblank_init(drm);
>   	if (ret)
>   		goto err_unbind_all;
>   
> diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> index 3bbfc1b56a655..39768565b437e 100644
> --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> @@ -122,7 +122,7 @@ static int fsl_dcu_load(struct drm_device *dev, unsigned long flags)
>   			return dev_err_probe(dev->dev, ret, "failed to enable pixclk\n");
>   	}
>   
> -	ret = drm_vblank_init(dev, dev->mode_config.num_crtc);
> +	ret = drm_vblank_init(dev);
>   	if (ret < 0) {
>   		dev_err(dev->dev, "failed to initialize vblank\n");
>   		goto done_vblank;
> diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
> index d17cb5b4a4bf2..bef32d29046df 100644
> --- a/drivers/gpu/drm/gma500/psb_drv.c
> +++ b/drivers/gpu/drm/gma500/psb_drv.c
> @@ -364,7 +364,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
>   	acpi_video_register();
>   
>   	/* Setup vertical blanking handling */
> -	ret = drm_vblank_init(dev, dev_priv->num_pipe);
> +	ret = drm_vblank_init(dev);
>   	if (ret)
>   		goto out_err;
>   
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> index 4d85c89f3f882..8f622732830e6 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> @@ -398,7 +398,7 @@ static int hibmc_load(struct drm_device *dev)
>   	if (ret)
>   		goto err;
>   
> -	ret = drm_vblank_init(dev, dev->mode_config.num_crtc);
> +	ret = drm_vblank_init(dev);
>   	if (ret) {
>   		drm_err(dev, "failed to initialize vblank: %d\n", ret);
>   		goto err;
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> index 8a11c2df5b886..617d8884ef649 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> @@ -181,7 +181,7 @@ static int kirin_drm_kms_init(struct drm_device *dev,
>   	}
>   
>   	/* vblank init */
> -	ret = drm_vblank_init(dev, dev->mode_config.num_crtc);
> +	ret = drm_vblank_init(dev);
>   	if (ret) {
>   		DRM_ERROR("failed to initialize vblank.\n");
>   		goto err_unbind_all;
> diff --git a/drivers/gpu/drm/hyperv/hyperv_drm_modeset.c b/drivers/gpu/drm/hyperv/hyperv_drm_modeset.c
> index 1855749c1e41f..99833f5ce3610 100644
> --- a/drivers/gpu/drm/hyperv/hyperv_drm_modeset.c
> +++ b/drivers/gpu/drm/hyperv/hyperv_drm_modeset.c
> @@ -330,7 +330,7 @@ int hv_drm_mode_config_init(struct hv_drm_device *hv)
>   		return ret;
>   	}
>   
> -	ret = drm_vblank_init(dev, 1);
> +	ret = drm_vblank_init(dev);
>   	if (ret)
>   		return ret;
>   
> diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
> index bb5301b90231a..501a4bc9dfd50 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_driver.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
> @@ -217,8 +217,7 @@ int intel_display_driver_probe_noirq(struct intel_display *display)
>   	intel_bw_init_hw(display);
>   
>   	if (HAS_DISPLAY(display)) {
> -		ret = drm_vblank_init(display->drm,
> -				      INTEL_NUM_PIPES(display));
> +		ret = drm_vblank_init(display->drm);
>   		if (ret)
>   			goto cleanup_opregion;
>   	}
> diff --git a/drivers/gpu/drm/imx/dc/dc-kms.c b/drivers/gpu/drm/imx/dc/dc-kms.c
> index 0f8cfaf4c4d15..fbff307c87240 100644
> --- a/drivers/gpu/drm/imx/dc/dc-kms.c
> +++ b/drivers/gpu/drm/imx/dc/dc-kms.c
> @@ -118,7 +118,7 @@ int dc_kms_init(struct dc_drm_device *dc_drm)
>   			return ret;
>   	}
>   
> -	ret = drm_vblank_init(drm, DC_DISPLAYS);
> +	ret = drm_vblank_init(drm);
>   	if (ret) {
>   		dev_err(drm->dev, "failed to init vblank support: %d\n", ret);
>   		return ret;
> diff --git a/drivers/gpu/drm/imx/dcss/dcss-kms.c b/drivers/gpu/drm/imx/dcss/dcss-kms.c
> index 7c5a6e2bc89ac..d3b9d69254273 100644
> --- a/drivers/gpu/drm/imx/dcss/dcss-kms.c
> +++ b/drivers/gpu/drm/imx/dcss/dcss-kms.c
> @@ -129,7 +129,7 @@ struct dcss_kms_dev *dcss_kms_attach(struct dcss_dev *dcss)
>   
>   	dcss_kms_mode_config_init(kms);
>   
> -	ret = drm_vblank_init(drm, 1);
> +	ret = drm_vblank_init(drm);
>   	if (ret)
>   		goto cleanup_mode_config;
>   
> diff --git a/drivers/gpu/drm/imx/ipuv3/imx-drm-core.c b/drivers/gpu/drm/imx/ipuv3/imx-drm-core.c
> index 51a0ec0432484..53ea896d53353 100644
> --- a/drivers/gpu/drm/imx/ipuv3/imx-drm-core.c
> +++ b/drivers/gpu/drm/imx/ipuv3/imx-drm-core.c
> @@ -233,7 +233,7 @@ static int imx_drm_bind(struct device *dev)
>   	if (ret)
>   		goto err_kms;
>   
> -	ret = drm_vblank_init(drm, MAX_CRTC);
> +	ret = drm_vblank_init(drm);
>   	if (ret)
>   		goto err_kms;
>   
> diff --git a/drivers/gpu/drm/imx/lcdc/imx-lcdc.c b/drivers/gpu/drm/imx/lcdc/imx-lcdc.c
> index c67fe80b8115e..cc2a2c386730a 100644
> --- a/drivers/gpu/drm/imx/lcdc/imx-lcdc.c
> +++ b/drivers/gpu/drm/imx/lcdc/imx-lcdc.c
> @@ -435,7 +435,7 @@ static int imx_lcdc_probe(struct platform_device *pdev)
>   	if (ret < 0)
>   		return dev_err_probe(drm->dev, ret, "Cannot setup simple display pipe\n");
>   
> -	ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
> +	ret = drm_vblank_init(drm);
>   	if (ret < 0)
>   		return dev_err_probe(drm->dev, ret, "Failed to initialize vblank\n");
>   
> diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
> index 738a80b2550ff..4e17f5707e708 100644
> --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
> +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
> @@ -1348,7 +1348,7 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
>   		goto err_drvdata;
>   	}
>   
> -	ret = drm_vblank_init(drm, 1);
> +	ret = drm_vblank_init(drm);
>   	if (ret) {
>   		dev_err(dev, "Failed calling drm_vblank_init()\n");
>   		goto err_drvdata;
> diff --git a/drivers/gpu/drm/kmb/kmb_drv.c b/drivers/gpu/drm/kmb/kmb_drv.c
> index 7c2eb1152fc2f..6026702fa31f9 100644
> --- a/drivers/gpu/drm/kmb/kmb_drv.c
> +++ b/drivers/gpu/drm/kmb/kmb_drv.c
> @@ -191,7 +191,7 @@ static int kmb_setup_mode_config(struct drm_device *drm)
>   	ret = kmb_dsi_encoder_init(drm, kmb->kmb_dsi);
>   	/* Set the CRTC's port so that the encoder component can find it */
>   	kmb->crtc.port = of_graph_get_port_by_id(drm->dev->of_node, 0);
> -	ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
> +	ret = drm_vblank_init(drm);
>   	if (ret < 0) {
>   		drm_err(drm, "failed to initialize vblank\n");
>   		pm_runtime_disable(drm->dev);
> diff --git a/drivers/gpu/drm/logicvc/logicvc_mode.c b/drivers/gpu/drm/logicvc/logicvc_mode.c
> index 3cf04b70bd271..9b67f12f32757 100644
> --- a/drivers/gpu/drm/logicvc/logicvc_mode.c
> +++ b/drivers/gpu/drm/logicvc/logicvc_mode.c
> @@ -36,7 +36,7 @@ int logicvc_mode_init(struct logicvc_drm *logicvc)
>   	uint32_t preferred_depth;
>   	int ret;
>   
> -	ret = drm_vblank_init(drm_dev, mode_config->num_crtc);
> +	ret = drm_vblank_init(drm_dev);
>   	if (ret) {
>   		drm_err(drm_dev, "Failed to initialize vblank\n");
>   		return ret;
> diff --git a/drivers/gpu/drm/loongson/lsdc_drv.c b/drivers/gpu/drm/loongson/lsdc_drv.c
> index 3fd828d23271c..19a7e98e6cd04 100644
> --- a/drivers/gpu/drm/loongson/lsdc_drv.c
> +++ b/drivers/gpu/drm/loongson/lsdc_drv.c
> @@ -296,7 +296,7 @@ static int lsdc_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>   	drmm_kms_helper_poll_init(ddev);
>   
>   	if (loongson_vblank) {
> -		ret = drm_vblank_init(ddev, descp->num_of_crtc);
> +		ret = drm_vblank_init(ddev);
>   		if (ret)
>   			return ret;
>   
> diff --git a/drivers/gpu/drm/mcde/mcde_drv.c b/drivers/gpu/drm/mcde/mcde_drv.c
> index 53275b575f0cb..f94750d93fd55 100644
> --- a/drivers/gpu/drm/mcde/mcde_drv.c
> +++ b/drivers/gpu/drm/mcde/mcde_drv.c
> @@ -174,7 +174,7 @@ static int mcde_modeset_init(struct drm_device *drm)
>   	mode_config->min_height = 1;
>   	mode_config->max_height = 1080;
>   
> -	ret = drm_vblank_init(drm, 1);
> +	ret = drm_vblank_init(drm);
>   	if (ret) {
>   		dev_err(drm->dev, "failed to init vblank\n");
>   		return ret;
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index c86a3f54f35bc..40b3877350fd9 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -574,7 +574,7 @@ static int mtk_drm_kms_init(struct drm_device *drm)
>   	 */
>   	dma_set_max_seg_size(dma_dev, UINT_MAX);
>   
> -	ret = drm_vblank_init(drm, MAX_CRTC);
> +	ret = drm_vblank_init(drm);
>   	if (ret < 0)
>   		goto err_component_unbind;
>   
> diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
> index 49ff9f1f16d32..d87a91135ecb3 100644
> --- a/drivers/gpu/drm/meson/meson_drv.c
> +++ b/drivers/gpu/drm/meson/meson_drv.c
> @@ -262,7 +262,7 @@ static int meson_drv_bind_master(struct device *dev, bool has_components)
>   
>   	priv->vsync_irq = platform_get_irq(pdev, 0);
>   
> -	ret = drm_vblank_init(drm, 1);
> +	ret = drm_vblank_init(drm);
>   	if (ret)
>   		goto free_canvas_vd1_2;
>   
> diff --git a/drivers/gpu/drm/msm/msm_kms.c b/drivers/gpu/drm/msm/msm_kms.c
> index e5d0ea6294484..23f0f2a25ea68 100644
> --- a/drivers/gpu/drm/msm/msm_kms.c
> +++ b/drivers/gpu/drm/msm/msm_kms.c
> @@ -317,7 +317,7 @@ int msm_drm_kms_init(struct device *dev, const struct drm_driver *drv)
>   		sched_set_fifo(ev_thread->worker->task);
>   	}
>   
> -	ret = drm_vblank_init(ddev, ddev->mode_config.num_crtc);
> +	ret = drm_vblank_init(ddev);
>   	if (ret < 0) {
>   		DRM_DEV_ERROR(dev, "failed to initialize vblank\n");
>   		goto err_msm_uninit;
> diff --git a/drivers/gpu/drm/mxsfb/lcdif_drv.c b/drivers/gpu/drm/mxsfb/lcdif_drv.c
> index e2173c4d6fc28..7fa1591a74bdd 100644
> --- a/drivers/gpu/drm/mxsfb/lcdif_drv.c
> +++ b/drivers/gpu/drm/mxsfb/lcdif_drv.c
> @@ -175,7 +175,7 @@ static int lcdif_load(struct drm_device *drm)
>   		return ret;
>   	}
>   
> -	ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
> +	ret = drm_vblank_init(drm);
>   	if (ret < 0) {
>   		dev_err(drm->dev, "Failed to initialise vblank\n");
>   		return ret;
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> index 8b4a500347fbd..87d38a84ed169 100644
> --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> @@ -257,7 +257,7 @@ static int mxsfb_load(struct drm_device *drm,
>   		goto err_vblank;
>   	}
>   
> -	ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
> +	ret = drm_vblank_init(drm);
>   	if (ret < 0) {
>   		dev_err(drm->dev, "Failed to initialise vblank\n");
>   		goto err_vblank;
> diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
> index d71dcfc6ee66b..9305876bdad33 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_display.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_display.c
> @@ -713,7 +713,7 @@ nouveau_display_create(struct drm_device *dev)
>   	drm_mode_config_reset(dev);
>   
>   	if (dev->mode_config.num_crtc) {
> -		ret = drm_vblank_init(dev, dev->mode_config.num_crtc);
> +		ret = drm_vblank_init(dev);
>   		if (ret)
>   			goto vblank_err;
>   
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
> index 92d6a1f9c0a1a..aad57533780cd 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> @@ -731,7 +731,7 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
>   	}
>   
>   	/* Initialize vblank handling, start with all CRTCs disabled. */
> -	ret = drm_vblank_init(ddev, priv->num_pipes);
> +	ret = drm_vblank_init(ddev);
>   	if (ret) {
>   		dev_err(priv->dev, "could not init vblank\n");
>   		goto err_cleanup_modeset;
> diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c
> index 8ec659b3c08eb..e20a63ad1a0e1 100644
> --- a/drivers/gpu/drm/pl111/pl111_drv.c
> +++ b/drivers/gpu/drm/pl111/pl111_drv.c
> @@ -175,7 +175,7 @@ static int pl111_modeset_init(struct drm_device *dev)
>   		return ret;
>   
>   	if (!priv->variant->broken_vblank) {
> -		ret = drm_vblank_init(dev, 1);
> +		ret = drm_vblank_init(dev);
>   		if (ret != 0) {
>   			drm_err(dev, "Failed to init vblank\n");
>   			goto out_bridge;
> diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
> index 7f4178800afd7..0ed93be0439f1 100644
> --- a/drivers/gpu/drm/qxl/qxl_display.c
> +++ b/drivers/gpu/drm/qxl/qxl_display.c
> @@ -1304,7 +1304,7 @@ int qxl_modeset_init(struct qxl_device *qdev)
>   
>   	qxl_display_read_client_monitors_config(qdev);
>   
> -	ret = drm_vblank_init(&qdev->ddev, qxl_num_crtc);
> +	ret = drm_vblank_init(&qdev->ddev);
>   	if (ret)
>   		return ret;
>   
> diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
> index 839d619e5602b..e6880d3f665ee 100644
> --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
> +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
> @@ -314,7 +314,7 @@ int radeon_irq_kms_init(struct radeon_device *rdev)
>   	/* Disable vblank irqs aggressively for power-saving */
>   	rdev_to_drm(rdev)->vblank_disable_immediate = true;
>   
> -	r = drm_vblank_init(rdev_to_drm(rdev), rdev->num_crtc);
> +	r = drm_vblank_init(rdev_to_drm(rdev));
>   	if (r) {
>   		return r;
>   	}
> diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c
> index 9228a7ad0dfa4..c9e29da53d056 100644
> --- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c
> +++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c
> @@ -888,7 +888,7 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu)
>   	 * Initialize vertical blanking interrupts handling. Start with vblank
>   	 * disabled for all CRTCs.
>   	 */
> -	ret = drm_vblank_init(dev, rcdu->num_crtcs);
> +	ret = drm_vblank_init(dev);
>   	if (ret < 0)
>   		return ret;
>   
> diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_kms.c b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_kms.c
> index 87f171145a230..497f3891c586a 100644
> --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_kms.c
> +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_kms.c
> @@ -430,7 +430,7 @@ int rzg2l_du_modeset_init(struct rzg2l_du_device *rcdu)
>   	 * Initialize vertical blanking interrupts handling. Start with vblank
>   	 * disabled for all CRTCs.
>   	 */
> -	ret = drm_vblank_init(dev, rcdu->num_crtcs);
> +	ret = drm_vblank_init(dev);
>   	if (ret < 0)
>   		return ret;
>   
> diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c
> index 2f31822b22458..713a1abb364b9 100644
> --- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c
> +++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c
> @@ -228,7 +228,7 @@ static int shmob_drm_probe(struct platform_device *pdev)
>   	if (ret)
>   		return ret;
>   
> -	ret = drm_vblank_init(ddev, 1);
> +	ret = drm_vblank_init(ddev);
>   	if (ret < 0) {
>   		dev_err(&pdev->dev, "failed to initialize vblank\n");
>   		return ret;
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> index 3099408e9d050..6e14c3832abff 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> @@ -186,7 +186,7 @@ static int rockchip_drm_bind(struct device *dev)
>   	if (ret)
>   		goto err_unbind_all;
>   
> -	ret = drm_vblank_init(drm_dev, drm_dev->mode_config.num_crtc);
> +	ret = drm_vblank_init(drm_dev);
>   	if (ret)
>   		goto err_iommu_cleanup;
>   
> diff --git a/drivers/gpu/drm/sprd/sprd_drm.c b/drivers/gpu/drm/sprd/sprd_drm.c
> index c2fd5380a834f..a49247a6cc25d 100644
> --- a/drivers/gpu/drm/sprd/sprd_drm.c
> +++ b/drivers/gpu/drm/sprd/sprd_drm.c
> @@ -89,7 +89,7 @@ static int sprd_drm_bind(struct device *dev)
>   	}
>   
>   	/* vblank init */
> -	ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
> +	ret = drm_vblank_init(drm);
>   	if (ret) {
>   		drm_err(drm, "failed to initialize vblank.\n");
>   		goto err_unbind_all;
> diff --git a/drivers/gpu/drm/sti/sti_compositor.c b/drivers/gpu/drm/sti/sti_compositor.c
> index 8c529b0cca8b4..5478826aeb420 100644
> --- a/drivers/gpu/drm/sti/sti_compositor.c
> +++ b/drivers/gpu/drm/sti/sti_compositor.c
> @@ -145,7 +145,7 @@ static int sti_compositor_bind(struct device *dev,
>   		}
>   	}
>   
> -	drm_vblank_init(drm_dev, crtc_id);
> +	drm_vblank_init(drm_dev);
>   
>   	return 0;
>   }
> diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
> index 8818dcf98da79..1e8ac7bbbea5c 100644
> --- a/drivers/gpu/drm/stm/ltdc.c
> +++ b/drivers/gpu/drm/stm/ltdc.c
> @@ -2076,7 +2076,7 @@ int ltdc_load(struct drm_device *ddev)
>   		goto err;
>   	}
>   
> -	ret = drm_vblank_init(ddev, NB_CRTC);
> +	ret = drm_vblank_init(ddev);
>   	if (ret) {
>   		drm_err(ddev, "Failed calling drm_vblank_init()\n");
>   		goto err;
> diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
> index e9baca360160b..b74ab1bcb41ee 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
> @@ -95,7 +95,7 @@ static int sun4i_drv_bind(struct device *dev)
>   	}
>   
>   	/* drm_vblank_init calls kcalloc, which can fail */
> -	ret = drm_vblank_init(drm, drm->mode_config.num_crtc);
> +	ret = drm_vblank_init(drm);
>   	if (ret)
>   		goto unbind_all;
>   
> diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
> index 324480c87fb1f..d5fe8f35107e9 100644
> --- a/drivers/gpu/drm/tegra/drm.c
> +++ b/drivers/gpu/drm/tegra/drm.c
> @@ -1241,7 +1241,7 @@ static int host1x_drm_probe(struct host1x_device *dev)
>   	/* syncpoints are used for full 32-bit hardware VBLANK counters */
>   	drm->max_vblank_count = 0xffffffff;
>   
> -	err = drm_vblank_init(drm, drm->mode_config.num_crtc);
> +	err = drm_vblank_init(drm);
>   	if (err < 0)
>   		goto hub;
>   
> diff --git a/drivers/gpu/drm/tidss/tidss_kms.c b/drivers/gpu/drm/tidss/tidss_kms.c
> index 70c14c3be10d5..8b45ac6a5e704 100644
> --- a/drivers/gpu/drm/tidss/tidss_kms.c
> +++ b/drivers/gpu/drm/tidss/tidss_kms.c
> @@ -289,7 +289,7 @@ int tidss_modeset_init(struct tidss_device *tidss)
>   	if (ret)
>   		return ret;
>   
> -	ret = drm_vblank_init(ddev, tidss->num_crtcs);
> +	ret = drm_vblank_init(ddev);
>   	if (ret)
>   		return ret;
>   
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index 1d6c9a423a410..37508fcd261c0 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -405,7 +405,7 @@ static int tilcdc_pdev_probe(struct platform_device *pdev)
>   		goto unregister_cpufreq_notif;
>   	}
>   
> -	ret = drm_vblank_init(ddev, 1);
> +	ret = drm_vblank_init(ddev);
>   	if (ret < 0) {
>   		drm_err(ddev, "failed to initialize vblank\n");
>   		goto unregister_cpufreq_notif;
> diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c
> index e2d957e51505c..36196682ace2f 100644
> --- a/drivers/gpu/drm/tiny/bochs.c
> +++ b/drivers/gpu/drm/tiny/bochs.c
> @@ -677,7 +677,7 @@ static int bochs_kms_init(struct bochs_device *bochs)
>   	drm_connector_attach_edid_property(connector);
>   	drm_connector_attach_encoder(connector, encoder);
>   
> -	ret = drm_vblank_init(dev, 1);
> +	ret = drm_vblank_init(dev);
>   	if (ret)
>   		return ret;
>   
> diff --git a/drivers/gpu/drm/tiny/cirrus-qemu.c b/drivers/gpu/drm/tiny/cirrus-qemu.c
> index 075221b431d37..d6730763acade 100644
> --- a/drivers/gpu/drm/tiny/cirrus-qemu.c
> +++ b/drivers/gpu/drm/tiny/cirrus-qemu.c
> @@ -501,7 +501,7 @@ static int cirrus_pipe_init(struct cirrus_device *cirrus)
>   	if (ret)
>   		return ret;
>   
> -	ret = drm_vblank_init(dev, 1);
> +	ret = drm_vblank_init(dev);
>   	if (ret)
>   		return ret;
>   
> diff --git a/drivers/gpu/drm/tve200/tve200_drv.c b/drivers/gpu/drm/tve200/tve200_drv.c
> index 8d0e7c7c82e84..f41748436ac5a 100644
> --- a/drivers/gpu/drm/tve200/tve200_drv.c
> +++ b/drivers/gpu/drm/tve200/tve200_drv.c
> @@ -120,7 +120,7 @@ static int tve200_modeset_init(struct drm_device *dev)
>   	dev_info(dev->dev, "attached to panel %s\n",
>   		 dev_name(panel->dev));
>   
> -	ret = drm_vblank_init(dev, 1);
> +	ret = drm_vblank_init(dev);
>   	if (ret) {
>   		dev_err(dev->dev, "failed to init vblank\n");
>   		goto out_bridge;
> diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
> index 8f08567d28fc6..2c1c479494b12 100644
> --- a/drivers/gpu/drm/vc4/vc4_kms.c
> +++ b/drivers/gpu/drm/vc4/vc4_kms.c
> @@ -1151,7 +1151,7 @@ int vc4_kms_load(struct drm_device *dev)
>   	/* Set support for vblank irq fast disable, before drm_vblank_init() */
>   	dev->vblank_disable_immediate = true;
>   
> -	ret = drm_vblank_init(dev, dev->mode_config.num_crtc);
> +	ret = drm_vblank_init(dev);
>   	if (ret < 0) {
>   		dev_err(dev->dev, "failed to initialize vblank\n");
>   		return ret;
> diff --git a/drivers/gpu/drm/verisilicon/vs_drm.c b/drivers/gpu/drm/verisilicon/vs_drm.c
> index fd259d53f49f1..3e4944eb745c4 100644
> --- a/drivers/gpu/drm/verisilicon/vs_drm.c
> +++ b/drivers/gpu/drm/verisilicon/vs_drm.c
> @@ -121,7 +121,7 @@ int vs_drm_initialize(struct vs_dc *dc, struct platform_device *pdev)
>   		vdrm->crtcs[i] = crtc;
>   	}
>   
> -	ret = drm_vblank_init(drm, dc->identity.display_count);
> +	ret = drm_vblank_init(drm);
>   	if (ret)
>   		return ret;
>   
> diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
> index 44ffffec550fd..971c5a7424b37 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_display.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_display.c
> @@ -381,7 +381,7 @@ int virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev)
>   	for (i = 0 ; i < vgdev->num_scanouts; ++i)
>   		vgdev_output_init(vgdev, i);
>   
> -	ret = drm_vblank_init(vgdev->ddev, vgdev->num_scanouts);
> +	ret = drm_vblank_init(vgdev->ddev);
>   	if (ret)
>   		return ret;
>   
> diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_drv.c
> index 5a640b531d88f..5a830cee7fe9b 100644
> --- a/drivers/gpu/drm/vkms/vkms_drv.c
> +++ b/drivers/gpu/drm/vkms/vkms_drv.c
> @@ -192,8 +192,7 @@ int vkms_create(struct vkms_config *config)
>   		goto out_devres;
>   	}
>   
> -	ret = drm_vblank_init(&vkms_device->drm,
> -			      vkms_config_get_num_crtcs(config));
> +	ret = drm_vblank_init(&vkms_device->drm);
>   	if (ret) {
>   		DRM_ERROR("Failed to vblank\n");
>   		goto out_devres;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_vkms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_vkms.c
> index 7b8163b5e5014..22601060727fb 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_vkms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_vkms.c
> @@ -212,7 +212,7 @@ vmw_vkms_init(struct vmw_private *vmw)
>   
>   	ret = kstrtobool(buffer, &vmw->vkms_enabled);
>   	if (!ret && vmw->vkms_enabled) {
> -		ret = drm_vblank_init(&vmw->drm, VMWGFX_NUM_DISPLAY_UNITS);
> +		ret = drm_vblank_init(&vmw->drm);
>   		vmw->vkms_enabled = (ret == 0);
>   	}
>   
> diff --git a/drivers/gpu/drm/xlnx/zynqmp_kms.c b/drivers/gpu/drm/xlnx/zynqmp_kms.c
> index d5f9224505655..c5209df46afe5 100644
> --- a/drivers/gpu/drm/xlnx/zynqmp_kms.c
> +++ b/drivers/gpu/drm/xlnx/zynqmp_kms.c
> @@ -504,7 +504,7 @@ int zynqmp_dpsub_drm_init(struct zynqmp_dpsub *dpsub)
>   	drm->mode_config.max_width = ZYNQMP_DISP_MAX_WIDTH;
>   	drm->mode_config.max_height = ZYNQMP_DISP_MAX_HEIGHT;
>   
> -	ret = drm_vblank_init(drm, 1);
> +	ret = drm_vblank_init(drm);
>   	if (ret)
>   		return ret;
>   
> diff --git a/include/drm/drm_vblank.h b/include/drm/drm_vblank.h
> index 2fcef9c0f5b1b..d78f40d3a85be 100644
> --- a/include/drm/drm_vblank.h
> +++ b/include/drm/drm_vblank.h
> @@ -285,7 +285,7 @@ struct drm_vblank_crtc {
>   };
>   
>   struct drm_vblank_crtc *drm_crtc_vblank_crtc(struct drm_crtc *crtc);
> -int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs);
> +int drm_vblank_init(struct drm_device *dev);
>   bool drm_dev_has_vblank(const struct drm_device *dev);
>   u64 drm_crtc_vblank_count(struct drm_crtc *crtc);
>   u64 drm_crtc_vblank_count_and_time(struct drm_crtc *crtc,

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, (HRB 36809, AG Nürnberg)




  reply	other threads:[~2026-08-26 11:58 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-14 20:35 [PATCH 0/5] drm/vblank: Enforce all-or-nothing vblank support Lyude Paul
2026-08-14 20:35 ` [PATCH 1/5] drm/vblank: Add drm_device.has_hw_vblank Lyude Paul
2026-08-14 20:35 ` [PATCH 2/5] drm/vblank: Remove drm->num_crtcs Lyude Paul
2026-08-14 20:35 ` [PATCH 3/5] drm/vblank: Remove num_crtcs argument from drm_vblank_init() Lyude Paul
2026-08-26 11:57   ` Thomas Zimmermann [this message]
2026-08-14 20:35 ` [PATCH 4/5] drm/vblank: Use drm_for_each_crtc() in drm_vblank_init() Lyude Paul
2026-08-14 20:35 ` [PATCH 5/5] drm/vblank: Require all CRTCs implement vblank support " Lyude Paul
2026-08-17 12:41 ` [PATCH 0/5] drm/vblank: Enforce all-or-nothing vblank support Jani Nikula

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=23ffe7db-5657-444a-9963-a5715d40658d@suse.de \
    --to=tzimmermann@suse.de \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=asahi@lists.linux.dev \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=freedreno@lists.freedesktop.org \
    --cc=imx@lists.linux.dev \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=linux-amlogic@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-aspeed@lists.ozlabs.org \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=linux-stm32@st-md-mailman.stormreply.com \
    --cc=linux-sunxi@lists.linux.dev \
    --cc=linux-tegra@vger.kernel.org \
    --cc=lyude@redhat.com \
    --cc=nouveau@lists.freedesktop.org \
    --cc=spice-devel@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox