[PATCH] drm: Nuke ->vblank_disable_allowed

2016-05-20 Thread Laurent Pinchart
Hi Daniel,

Thank you for the patch.

On Wednesday 18 May 2016 22:29:57 Daniel Vetter wrote:
> This was added in
> 
> commit 0a3e67a4caac273a3bfc4ced3da364830b1ab241
> Author: Jesse Barnes 
> Date:   Tue Sep 30 12:14:26 2008 -0700
> 
> drm: Rework vblank-wait handling to allow interrupt reduction.
> 
> to stay backwards-compatible with old UMS code that didn't even tell
> the kernel when it did a modeset, so that the kernel could
> save/restore vblank counters. At worst this means vblanks will be
> somewhat funky on a setup that very likely no one still runs.
> 
> So let's just nuke it.
> 
> Plan B would be to set it unconditionally in drm_vblank_init for kms
> drivers, instead of in each driver separately. So if this patch breaks
> anything please only restore the hunks in drmP.h and drm_irq.c, plus
> add a check for DRIVER_MODESET in drm_vblank_init.
> 
> Stumbled over this in a discussion on irc with Chris.
> 
> v2: Remove leftover debug gunk from psr hacking (Alex).
> 
> Cc: Chris Wilson 
> Cc: Alex Deucher 
> Cc: Liviu Dudau 
> Cc: Russell King 
> Cc: Thierry Reding 
> Cc: Eric Anholt 
> Cc: Laurent Pinchart 
> Cc: Inki Dae 
> Cc: Tomi Valkeinen 
> Cc: Mark Yao 
> Cc: Sascha Hauer 
> Cc: Philipp Zabel 
> Signed-off-by: Daniel Vetter 

Acked-by: Laurent Pinchart 

and for rcar-du-drm,

