[PATCH 3/4] drm: Remove the implicit drm_kms_helper_poll_enable()

Chris Wilson chris at chris-wilson.co.uk
Sun Nov 26 23:18:04 UTC 2017


Make drm_kms_helper_poll_enable() an explicit separate step from
drm_kms_helper_poll_init() that must be performed by the driver. As
already found by nouveau and discovered by i915, automatically enabling
the output_poll_execute worker introduces a race condition into driver
loading where a hotplug event may generated before the driver is setup.

Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Cc: Alex Deucher <alexander.deucher at amd.com>
Cc: "Christian König" <christian.koenig at amd.com>
Cc: David Airlie <airlied at linux.ie>
Cc: Alexey Brodkin <abrodkin at synopsys.com>
Cc: Liviu Dudau <liviu.dudau at arm.com>
Cc: Brian Starkey <brian.starkey at arm.com>
Cc: Mali DP Maintainers <malidp at foss.arm.com>
Cc: Russell King <linux at armlinux.org.uk>
Cc: Boris Brezillon <boris.brezillon at free-electrons.com>
Cc: Daniel Vetter <daniel.vetter at intel.com>
Cc: Jani Nikula <jani.nikula at linux.intel.com>
Cc: Gustavo Padovan <gustavo at padovan.org>
Cc: Sean Paul <seanpaul at chromium.org>
Cc: Inki Dae <inki.dae at samsung.com>
Cc: Joonyoung Shim <jy0922.shim at samsung.com>
Cc: Seung-Woo Kim <sw0312.kim at samsung.com>
Cc: Kyungmin Park <kyungmin.park at samsung.com>
Cc: Kukjin Kim <kgene at kernel.org>
Cc: Krzysztof Kozlowski <krzk at kernel.org>
Cc: Stefan Agner <stefan at agner.ch>
Cc: Alison Wang <alison.wang at freescale.com>
Cc: Patrik Jakobsson <patrik.r.jakobsson at gmail.com>
Cc: Xinliang Liu <z.liuxinliang at hisilicon.com>
Cc: Rongrong Zou <zourongrong at gmail.com>
Cc: Xinwei Kong <kong.kongxinwei at hisilicon.com>
Cc: Chen Feng <puck.chen at hisilicon.com>
Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
Cc: Philipp Zabel <p.zabel at pengutronix.de>
Cc: CK Hu <ck.hu at mediatek.com>
Cc: Matthias Brugger <matthias.bgg at gmail.com>
Cc: Neil Armstrong <narmstrong at baylibre.com>
Cc: Carlo Caione <carlo at caione.org>
Cc: Kevin Hilman <khilman at baylibre.com>
Cc: Rob Clark <robdclark at gmail.com>
Cc: Marek Vasut <marex at denx.de>
Cc: Ben Skeggs <bskeggs at redhat.com>
Cc: Tomi Valkeinen <tomi.valkeinen at ti.com>
Cc: Eric Anholt <eric at anholt.net>
Cc: Dave Airlie <airlied at redhat.com>
Cc: Gerd Hoffmann <kraxel at redhat.com>
Cc: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Cc: Mark Yao <mark.yao at rock-chips.com>
Cc: Heiko Stuebner <heiko at sntech.de>
Cc: Benjamin Gaignard <benjamin.gaignard at linaro.org>
Cc: Vincent Abriou <vincent.abriou at st.com>
Cc: Yannick Fertre <yannick.fertre at st.com>
Cc: Philippe Cornu <philippe.cornu at st.com>
Cc: Maxime Ripard <maxime.ripard at free-electrons.com>
Cc: Chen-Yu Tsai <wens at csie.org>
Cc: Thierry Reding <thierry.reding at gmail.com>
Cc: Jonathan Hunter <jonathanh at nvidia.com>
Cc: Jyri Sarha <jsarha at ti.com>
Cc: Linus Walleij <linus.walleij at linaro.org>
Cc: Shawn Guo <shawnguo at kernel.org>
Cc: "Michel Dänzer" <michel.daenzer at amd.com>
Cc: Mario Kleiner <mario.kleiner.de at gmail.com>
Cc: "Ville Syrjälä" <ville.syrjala at linux.intel.com>
Cc: Peter Rosin <peda at axentia.se>
Cc: Ken Wang <Qingqing.Wang at amd.com>
Cc: Junwei Zhang <Jerry.Zhang at amd.com>
Cc: Xiaojie Yuan <Xiaojie.Yuan at amd.com>
Cc: "Xiangliang.Yu" <Xiangliang.Yu at amd.com>
Cc: Chris Wilson <chris at chris-wilson.co.uk>
Cc: Masahiro Yamada <yamada.masahiro at socionext.com>
Cc: Thomas Gleixner <tglx at linutronix.de>
Cc: "Noralf Trønnes" <noralf at tronnes.org>
Cc: Gabriel Krisman Bertazi <krisman at collabora.co.uk>
Cc: Dan Carpenter <dan.carpenter at oracle.com>
Cc: Arnd Bergmann <arnd at arndb.de>
Cc: Rob Herring <robh at kernel.org>
Cc: Robert Tarasov <tutankhamen at chromium.org>
Cc: amd-gfx at lists.freedesktop.org
Cc: dri-devel at lists.freedesktop.org
---
 drivers/gpu/drm/amd/amdgpu/dce_v10_0.c          |  1 +
 drivers/gpu/drm/amd/amdgpu/dce_v11_0.c          |  1 +
 drivers/gpu/drm/amd/amdgpu/dce_v6_0.c           |  1 +
 drivers/gpu/drm/amd/amdgpu/dce_v8_0.c           |  1 +
 drivers/gpu/drm/amd/amdgpu/dce_virtual.c        |  1 +
 drivers/gpu/drm/arc/arcpgu_drv.c                |  1 +
 drivers/gpu/drm/arm/hdlcd_drv.c                 |  1 +
 drivers/gpu/drm/arm/malidp_drv.c                |  1 +
 drivers/gpu/drm/armada/armada_drv.c             |  1 +
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c    |  1 +
 drivers/gpu/drm/drm_probe_helper.c              | 10 +++++-----
 drivers/gpu/drm/exynos/exynos_drm_drv.c         |  1 +
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c       |  1 +
 drivers/gpu/drm/gma500/psb_drv.c                |  1 +
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c |  1 +
 drivers/gpu/drm/i915/i915_drv.c                 |  1 +
 drivers/gpu/drm/imx/imx-drm-core.c              |  1 +
 drivers/gpu/drm/mediatek/mtk_drm_drv.c          |  1 +
 drivers/gpu/drm/meson/meson_drv.c               |  1 +
 drivers/gpu/drm/msm/msm_drv.c                   |  1 +
 drivers/gpu/drm/mxsfb/mxsfb_drv.c               |  1 +
 drivers/gpu/drm/nouveau/nouveau_display.c       |  1 -
 drivers/gpu/drm/omapdrm/omap_drv.c              |  1 +
 drivers/gpu/drm/pl111/pl111_drv.c               |  1 +
 drivers/gpu/drm/qxl/qxl_drv.c                   |  1 +
 drivers/gpu/drm/radeon/radeon_display.c         |  1 +
 drivers/gpu/drm/rcar-du/rcar_du_kms.c           |  1 +
 drivers/gpu/drm/rockchip/rockchip_drm_drv.c     |  1 +
 drivers/gpu/drm/shmobile/shmob_drm_kms.c        |  1 +
 drivers/gpu/drm/sti/sti_drv.c                   |  1 +
 drivers/gpu/drm/stm/drv.c                       |  1 +
 drivers/gpu/drm/sun4i/sun4i_drv.c               |  1 +
 drivers/gpu/drm/tegra/drm.c                     |  1 +
 drivers/gpu/drm/tilcdc/tilcdc_drv.c             |  1 +
 drivers/gpu/drm/tve200/tve200_drv.c             |  1 +
 drivers/gpu/drm/udl/udl_main.c                  |  1 +
 drivers/gpu/drm/vc4/vc4_kms.c                   |  1 +
 drivers/gpu/drm/zte/zx_drm_drv.c                |  1 +
 38 files changed, 41 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
