diff mbox

drm: fixes crct set_mode when encoder mode_fixup is null.

Message ID 1455106522-32307-1-git-send-email-palminha@synopsys.com (mailing list archive)
State New, archived
Headers show

Commit Message

Carlos Palminha Feb. 10, 2016, 12:15 p.m. UTC
Avoids null crash when encoders don't implement mode_fixup.

Signed-off-by: Carlos Palminha <palminha@synopsys.com>
---
 drivers/gpu/drm/drm_crtc_helper.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

Comments

Daniel Vetter Feb. 10, 2016, 12:29 p.m. UTC | #1
On Wed, Feb 10, 2016 at 12:15:22PM +0000, Carlos Palminha wrote:
> Avoids null crash when encoders don't implement mode_fixup.
> 
> Signed-off-by: Carlos Palminha <palminha@synopsys.com>
> ---
>  drivers/gpu/drm/drm_crtc_helper.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
> index a02a7f9..ef3def7 100644
> --- a/drivers/gpu/drm/drm_crtc_helper.c
> +++ b/drivers/gpu/drm/drm_crtc_helper.c
> @@ -328,10 +328,12 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
>  		}
>  
>  		encoder_funcs = encoder->helper_private;
> -		if (!(ret = encoder_funcs->mode_fixup(encoder, mode,
> -						      adjusted_mode))) {
> -			DRM_DEBUG_KMS("Encoder fixup failed\n");
> -			goto done;
> +		if (encoder_funcs->mode_fixup) {
> +			if (!(ret = encoder_funcs->mode_fixup(encoder, mode,
> +							      adjusted_mode))) {
> +				DRM_DEBUG_KMS("Encoder fixup failed\n");
> +				goto done;
> +			}

At first I thought this isn't useful since it's the old legacy helper
code that no new driver should use. But from a quick

$ git grep mode_fixup.*encoder

it looks like there's piles of existing drivers that could benefit from
this with a small cleanup. So applied it, but can you pls follow up with
patches to get rid of the now unecessary dummy functions?

Thanks, Daniel

>  		}
>  	}
>  
> -- 
> 2.5.0
>
Daniel Vetter Feb. 10, 2016, 12:31 p.m. UTC | #2
On Wed, Feb 10, 2016 at 12:15:22PM +0000, Carlos Palminha wrote:
> Avoids null crash when encoders don't implement mode_fixup.
> 
> Signed-off-by: Carlos Palminha <palminha@synopsys.com>

btw we could do the same game for drm_crtc_helper_funcs->mode_fixup. More
dummy functions to nuke!
-Daniel

> ---
>  drivers/gpu/drm/drm_crtc_helper.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
> index a02a7f9..ef3def7 100644
> --- a/drivers/gpu/drm/drm_crtc_helper.c
> +++ b/drivers/gpu/drm/drm_crtc_helper.c
> @@ -328,10 +328,12 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
>  		}
>  
>  		encoder_funcs = encoder->helper_private;
> -		if (!(ret = encoder_funcs->mode_fixup(encoder, mode,
> -						      adjusted_mode))) {
> -			DRM_DEBUG_KMS("Encoder fixup failed\n");
> -			goto done;
> +		if (encoder_funcs->mode_fixup) {
> +			if (!(ret = encoder_funcs->mode_fixup(encoder, mode,
> +							      adjusted_mode))) {
> +				DRM_DEBUG_KMS("Encoder fixup failed\n");
> +				goto done;
> +			}
>  		}
>  	}
>  
> -- 
> 2.5.0
>
Daniel Vetter Feb. 10, 2016, 12:36 p.m. UTC | #3
On Wed, Feb 10, 2016 at 12:15:22PM +0000, Carlos Palminha wrote:
> Avoids null crash when encoders don't implement mode_fixup.
> 
> Signed-off-by: Carlos Palminha <palminha@synopsys.com>

One more thing I've forgotten: With these changes the kerneldoc in
include/drm/drm_modeset_helper_vtables.h is now no longer accurate. It
needs to be updated to explain that this hook is optional for both
helpers.
-Daniel


> ---
>  drivers/gpu/drm/drm_crtc_helper.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
> index a02a7f9..ef3def7 100644
> --- a/drivers/gpu/drm/drm_crtc_helper.c
> +++ b/drivers/gpu/drm/drm_crtc_helper.c
> @@ -328,10 +328,12 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
>  		}
>  
>  		encoder_funcs = encoder->helper_private;
> -		if (!(ret = encoder_funcs->mode_fixup(encoder, mode,
> -						      adjusted_mode))) {
> -			DRM_DEBUG_KMS("Encoder fixup failed\n");
> -			goto done;
> +		if (encoder_funcs->mode_fixup) {
> +			if (!(ret = encoder_funcs->mode_fixup(encoder, mode,
> +							      adjusted_mode))) {
> +				DRM_DEBUG_KMS("Encoder fixup failed\n");
> +				goto done;
> +			}
>  		}
>  	}
>  
> -- 
> 2.5.0
>
diff mbox

Patch

diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index a02a7f9..ef3def7 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -328,10 +328,12 @@  bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
 		}
 
 		encoder_funcs = encoder->helper_private;
-		if (!(ret = encoder_funcs->mode_fixup(encoder, mode,
-						      adjusted_mode))) {
-			DRM_DEBUG_KMS("Encoder fixup failed\n");
-			goto done;
+		if (encoder_funcs->mode_fixup) {
+			if (!(ret = encoder_funcs->mode_fixup(encoder, mode,
+							      adjusted_mode))) {
+				DRM_DEBUG_KMS("Encoder fixup failed\n");
+				goto done;
+			}
 		}
 	}