On Wed, 2017-06-21 at 12:59 +0200, Maarten Lankhorst wrote:
> When reading all debugfs files on a system with DP-MST the kernel panics
> on a null pointer dereference because intel_dp is null for a DP-MST
> connector. Detect this case and skip those connectors.
> 
> Signed-off-by: Maarten Lankhorst <[email protected]>
> ---
>  drivers/gpu/drm/i915/i915_debugfs.c | 33 ++++++++++++++++++++++++---------
>  1 file changed, 24 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c 
> b/drivers/gpu/drm/i915/i915_debugfs.c
> index 1f1176b6400e..30e2e168fe92 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c

I think you missed i915_displayport_test_active_write(). Looks good
otherwise.

-DK



> @@ -3812,13 +3812,18 @@ static int i915_displayport_test_active_show(struct 
> seq_file *m, void *data)
>  
>       drm_connector_list_iter_begin(dev, &conn_iter);
>       drm_for_each_connector_iter(connector, &conn_iter) {
> +             struct intel_encoder *encoder;
> +
>               if (connector->connector_type !=
>                   DRM_MODE_CONNECTOR_DisplayPort)
>                       continue;
>  
> -             if (connector->status == connector_status_connected &&
> -                 connector->encoder != NULL) {
> -                     intel_dp = enc_to_intel_dp(connector->encoder);
> +             encoder = to_intel_encoder(connector->encoder);
> +             if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
> +                     continue;
> +
> +             if (encoder && connector->status == connector_status_connected) 
> {
> +                     intel_dp = enc_to_intel_dp(&encoder->base);
>                       if (intel_dp->compliance.test_active)
>                               seq_puts(m, "1");
>                       else
> @@ -3858,13 +3863,18 @@ static int i915_displayport_test_data_show(struct 
> seq_file *m, void *data)
>  
>       drm_connector_list_iter_begin(dev, &conn_iter);
>       drm_for_each_connector_iter(connector, &conn_iter) {
> +             struct intel_encoder *encoder;
> +
>               if (connector->connector_type !=
>                   DRM_MODE_CONNECTOR_DisplayPort)
>                       continue;
>  
> -             if (connector->status == connector_status_connected &&
> -                 connector->encoder != NULL) {
> -                     intel_dp = enc_to_intel_dp(connector->encoder);
> +             encoder = to_intel_encoder(connector->encoder);
> +             if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
> +                     continue;
> +
> +             if (encoder && connector->status == connector_status_connected) 
> {
> +                     intel_dp = enc_to_intel_dp(&encoder->base);
>                       if (intel_dp->compliance.test_type ==
>                           DP_TEST_LINK_EDID_READ)
>                               seq_printf(m, "%lx",
> @@ -3911,13 +3921,18 @@ static int i915_displayport_test_type_show(struct 
> seq_file *m, void *data)
>  
>       drm_connector_list_iter_begin(dev, &conn_iter);
>       drm_for_each_connector_iter(connector, &conn_iter) {
> +             struct intel_encoder *encoder;
> +
>               if (connector->connector_type !=
>                   DRM_MODE_CONNECTOR_DisplayPort)
>                       continue;
>  
> -             if (connector->status == connector_status_connected &&
> -                 connector->encoder != NULL) {
> -                     intel_dp = enc_to_intel_dp(connector->encoder);
> +             encoder = to_intel_encoder(connector->encoder);
> +             if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
> +                     continue;
> +
> +             if (encoder && connector->status == connector_status_connected) 
> {
> +                     intel_dp = enc_to_intel_dp(&encoder->base);
>                       seq_printf(m, "%02lx", intel_dp->compliance.test_type);
>               } else
>                       seq_puts(m, "0");
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to