index 4e519dc42916..8f5e018084a1 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
@@ -2854,6 +2854,7 @@ static int dce_v10_0_sw_init(void *handle)
 		return r;
 
 	drm_kms_helper_poll_init(adev->ddev);
+	drm_kms_helper_poll_enable(adev->ddev);
 
 	adev->mode_info.mode_config_initialized = true;
 	return 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
index 11edc75edaa9..c1b5dd62f4fa 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
@@ -2970,6 +2970,7 @@ static int dce_v11_0_sw_init(void *handle)
 		return r;
 
 	drm_kms_helper_poll_init(adev->ddev);
+	drm_kms_helper_poll_enable(adev->ddev);
 
 	adev->mode_info.mode_config_initialized = true;
 	return 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
index a51e35f824a1..977fcbf83391 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
@@ -2724,6 +2724,7 @@ static int dce_v6_0_sw_init(void *handle)
 		return r;
 
 	drm_kms_helper_poll_init(adev->ddev);
+	drm_kms_helper_poll_enable(adev->ddev);
 
 	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 9cf14b8b2db9..38047a4c4b92 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
@@ -2754,6 +2754,7 @@ static int dce_v8_0_sw_init(void *handle)
 		return r;
 
 	drm_kms_helper_poll_init(adev->ddev);