Tested-by: Laurent Pinchart 

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 1 -
>  drivers/gpu/drm/arm/hdlcd_drv.c | 1 -
>  drivers/gpu/drm/armada/armada_drv.c | 1 -
>  drivers/gpu/drm/drm_irq.c   | 6 --
>  drivers/gpu/drm/exynos/exynos_drm_drv.c | 7 ---
>  drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c   | 1 -
>  drivers/gpu/drm/gma500/psb_drv.c| 1 -
>  drivers/gpu/drm/i915/i915_dma.c | 3 ---
>  drivers/gpu/drm/imx/imx-drm-core.c  | 7 ---
>  drivers/gpu/drm/radeon/radeon_irq_kms.c | 1 -
>  drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 7 ---
>  drivers/gpu/drm/tegra/drm.c | 1 -
>  drivers/gpu/drm/vc4/vc4_kms.c   | 2 --
>  include/drm/drmP.h  | 8 
>  14 files changed, 47 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c index 9266c7b69808..835a3fa8d8df
> 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> @@ -219,7 +219,6 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
>   if (r) {
>   return r;
>   }
> - adev->ddev->vblank_disable_allowed = true;
> 
>   /* enable msi */
>   adev->irq.msi_enabled = false;
> diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c
> b/drivers/gpu/drm/arm/hdlcd_drv.c index 2112f0b105e3..4f909378d581 100644
> --- a/drivers/gpu/drm/arm/hdlcd_drv.c
> +++ b/drivers/gpu/drm/arm/hdlcd_drv.c
> @@ -379,7 +379,6 @@ static int hdlcd_drm_bind(struct device *dev)
>   DRM_ERROR("failed to initialise vblank\n");
>   goto err_vblank;
>   }
> - drm->vblank_disable_allowed = true;
> 
>   drm_mode_config_reset(drm);
>   drm_kms_helper_poll_init(drm);
> diff --git a/drivers/gpu/drm/armada/armada_drv.c
> b/drivers/gpu/drm/armada/armada_drv.c index 531fcb946346..cb21c0b6374a
> 100644
> --- a/drivers/gpu/drm/armada/armada_drv.c
> +++ b/drivers/gpu/drm/armada/armada_drv.c
> @@ -113,7 +113,6 @@ static int armada_drm_load(struct drm_device *dev,
> unsigned long flags) goto err_comp;
> 
>   dev->irq_enabled = true;
> - dev->vblank_disable_allowed = 1;
> 
>   ret = armada_fbdev_init(dev);
>   if (ret)
> diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
> index d1b5fc20b2f8..1a0ae89087e8 100644
> --- a/drivers/gpu/drm/drm_irq.c
> +++ b/drivers/gpu/drm/drm_irq.c
> @@ -348,9 +348,6 @@ static void vblank_disable_fn(unsigned long arg)
>   unsigned int pipe = vblank->pipe;
>   unsigned long irqflags;
> 
> - if (!dev->vblank_disable_allowed)
> - return;
> -
>   spin_lock_irqsave(&dev->vbl_lock, irqflags);
>   if (atomic_read(&vblank->refcount) == 0 && vblank->enabled) {
>   DRM_DEBUG("disabling vblank on crtc %u\n", pipe);
> @@ -437,8 +434,6 @@ int drm_vblank_init(struct drm_device *dev, unsigned int
> num_crtcs) "get_vblank_timestamp == NULL\n");
>   }
> 
> - dev->vblank_disable_allowed = false;
> -
>   return 0;
> 
>  err:
> @@ -1555,7 +1550,6 @@ static void drm_legacy_vblank_post_modeset(struct
> drm_device *dev,
> 
>   if (vblank->inmodeset) {
>   spin_lock_irqsave(&dev->vbl_lock, irqflags);
> - dev->vblank_disable_allowed = true;
>   drm_reset_vblank_timestamp(dev, pipe);
>   spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
> 
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> b/drivers/gpu/drm/exynos/exynos_drm_drv.c index 21c719e8e02b..2dd820e23b0c
> 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/drm/exynos/ex

[PATCH] drm: Nuke ->vblank_disable_allowed

2016-05-19 Thread Liviu Dudau
On Wed, May 18, 2016 at 10:29:57PM +0200, Daniel Vetter wrote:
> This was added in
> 
> commit 0a3e67a4caac273a3bfc4ced3da364830b1ab241
> Author: Jesse Barnes 
> Date:   Tue Sep 30 12:14:26 2008 -0700
> 
> drm: Rework vblank-wait handling to allow interrupt reduction.
> 
> to stay backwards-compatible with old UMS code that didn't even tell
> the kernel when it did a modeset, so that the kernel could
> save/restore vblank counters. At worst this means vblanks will be
> somewhat funky on a setup that very likely no one still runs.
> 
> So let's just nuke it.
> 
> Plan B would be to set it unconditionally in drm_vblank_init for kms
> drivers, instead of in each driver separately. So if this patch breaks
> anything please only restore the hunks in drmP.h and drm_irq.c, plus
> add a check for DRIVER_MODESET in drm_vblank_init.
> 
> Stumbled over this in a discussion on irc with Chris.
> 
> v2: Remove leftover debug gunk from psr hacking (Alex).
> 
> Cc: Chris Wilson 
> Cc: Alex Deucher 
> Cc: Liviu Dudau 
> Cc: Russell King 
> Cc: Thierry Reding 
> Cc: Eric Anholt 
> Cc: Laurent Pinchart 
> Cc: Inki Dae 
> Cc: Tomi Valkeinen 
> Cc: Mark Yao 
> Cc: Sascha Hauer 
> Cc: Philipp Zabel 
> Signed-off-by: Daniel Vetter 
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 1 -
>  drivers/gpu/drm/arm/hdlcd_drv.c | 1 -
>  drivers/gpu/drm/armada/armada_drv.c | 1 -
>  drivers/gpu/drm/drm_irq.c   | 6 --
>  drivers/gpu/drm/exynos/exynos_drm_drv.c | 7 ---
>  drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c   | 1 -
>  drivers/gpu/drm/gma500/psb_drv.c| 1 -
>  drivers/gpu/drm/i915/i915_dma.c | 3 ---
>  drivers/gpu/drm/imx/imx-drm-core.c  | 7 ---
>  drivers/gpu/drm/radeon/radeon_irq_kms.c | 1 -
>  drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 7 ---
>  drivers/gpu/drm/tegra/drm.c | 1 -
>  drivers/gpu/drm/vc4/vc4_kms.c   | 2 --
>  include/drm/drmP.h  | 8 
>  14 files changed, 47 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> index 9266c7b69808..835a3fa8d8df 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> @@ -219,7 +219,6 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
>   if (r) {
>   return r;
>   }
> - adev->ddev->vblank_disable_allowed = true;
>  
>   /* enable msi */
>   adev->irq.msi_enabled = false;
> diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
> index 2112f0b105e3..4f909378d581 100644
> --- a/drivers/gpu/drm/arm/hdlcd_drv.c
> +++ b/drivers/gpu/drm/arm/hdlcd_drv.c
> @@ -379,7 +379,6 @@ static int hdlcd_drm_bind(struct device *dev)
>   DRM_ERROR("failed to initialise vblank\n");
>   goto err_vblank;
>   }
> - drm->vblank_disable_allowed = true;
>  
>   drm_mode_config_reset(drm);
>   drm_kms_helper_poll_init(drm);

For the hdlcd_drv.c part:

Acked-by: Liviu Dudau 

Thanks,
Liviu

> diff --git a/drivers/gpu/drm/armada/armada_drv.c 
> b/drivers/gpu/drm/armada/armada_drv.c
> index 531fcb946346..cb21c0b6374a 100644
> --- a/drivers/gpu/drm/armada/armada_drv.c
> +++ b/drivers/gpu/drm/armada/armada_drv.c
> @@ -113,7 +113,6 @@ static int armada_drm_load(struct drm_device *dev, 
> unsigned long flags)
>   goto err_comp;
>  
>   dev->irq_enabled = true;
> - dev->vblank_disable_allowed = 1;
>  
>   ret = armada_fbdev_init(dev);
>   if (ret)
> diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
> index d1b5fc20b2f8..1a0ae89087e8 100644
> --- a/drivers/gpu/drm/drm_irq.c
> +++ b/drivers/gpu/drm/drm_irq.c
> @@ -348,9 +348,6 @@ static void vblank_disable_fn(unsigned long arg)
>   unsigned int pipe = vblank->pipe;
>   unsigned long irqflags;
>  
> - if (!dev->vblank_disable_allowed)
> - return;
> -
>   spin_lock_irqsave(&dev->vbl_lock, irqflags);
>   if (atomic_read(&vblank->refcount) == 0 && vblank->enabled) {
>   DRM_DEBUG("disabling vblank on crtc %u\n", pipe);
> @@ -437,8 +434,6 @@ int drm_vblank_init(struct drm_device *dev, unsigned int 
> num_crtcs)
>"get_vblank_timestamp == NULL\n");
>   }
>  
> - dev->vblank_disable_allowed = false;
> -
>   return 0;
>  
>  err:
> @@ -1555,7 +1550,6 @@ static void drm_legacy_vblank_post_modeset(struct 
> drm_device *dev,
>  
>   if (vblank->inmodeset) {
>   spin_lock_irqsave(&dev->vbl_lock, irqflags);
> - dev->vblank_disable_allowed = true;
>   drm_reset_vblank_timestamp(dev, pipe);
>   spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
>  
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c 
> b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index 21c719e8e02b..2dd820e23b0c 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/dr

[PATCH] drm: Nuke ->vblank_disable_allowed

2016-05-18 Thread Daniel Vetter
This was added in

commit 0a3e67a4caac273a3bfc4ced3da364830b1ab241
Author: Jesse Barnes 
Date:   Tue Sep 30 12:14:26 2008 -0700

drm: Rework vblank-wait handling to allow interrupt reduction.

to stay backwards-compatible with old UMS code that didn't even tell
the kernel when it did a modeset, so that the kernel could
save/restore vblank counters. At worst this means vblanks will be
somewhat funky on a setup that very likely no one still runs.

So let's just nuke it.

Plan B would be to set it unconditionally in drm_vblank_init for kms
drivers, instead of in each driver separately. So if this patch breaks
anything please only restore the hunks in drmP.h and drm_irq.c, plus
add a check for DRIVER_MODESET in drm_vblank_init.

Stumbled over this in a discussion on irc with Chris.

v2: Remove leftover debug gunk from psr hacking (Alex).

Cc: Chris Wilson 
Cc: Alex Deucher 
Cc: Liviu Dudau 
Cc: Russell King 
Cc: Thierry Reding 
Cc: Eric Anholt 
Cc: Laurent Pinchart 
Cc: Inki Dae 
Cc: Tomi Valkeinen 
Cc: Mark Yao 
Cc: Sascha Hauer 
Cc: Philipp Zabel 
Signed-off-by: Daniel Vetter 
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 1 -
 drivers/gpu/drm/arm/hdlcd_drv.c | 1 -
 drivers/gpu/drm/armada/armada_drv.c | 1 -
 drivers/gpu/drm/drm_irq.c   | 6 --
 drivers/gpu/drm/exynos/exynos_drm_drv.c | 7 ---
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c   | 1 -
 drivers/gpu/drm/gma500/psb_drv.c| 1 -
 drivers/gpu/drm/i915/i915_dma.c | 3 ---
 drivers/gpu/drm/imx/imx-drm-core.c  | 7 ---
 drivers/gpu/drm/radeon/radeon_irq_kms.c | 1 -
 drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 7 ---
 drivers/gpu/drm/tegra/drm.c | 1 -
 drivers/gpu/drm/vc4/vc4_kms.c   | 2 --
 include/drm/drmP.h  | 8 
 14 files changed, 47 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
index 9266c7b69808..835a3fa8d8df 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
@@ -219,7 +219,6 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
if (r) {
return r;
}
-   adev->ddev->vblank_disable_allowed = true;

/* enable msi */
adev->irq.msi_enabled = false;
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
index 2112f0b105e3..4f909378d581 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.c
+++ b/drivers/gpu/drm/arm/hdlcd_drv.c
@@ -379,7 +379,6 @@ static int hdlcd_drm_bind(struct device *dev)
DRM_ERROR("failed to initialise vblank\n");
goto err_vblank;
}
-   drm->vblank_disable_allowed = true;

drm_mode_config_reset(drm);
drm_kms_helper_poll_init(drm);
diff --git a/drivers/gpu/drm/armada/armada_drv.c 
b/drivers/gpu/drm/armada/armada_drv.c
index 531fcb946346..cb21c0b6374a 100644
--- a/drivers/gpu/drm/armada/armada_drv.c
+++ b/drivers/gpu/drm/armada/armada_drv.c
@@ -113,7 +113,6 @@ static int armada_drm_load(struct drm_device *dev, unsigned 
long flags)
goto err_comp;

dev->irq_enabled = true;
-   dev->vblank_disable_allowed = 1;

ret = armada_fbdev_init(dev);
if (ret)
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index d1b5fc20b2f8..1a0ae89087e8 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -348,9 +348,6 @@ static void vblank_disable_fn(unsigned long arg)
unsigned int pipe = vblank->pipe;
unsigned long irqflags;

-   if (!dev->vblank_disable_allowed)
-   return;
-
spin_lock_irqsave(&dev->vbl_lock, irqflags);
if (atomic_read(&vblank->refcount) == 0 && vblank->enabled) {
DRM_DEBUG("disabling vblank on crtc %u\n", pipe);
@@ -437,8 +434,6 @@ int drm_vblank_init(struct drm_device *dev, unsigned int 
num_crtcs)
 "get_vblank_timestamp == NULL\n");
}

