Re: [PATCH 0/5] drm/vblank: Enforce all-or-nothing vblank support

Jani Nikula <[email protected]>
Newsgroups org.freedesktop.lists.nouveau,dev.linux.lists.asahi,dev.linux.lists.imx,dev.linux.lists.linux-sunxi,org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel,org.freedesktop.lists.intel-gfx,org.freedesktop.lists.intel-xe,org.infradead.lists.linux-amlogic,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-mediatek,org.infradead.lists.linux-rockchip,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-hyperv,org.kernel.vger.linux-kernel,org.kernel.vger.linux-mips,org.kernel.vger.linux-renesas-soc,org.kernel.vger.linux-samsung-soc,org.kernel.vger.linux-tegra,org.ozlabs.lists.linux-aspeed
Organization Intel Finland Oy - BIC 0357606-4 - c/o Alberga Business Park, 6 krs Bertel Jungin Aukio 5, 02600 Espoo, Finland
Message-ID <[email protected]>
On Fri, 14 Aug 2026, Lyude Paul <[email protected]> wrote:
> One of the oddities with DRM that is leftover from the old days is how
> vblank support is implemented by drivers. This has caused some minor
> issues for the rust bindings for KMS which could be worked around.
> However, it seems like a much better idea to fix this on the C side.
> Those oddities are mainly:
>
> * There's nothing in the vblank core that actually ensures that all
>   CRTCs implement vblank support if one of them do. On Rust's side, we
>   can't have this and have to ensure either the whole device has vblank
>   support or not - otherwise it would be quite painful ensuring we don't
>   expose vblank methods to drivers that can't use them.
>   This additionally means such a situation would lead to UB.
> * There is a second variable for keeping track of the number of CRTCs
>   and it's kind of broken and confusing. Even worse, we currently allow
>   the vblank API to allow a driver to specify a different number of
>   CRTCs then it actually has.
>
> So, let's just go ahead and fix this across the whole tree, and enforce
> that a driver must either implement hardware vblank support for all
> CRTCs or no CRTCs.

For i915, the relevant init order is currently:

- drm_vblank_init()
- drm_mode_config_init()
- drm_crtc_init_with_planes() for each CRTC

For the patch series to work, drm_vblank_init() would have to happen
after mode config and CRTC init. Off-hand, I couldn't say if there are
dependencies that make this change difficult.

I'd be surprised if i915 were the only driver like this.


BR,
Jani.

>
> Lyude Paul (5):
>   drm/vblank: Add drm_device.has_hw_vblank
>   drm/vblank: Remove drm->num_crtcs
>   drm/vblank: Remove num_crtcs argument from drm_vblank_init()
>   drm/vblank: Use drm_for_each_crtc() in drm_vblank_init()
>   drm/vblank: Require all CRTCs implement vblank support in
>     drm_vblank_init()
>
>  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 +-
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  2 +-
>  .../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                  | 60 ++++++++++++-------
>  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/gma500/psb_irq.c              |  4 +-
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c   |  2 +-
>  .../gpu/drm/hisilicon/kirin/kirin_drm_drv.c   |  2 +-
>  drivers/gpu/drm/hyperv/hyperv_drm_modeset.c   |  2 +-
>  .../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/atombios_crtc.c        |  4 +-
>  drivers/gpu/drm/radeon/radeon_irq_kms.c       |  2 +-
>  drivers/gpu/drm/radeon/radeon_legacy_crtc.c   |  4 +-
>  drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c |  2 +-
>  drivers/gpu/drm/renesas/rz-du/rzg2l_du_kms.c  |  2 +-
>  .../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                 |  6 +-
>  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_device.h                      | 10 +++-
>  include/drm/drm_vblank.h                      |  2 +-
>  64 files changed, 114 insertions(+), 92 deletions(-)
>
>
> base-commit: 568d4cb5dcc5ec4e22975699b6ea67a30806884c

-- 
Jani Nikula, Intel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.