+	drm_kms_helper_poll_enable(adev->ddev);
 
 	adev->mode_info.mode_config_initialized = true;
 	return 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
index a8829af120c1..de7ecc106ab7 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
@@ -423,6 +423,7 @@ static int dce_virtual_sw_init(void *handle)
 	}
 
 	drm_kms_helper_poll_init(adev->ddev);
+	drm_kms_helper_poll_enable(adev->ddev);
 
 	adev->mode_info.mode_config_initialized = true;
 	return 0;
diff --git a/drivers/gpu/drm/arc/arcpgu_drv.c b/drivers/gpu/drm/arc/arcpgu_drv.c
index f067de4e1e82..90da6a82f762 100644
--- a/drivers/gpu/drm/arc/arcpgu_drv.c
+++ b/drivers/gpu/drm/arc/arcpgu_drv.c
@@ -112,6 +112,7 @@ static int arcpgu_load(struct drm_device *drm)
 
 	drm_mode_config_reset(drm);
 	drm_kms_helper_poll_init(drm);
+	drm_kms_helper_poll_enable(drm);
 
 	arcpgu->fbdev = drm_fbdev_cma_init(drm, 16,
 					   drm->mode_config.num_connector);
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
index 59b21bdc0c30..010a663fd27b 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.c
+++ b/drivers/gpu/drm/arm/hdlcd_drv.c
@@ -319,6 +319,7 @@ static int hdlcd_drm_bind(struct device *dev)
 
 	drm_mode_config_reset(drm);
 	drm_kms_helper_poll_init(drm);
+	drm_kms_helper_poll_enable(drm);
 
 	hdlcd->fbdev = drm_fbdev_cma_init(drm, 32,
 					  drm->mode_config.num_connector);
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index b8944666a18f..dcafe6480ec9 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -636,6 +636,7 @@ static int malidp_bind(struct device *dev)
 	}
 
 	drm_kms_helper_poll_init(drm);
+	drm_kms_helper_poll_enable(drm);
 
 	ret = drm_dev_register(drm, 0);
 	if (ret)
diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c
index e857b88a9799..cbd431bb0e8d 100644
--- a/drivers/gpu/drm/armada/armada_drv.c
+++ b/drivers/gpu/drm/armada/armada_drv.c
@@ -164,6 +164,7 @@ static int armada_drm_bind(struct device *dev)
 		goto err_comp;
 
 	drm_kms_helper_poll_init(&priv->drm);
+	drm_kms_helper_poll_enable(&priv->drm);
 
 	ret = drm_dev_register(&priv->drm, 0);
 	if (ret)
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
index c6e8061ffcfc..184e779599b9 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
@@ -671,6 +671,7 @@ static int atmel_hlcdc_dc_load(struct drm_device *dev)
 		dc->fbdev = NULL;
 
 	drm_kms_helper_poll_init(dev);
+	drm_kms_helper_poll_enable(dev);
 
 	return 0;
 
diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c
index 6dc2dde5b672..96e71928bd06 100644
--- a/drivers/gpu/drm/drm_probe_helper.c
+++ b/drivers/gpu/drm/drm_probe_helper.c
@@ -230,9 +230,11 @@ void drm_kms_helper_poll_enable(struct drm_device *dev)
 	struct drm_connector_list_iter conn_iter;
 	unsigned long delay = DRM_OUTPUT_POLL_PERIOD;
 
-	if (!dev->mode_config.poll_enabled || !drm_kms_helper_poll)
+	if (!drm_kms_helper_poll || dev->mode_config.poll_enabled)
 		return;
 