-   dev->vblank_disable_allowed = false;
-
return 0;

 err:
@@ -1555,7 +1550,6 @@ static void drm_legacy_vblank_post_modeset(struct 
drm_device *dev,

if (vblank->inmodeset) {
spin_lock_irqsave(&dev->vbl_lock, irqflags);
-   dev->vblank_disable_allowed = true;
drm_reset_vblank_timestamp(dev, pipe);
spin_unlock_irqrestore(&dev->vbl_lock, irqflags);

diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c 
b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index 21c719e8e02b..2dd820e23b0c 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -212,13 +212,6 @@ static int exynos_drm_load(struct drm_device *dev, 
unsigned long flags)
 */
dev->irq_enabled = true;

-   /*
-* with vblank_disable_allowed = true, vblank interrupt will be disabled
-* by drm timer once a current process gives up ownership of
-   

[PATCH] drm: Nuke ->vblank_disable_allowed

2016-05-18 Thread Daniel Vetter
This was added in

commit 0a3e67a4caac273a3bfc4ced3da364830b1ab241
Author: Jesse Barnes 
Date:   Tue Sep 30 12:14:26 2008 -0700

drm: Rework vblank-wait handling to allow interrupt reduction.

to stay backwards-compatible with old UMS code that didn't even tell
the kernel when it did a modeset, so that the kernel could
save/restore vblank counters. At worst this means vblanks will be
somewhat funky on a setup that very likely no one still runs.

So let's just nuke it.

Plan B would be to set it unconditionally in drm_vblank_init for kms
drivers, instead of in each driver separately. So if this patch breaks
anything please only restore the hunks in drmP.h and drm_irq.c, plus
add a check for DRIVER_MODESET in drm_vblank_init.

Stumbled over this in a discussion on irc with Chris.

Cc: Chris Wilson 
Cc: Alex Deucher 
Cc: Liviu Dudau 
Cc: Russell King 
Cc: Thierry Reding 
Cc: Eric Anholt 
Cc: Laurent Pinchart 
Cc: Inki Dae 
Cc: Tomi Valkeinen 
Cc: Mark Yao 
Cc: Sascha Hauer 
Cc: Philipp Zabel 
Signed-off-by: Daniel Vetter 
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 1 -
 drivers/gpu/drm/arm/hdlcd_drv.c | 1 -
 drivers/gpu/drm/armada/armada_drv.c | 1 -
 drivers/gpu/drm/drm_irq.c   | 6 --
 drivers/gpu/drm/exynos/exynos_drm_drv.c | 7 ---
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c   | 1 -
 drivers/gpu/drm/gma500/psb_drv.c| 1 -
 drivers/gpu/drm/i915/i915_dma.c | 3 ---
 drivers/gpu/drm/i915/intel_psr.c| 3 +++
 drivers/gpu/drm/imx/imx-drm-core.c  | 7 ---
 drivers/gpu/drm/radeon/radeon_irq_kms.c | 1 -
 drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 7 ---
 drivers/gpu/drm/tegra/drm.c | 1 -
 drivers/gpu/drm/vc4/vc4_kms.c   | 2 --
 include/drm/drmP.h  | 8 
 15 files changed, 3 insertions(+), 47 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
index 9266c7b69808..835a3fa8d8df 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
@@ -219,7 +219,6 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
if (r) {
return r;
}
-   adev->ddev->vblank_disable_allowed = true;

/* enable msi */
adev->irq.msi_enabled = false;
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
index 2112f0b105e3..4f909378d581 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.c
+++ b/drivers/gpu/drm/arm/hdlcd_drv.c
@@ -379,7 +379,6 @@ static int hdlcd_drm_bind(struct device *dev)
DRM_ERROR("failed to initialise vblank\n");
goto err_vblank;
}
-   drm->vblank_disable_allowed = true;

drm_mode_config_reset(drm);
drm_kms_helper_poll_init(drm);
diff --git a/drivers/gpu/drm/armada/armada_drv.c 
b/drivers/gpu/drm/armada/armada_drv.c
index 531fcb946346..cb21c0b6374a 100644
--- a/drivers/gpu/drm/armada/armada_drv.c
+++ b/drivers/gpu/drm/armada/armada_drv.c
@@ -113,7 +113,6 @@ static int armada_drm_load(struct drm_device *dev, unsigned 
long flags)
goto err_comp;

dev->irq_enabled = true;
-   dev->vblank_disable_allowed = 1;

ret = armada_fbdev_init(dev);
if (ret)
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index d1b5fc20b2f8..1a0ae89087e8 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -348,9 +348,6 @@ static void vblank_disable_fn(unsigned long arg)
unsigned int pipe = vblank->pipe;
unsigned long irqflags;

-   if (!dev->vblank_disable_allowed)
-   return;
-
spin_lock_irqsave(&dev->vbl_lock, irqflags);
if (atomic_read(&vblank->refcount) == 0 && vblank->enabled) {
DRM_DEBUG("disabling vblank on crtc %u\n", pipe);
@@ -437,8 +434,6 @@ int drm_vblank_init(struct drm_device *dev, unsigned int 
num_crtcs)
 "get_vblank_timestamp == NULL\n");
}

