From: Lyude Paul <lyude@redhat.com>
To: 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: [PATCH 0/5] drm/vblank: Enforce all-or-nothing vblank support
Date: Fri, 14 Aug 2026 16:35:28 -0400 [thread overview]
Message-ID: <20260814203542.1405135-1-lyude@redhat.com> (raw)
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.
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
--
2.55.0
next reply other threads:[~2026-08-14 20:36 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-14 20:35 Lyude Paul [this message]
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-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
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=20260814203542.1405135-1-lyude@redhat.com \
--to=lyude@redhat.com \
--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=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