+	dev->mode_config.poll_enabled = true;
+
 	drm_connector_list_iter_begin(dev, &conn_iter);
 	drm_for_each_connector_iter(connector, &conn_iter) {
 		if (connector->polled & (DRM_CONNECTOR_POLL_CONNECT |
@@ -697,10 +699,8 @@ EXPORT_SYMBOL(drm_kms_helper_poll_disable);
  */
 void drm_kms_helper_poll_init(struct drm_device *dev)
 {
-	INIT_DELAYED_WORK(&dev->mode_config.output_poll_work, output_poll_execute);
-	dev->mode_config.poll_enabled = true;
-
-	drm_kms_helper_poll_enable(dev);
+	INIT_DELAYED_WORK(&dev->mode_config.output_poll_work,
+			  output_poll_execute);
 }
 EXPORT_SYMBOL(drm_kms_helper_poll_init);
 
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index 82b72425a42f..3c0057148491 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -383,6 +383,7 @@ static int exynos_drm_bind(struct device *dev)
 
 	/* init kms poll for handling hpd */
 	drm_kms_helper_poll_init(drm);
+	drm_kms_helper_poll_enable(drm);
 
 	ret = exynos_drm_fbdev_init(drm);
 	if (ret)
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c
index ddc68e476a4d..54ea68bacdbf 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c
@@ -50,6 +50,7 @@ int fsl_dcu_drm_modeset_init(struct fsl_dcu_drm_device *fsl_dev)
 
 	drm_mode_config_reset(fsl_dev->drm);
 	drm_kms_helper_poll_init(fsl_dev->drm);
+	drm_kms_helper_poll_enable(fsl_dev->drm);
 
 	return 0;
 
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
index 8f5cc1f471cd..6b3660ad9519 100644
--- a/drivers/gpu/drm/gma500/psb_drv.c
+++ b/drivers/gpu/drm/gma500/psb_drv.c
@@ -378,6 +378,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
 	psb_modeset_init(dev);
 	psb_fbdev_init(dev);
 	drm_kms_helper_poll_init(dev);
+	drm_kms_helper_poll_enable(dev);
 
 	/* Only add backlight support if we have LVDS output */
 	list_for_each_entry(connector, &dev->mode_config.connector_list,
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
index ddb0403f1975..0d40b7f0930a 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
@@ -116,6 +116,7 @@ static int kirin_drm_kms_init(struct drm_device *dev)
 
 	/* init kms poll for handling hpd */
 	drm_kms_helper_poll_init(dev);
+	drm_kms_helper_poll_enable(dev);
 
 	priv->fbdev = drm_fbdev_cma_init(dev, 32,
 					 dev->mode_config.num_connector);
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index a45f0e30a740..1a96b8b91891 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -694,6 +694,7 @@ static int i915_load_modeset_init(struct drm_device *dev)
 	intel_hpd_init(dev_priv);
 
 	drm_kms_helper_poll_init(dev);
+	drm_kms_helper_poll_enable(dev);
 
 	return 0;
 
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
index 93c7e3f9b4a8..29a239d81bd1 100644
--- a/drivers/gpu/drm/imx/imx-drm-core.c
+++ b/drivers/gpu/drm/imx/imx-drm-core.c
@@ -300,6 +300,7 @@ static int imx_drm_bind(struct device *dev)
 #endif
 
 	drm_kms_helper_poll_init(drm);
+	drm_kms_helper_poll_enable(drm);
 
 	ret = drm_dev_register(drm, 0);
 	if (ret)
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index a2ca90fc403c..2c11f8cfa6d3 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -255,6 +255,7 @@ static int mtk_drm_kms_init(struct drm_device *drm)
 		goto err_component_unbind;
 
 	drm_kms_helper_poll_init(drm);
+	drm_kms_helper_poll_enable(drm);
 	drm_mode_config_reset(drm);
 
 	return 0;
diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
index 3b804fdaf7a0..d06a7999d124 100644
--- a/drivers/gpu/drm/meson/meson_drv.c
+++ b/drivers/gpu/drm/meson/meson_drv.c
@@ -262,6 +262,7 @@ static int meson_drv_bind_master(struct device *dev, bool has_components)
 	}
 
 	drm_kms_helper_poll_init(drm);
+	drm_kms_helper_poll_enable(drm);
 
 	platform_set_drvdata(pdev, priv);
 
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 0a3ea3034e39..65b70cba2264 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -482,6 +482,7 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv)
 		goto fail;
 
 	drm_kms_helper_poll_init(ddev);
+	drm_kms_helper_poll_enable(ddev);
 
 	return 0;
 
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
index 1207ffe36250..38ef9800044c 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c
+++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
@@ -222,6 +222,7 @@ static int mxsfb_load(struct drm_device *drm, unsigned long flags)
 	}
 
 	drm_kms_helper_poll_init(drm);
+	drm_kms_helper_poll_enable(drm);
 
 	mxsfb->fbdev = drm_fbdev_cma_init(drm, 32,
 					  drm->mode_config.num_connector);
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
index 2e7785f49e6d..e91a9b702dfd 100644
--- a/drivers/gpu/drm/nouveau/nouveau_display.c
+++ b/drivers/gpu/drm/nouveau/nouveau_display.c
@@ -531,7 +531,6 @@ nouveau_display_create(struct drm_device *dev)
 		dev->mode_config.async_page_flip = true;
 
 	drm_kms_helper_poll_init(dev);
-	drm_kms_helper_poll_disable(dev);
 
 	if (nouveau_modeset != 2 && drm->vbios.dcb.entries) {
 		static const u16 oclass[] = {
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index cdf5b0601eba..2ead72bff5db 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -614,6 +614,7 @@ static int pdev_probe(struct platform_device *pdev)
 	priv->fbdev = omap_fbdev_init(ddev);
 
 	drm_kms_helper_poll_init(ddev);
+	drm_kms_helper_poll_enable(ddev);
 	omap_modeset_enable_external_hpd();
 
 	/*
diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c
index 201d57d5cb54..ad486b6aab28 100644
--- a/drivers/gpu/drm/pl111/pl111_drv.c
+++ b/drivers/gpu/drm/pl111/pl111_drv.c
@@ -141,6 +141,7 @@ static int pl111_modeset_init(struct drm_device *dev)
 					 dev->mode_config.num_connector);
 
 	drm_kms_helper_poll_init(dev);
+	drm_kms_helper_poll_enable(dev);
 
 	goto finish;
 
diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
index 2445e75cf7ea..40657cb64cdd 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.c
+++ b/drivers/gpu/drm/qxl/qxl_drv.c
@@ -87,6 +87,7 @@ qxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 		goto unload;
 
 	drm_kms_helper_poll_init(&qdev->ddev);
+	drm_kms_helper_poll_enable(&qdev->ddev);
 
 	/* Complete initialization. */
 	ret = drm_dev_register(&qdev->ddev, ent->driver_data);
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index ddfe91efa61e..8945f6b4446b 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -1660,6 +1660,7 @@ int radeon_modeset_init(struct radeon_device *rdev)
 
 	radeon_fbdev_init(rdev);
 	drm_kms_helper_poll_init(rdev->ddev);
+	drm_kms_helper_poll_enable(rdev->ddev);
 
 	/* do pm late init */
 	ret = radeon_pm_late_init(rdev);
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
index 566d1a948c8f..a3a9b454b217 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
@@ -627,6 +627,7 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu)
 	drm_mode_config_reset(dev);
 
 	drm_kms_helper_poll_init(dev);
+	drm_kms_helper_poll_enable(dev);
 
 	if (dev->mode_config.num_connector) {
 		fbdev = drm_fbdev_cma_init(dev, 32,
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
index 76d63de5921d..3a85d5a82328 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
@@ -167,6 +167,7 @@ static int rockchip_drm_bind(struct device *dev)
 
 	/* init kms poll for handling hpd */
 	drm_kms_helper_poll_init(drm_dev);
+	drm_kms_helper_poll_enable(drm_dev);
 
 	ret = drm_dev_register(drm_dev, 0);
 	if (ret)
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_kms.c b/drivers/gpu/drm/shmobile/shmob_drm_kms.c
index d36919b14da7..52c269552c6c 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_kms.c
+++ b/drivers/gpu/drm/shmobile/shmob_drm_kms.c
@@ -148,6 +148,7 @@ int shmob_drm_modeset_init(struct shmob_drm_device *sdev)
 	shmob_drm_connector_create(sdev, &sdev->encoder.encoder);
 
 	drm_kms_helper_poll_init(sdev->ddev);
+	drm_kms_helper_poll_enable(sdev->ddev);
 
 	sdev->ddev->mode_config.min_width = 0;
 	sdev->ddev->mode_config.min_height = 0;
diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
index 9e9343101738..b281991689b3 100644
--- a/drivers/gpu/drm/sti/sti_drv.c
+++ b/drivers/gpu/drm/sti/sti_drv.c
@@ -222,6 +222,7 @@ static int sti_init(struct drm_device *ddev)
 	sti_mode_config_init(ddev);
 
 	drm_kms_helper_poll_init(ddev);
+	drm_kms_helper_poll_enable(ddev);
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c
index c857663eafc2..141b7a3be0e3 100644
--- a/drivers/gpu/drm/stm/drv.c
+++ b/drivers/gpu/drm/stm/drv.c
@@ -110,6 +110,7 @@ static int drv_load(struct drm_device *ddev)
 
 	drm_mode_config_reset(ddev);
 	drm_kms_helper_poll_init(ddev);
+	drm_kms_helper_poll_enable(ddev);
 
 	if (ddev->mode_config.num_connector) {
 		ldev = ddev->dev_private;
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index 75c76cdd82bc..fff0cdf7a433 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -135,6 +135,7 @@ static int sun4i_drv_bind(struct device *dev)
 
 	/* Enable connectors polling */
 	drm_kms_helper_poll_init(drm);
+	drm_kms_helper_poll_enable(drm);
 
 	ret = drm_dev_register(drm, 0);
 	if (ret)
diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
index 943bdf88c4a2..d99fd2eba61a 100644
--- a/drivers/gpu/drm/tegra/drm.c
+++ b/drivers/gpu/drm/tegra/drm.c
@@ -196,6 +196,7 @@ static int tegra_drm_load(struct drm_device *drm, unsigned long flags)
 		goto config;
 
 	drm_kms_helper_poll_init(drm);
+	drm_kms_helper_poll_enable(drm);
 
 	err = host1x_device_init(device);
 	if (err < 0)
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index bc4feb3a84b9..3a5f423eef7b 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -413,6 +413,7 @@ static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
 	}
 
 	drm_kms_helper_poll_init(ddev);
+	drm_kms_helper_poll_enable(ddev);
 
 	ret = drm_dev_register(ddev, 0);
 	if (ret)
diff --git a/drivers/gpu/drm/tve200/tve200_drv.c b/drivers/gpu/drm/tve200/tve200_drv.c
index bd6c9454d767..13e66e295e63 100644
--- a/drivers/gpu/drm/tve200/tve200_drv.c
+++ b/drivers/gpu/drm/tve200/tve200_drv.c
@@ -133,6 +133,7 @@ static int tve200_modeset_init(struct drm_device *dev)
 	priv->fbdev = drm_fbdev_cma_init(dev, 16,
 					 dev->mode_config.num_connector);
 	drm_kms_helper_poll_init(dev);
+	drm_kms_helper_poll_enable(dev);
 
 	goto finish;
 
diff --git a/drivers/gpu/drm/udl/udl_main.c b/drivers/gpu/drm/udl/udl_main.c
index f1ec4528a73e..c138dea5b741 100644
--- a/drivers/gpu/drm/udl/udl_main.c
+++ b/drivers/gpu/drm/udl/udl_main.c
@@ -352,6 +352,7 @@ int udl_driver_load(struct drm_device *dev, unsigned long flags)
 		goto err_fb;
 
 	drm_kms_helper_poll_init(dev);
+	drm_kms_helper_poll_enable(dev);
 
 	return 0;
 err_fb:
diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
index 50c4959b5bd3..c9ffdddc7591 100644
--- a/drivers/gpu/drm/vc4/vc4_kms.c
+++ b/drivers/gpu/drm/vc4/vc4_kms.c
@@ -232,6 +232,7 @@ int vc4_kms_load(struct drm_device *dev)
 	}
 
 	drm_kms_helper_poll_init(dev);
+	drm_kms_helper_poll_enable(dev);
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/zte/zx_drm_drv.c b/drivers/gpu/drm/zte/zx_drm_drv.c
index e8b8266c0cde..293553552416 100644
--- a/drivers/gpu/drm/zte/zx_drm_drv.c
+++ b/drivers/gpu/drm/zte/zx_drm_drv.c
@@ -124,6 +124,7 @@ static int zx_drm_bind(struct device *dev)
 
 	drm_mode_config_reset(drm);
 	drm_kms_helper_poll_init(drm);
+	drm_kms_helper_poll_enable(drm);
 
 	priv->fbdev = drm_fbdev_cma_init(drm, 32,
 					 drm->mode_config.num_connector);
-- 
2.15.0



More information about the Intel-gfx-trybot mailing list