-   dev->vblank_disable_allowed = false;
-
return 0;

 err:
@@ -1555,7 +1550,6 @@ static void drm_legacy_vblank_post_modeset(struct 
drm_device *dev,

if (vblank->inmodeset) {
spin_lock_irqsave(&dev->vbl_lock, irqflags);
-   dev->vblank_disable_allowed = true;
drm_reset_vblank_timestamp(dev, pipe);
spin_unlock_irqrestore(&dev->vbl_lock, irqflags);

diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c 
b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index 21c719e8e02b..2dd820e23b0c 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -212,13 +212,6 @@ static int exynos_drm_load(struct drm_device *dev, 
unsigned long flags)
 */
dev->irq_enabled = true;

-   /*
-* with vblank_disable_allowed = true, vblank interrupt will be disabled
-* by drm timer once a current process gives up ownershi

[PATCH] drm: Nuke ->vblank_disable_allowed

2016-05-18 Thread Alex Deucher
On Wed, May 18, 2016 at 4:29 PM, Daniel Vetter  
wrote:
> This was added in
>
> commit 0a3e67a4caac273a3bfc4ced3da364830b1ab241
> Author: Jesse Barnes 
> Date:   Tue Sep 30 12:14:26 2008 -0700
>
> drm: Rework vblank-wait handling to allow interrupt reduction.
>
> to stay backwards-compatible with old UMS code that didn't even tell
> the kernel when it did a modeset, so that the kernel could
> save/restore vblank counters. At worst this means vblanks will be
> somewhat funky on a setup that very likely no one still runs.
>
> So let's just nuke it.
>
> Plan B would be to set it unconditionally in drm_vblank_init for kms
> drivers, instead of in each driver separately. So if this patch breaks
> anything please only restore the hunks in drmP.h and drm_irq.c, plus
> add a check for DRIVER_MODESET in drm_vblank_init.
>
> Stumbled over this in a discussion on irc with Chris.
>
> v2: Remove leftover debug gunk from psr hacking (Alex).
>
> Cc: Chris Wilson 
> Cc: Alex Deucher 
> Cc: Liviu Dudau 
> Cc: Russell King 
> Cc: Thierry Reding 
> Cc: Eric Anholt 
> Cc: Laurent Pinchart 
> Cc: Inki Dae 
> Cc: Tomi Valkeinen 
> Cc: Mark Yao 
> Cc: Sascha Hauer 
> Cc: Philipp Zabel 
> Signed-off-by: Daniel Vetter 

Seems reasonable to me.

Reviewed-by: Alex Deucher 

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 1 -
>  drivers/gpu/drm/arm/hdlcd_drv.c | 1 -
>  drivers/gpu/drm/armada/armada_drv.c | 1 -
>  drivers/gpu/drm/drm_irq.c   | 6 --
>  drivers/gpu/drm/exynos/exynos_drm_drv.c | 7 ---
>  drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c   | 1 -
>  drivers/gpu/drm/gma500/psb_drv.c| 1 -
>  drivers/gpu/drm/i915/i915_dma.c | 3 ---
>  drivers/gpu/drm/imx/imx-drm-core.c  | 7 ---
>  drivers/gpu/drm/radeon/radeon_irq_kms.c | 1 -
>  drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 7 ---
>  drivers/gpu/drm/tegra/drm.c | 1 -
>  drivers/gpu/drm/vc4/vc4_kms.c   | 2 --
>  include/drm/drmP.h  | 8 
>  14 files changed, 47 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> index 9266c7b69808..835a3fa8d8df 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> @@ -219,7 +219,6 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
> if (r) {
> return r;
> }
> -   adev->ddev->vblank_disable_allowed = true;
>
> /* enable msi */
> adev->irq.msi_enabled = false;
> diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
> index 2112f0b105e3..4f909378d581 100644
> --- a/drivers/gpu/drm/arm/hdlcd_drv.c
> +++ b/drivers/gpu/drm/arm/hdlcd_drv.c
> @@ -379,7 +379,6 @@ static int hdlcd_drm_bind(struct device *dev)
> DRM_ERROR("failed to initialise vblank\n");
> goto err_vblank;
> }
> -   drm->vblank_disable_allowed = true;
>
> drm_mode_config_reset(drm);
> drm_kms_helper_poll_init(drm);
> diff --git a/drivers/gpu/drm/armada/armada_drv.c 
> b/drivers/gpu/drm/armada/armada_drv.c
> index 531fcb946346..cb21c0b6374a 100644
> --- a/drivers/gpu/drm/armada/armada_drv.c
> +++ b/drivers/gpu/drm/armada/armada_drv.c
> @@ -113,7 +113,6 @@ static int armada_drm_load(struct drm_device *dev, 
> unsigned long flags)
> goto err_comp;
>
> dev->irq_enabled = true;
> -   dev->vblank_disable_allowed = 1;
>
> ret = armada_fbdev_init(dev);
> if (ret)
> diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
> index d1b5fc20b2f8..1a0ae89087e8 100644
> --- a/drivers/gpu/drm/drm_irq.c
> +++ b/drivers/gpu/drm/drm_irq.c
> @@ -348,9 +348,6 @@ static void vblank_disable_fn(unsigned long arg)
> unsigned int pipe = vblank->pipe;
> unsigned long irqflags;
>
> -   if (!dev->vblank_disable_allowed)
> -   return;
> -
> spin_lock_irqsave(&dev->vbl_lock, irqflags);
> if (atomic_read(&vblank->refcount) == 0 && vblank->enabled) {
> DRM_DEBUG("disabling vblank on crtc %u\n", pipe);
> @@ -437,8 +434,6 @@ int drm_vblank_init(struct drm_device *dev, unsigned int 
> num_crtcs)
>  "get_vblank_timestamp == NULL\n");
> }
>
> -   dev->vblank_disable_allowed = false;
> -
> return 0;
>
>  err:
> @@ -1555,7 +1550,6 @@ static void drm_legacy_vblank_post_modeset(struct 
> drm_device *dev,
>
> if (vblank->inmodeset) {
> spin_lock_irqsave(&dev->vbl_lock, irqflags);
> -   dev->vblank_disable_allowed = true;
> drm_reset_vblank_timestamp(dev, pipe);
> spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c 
> b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index 21c719e8e02b..2dd820e23b0c 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +

[PATCH] drm: Nuke ->vblank_disable_allowed

2016-05-18 Thread Alex Deucher
On Wed, May 18, 2016 at 3:47 PM, Daniel Vetter  
wrote:
> This was added in
>
> commit 0a3e67a4caac273a3bfc4ced3da364830b1ab241
> Author: Jesse Barnes 
> Date:   Tue Sep 30 12:14:26 2008 -0700
>
> drm: Rework vblank-wait handling to allow interrupt reduction.
>
> to stay backwards-compatible with old UMS code that didn't even tell
> the kernel when it did a modeset, so that the kernel could
> save/restore vblank counters. At worst this means vblanks will be
> somewhat funky on a setup that very likely no one still runs.
>
> So let's just nuke it.
>
> Plan B would be to set it unconditionally in drm_vblank_init for kms
> drivers, instead of in each driver separately. So if this patch breaks
> anything please only restore the hunks in drmP.h and drm_irq.c, plus
> add a check for DRIVER_MODESET in drm_vblank_init.
>
> Stumbled over this in a discussion on irc with Chris.
>
> Cc: Chris Wilson 
> Cc: Alex Deucher 
> Cc: Liviu Dudau 
> Cc: Russell King 
> Cc: Thierry Reding 
> Cc: Eric Anholt 
> Cc: Laurent Pinchart 
> Cc: Inki Dae 
> Cc: Tomi Valkeinen 
> Cc: Mark Yao 
> Cc: Sascha Hauer 
> Cc: Philipp Zabel 
> Signed-off-by: Daniel Vetter 
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 1 -
>  drivers/gpu/drm/arm/hdlcd_drv.c | 1 -
>  drivers/gpu/drm/armada/armada_drv.c | 1 -
>  drivers/gpu/drm/drm_irq.c   | 6 --
>  drivers/gpu/drm/exynos/exynos_drm_drv.c | 7 ---
>  drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c   | 1 -
>  drivers/gpu/drm/gma500/psb_drv.c| 1 -
>  drivers/gpu/drm/i915/i915_dma.c | 3 ---
>  drivers/gpu/drm/i915/intel_psr.c| 3 +++
>  drivers/gpu/drm/imx/imx-drm-core.c  | 7 ---
>  drivers/gpu/drm/radeon/radeon_irq_kms.c | 1 -
>  drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 7 ---
>  drivers/gpu/drm/tegra/drm.c | 1 -
>  drivers/gpu/drm/vc4/vc4_kms.c   | 2 --
>  include/drm/drmP.h  | 8 
>  15 files changed, 3 insertions(+), 47 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> index 9266c7b69808..835a3fa8d8df 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> @@ -219,7 +219,6 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
> if (r) {
> return r;
> }
> -   adev->ddev->vblank_disable_allowed = true;
>
> /* enable msi */
> adev->irq.msi_enabled = false;
> diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
> index 2112f0b105e3..4f909378d581 100644
> --- a/drivers/gpu/drm/arm/hdlcd_drv.c
> +++ b/drivers/gpu/drm/arm/hdlcd_drv.c
> @@ -379,7 +379,6 @@ static int hdlcd_drm_bind(struct device *dev)
> DRM_ERROR("failed to initialise vblank\n");
> goto err_vblank;
> }
> -   drm->vblank_disable_allowed = true;
>
> drm_mode_config_reset(drm);
> drm_kms_helper_poll_init(drm);
> diff --git a/drivers/gpu/drm/armada/armada_drv.c 
> b/drivers/gpu/drm/armada/armada_drv.c
> index 531fcb946346..cb21c0b6374a 100644
> --- a/drivers/gpu/drm/armada/armada_drv.c
> +++ b/drivers/gpu/drm/armada/armada_drv.c
> @@ -113,7 +113,6 @@ static int armada_drm_load(struct drm_device *dev, 
> unsigned long flags)
> goto err_comp;
>
> dev->irq_enabled = true;
> -   dev->vblank_disable_allowed = 1;
>
> ret = armada_fbdev_init(dev);
> if (ret)
> diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
> index d1b5fc20b2f8..1a0ae89087e8 100644
> --- a/drivers/gpu/drm/drm_irq.c
> +++ b/drivers/gpu/drm/drm_irq.c
> @@ -348,9 +348,6 @@ static void vblank_disable_fn(unsigned long arg)
> unsigned int pipe = vblank->pipe;
> unsigned long irqflags;
>
> -   if (!dev->vblank_disable_allowed)
> -   return;
> -
> spin_lock_irqsave(&dev->vbl_lock, irqflags);
> if (atomic_read(&vblank->refcount) == 0 && vblank->enabled) {
> DRM_DEBUG("disabling vblank on crtc %u\n", pipe);
> @@ -437,8 +434,6 @@ int drm_vblank_init(struct drm_device *dev, unsigned int 
> num_crtcs)
>  "get_vblank_timestamp == NULL\n");
> }
>
> -   dev->vblank_disable_allowed = false;
> -
> return 0;
>
>  err:
> @@ -1555,7 +1550,6 @@ static void drm_legacy_vblank_post_modeset(struct 
> drm_device *dev,
>
> if (vblank->inmodeset) {
> spin_lock_irqsave(&dev->vbl_lock, irqflags);
> -   dev->vblank_disable_allowed = true;
> drm_reset_vblank_timestamp(dev, pipe);
> spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c 
> b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> index 21c719e8e02b..2dd820e23b0c 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv