drm: rcar-du: Fix crash in encoder failure error path
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Mon, 3 Oct 2016 17:03:22 +0000 (20:03 +0300)
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Mon, 14 Nov 2016 01:35:14 +0000 (03:35 +0200)
When an encoder fails to initialize the driver prints an error message
to the kernel log. The message contains the name of the encoder's DT
node, which is NULL for internal encoders. Use the of_node_full_name()
macro to avoid dereferencing a NULL pointer, print the output number to
add more context to the error, and make sure we still own a reference to
the encoder's DT node by delaying the of_node_put() call.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
drivers/gpu/drm/rcar-du/rcar_du_kms.c

index bd9c3bb9252c68520af8233412c69253bfd04838..d3ab10602e3e26858ac154f052be6c51d6f81a8a 100644 (file)
@@ -445,13 +445,13 @@ static int rcar_du_encoders_init_one(struct rcar_du_device *rcdu,
        }
 
        ret = rcar_du_encoder_init(rcdu, enc_type, output, encoder, connector);
-       of_node_put(encoder);
-       of_node_put(connector);
-
        if (ret && ret != -EPROBE_DEFER)
                dev_warn(rcdu->dev,
-                        "failed to initialize encoder %s (%d), skipping\n",
-                        encoder->full_name, ret);
+                        "failed to initialize encoder %s on output %u (%d), skipping\n",
+                        of_node_full_name(encoder), output, ret);
+
+       of_node_put(encoder);
+       of_node_put(connector);
 
        return ret;
 }