[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAKwvOd=EvaSJFcpjh6gSRMrb=D5hwJHNR3wz6uEg3fmqmoGqfg@mail.gmail.com>
Date: Wed, 29 Jan 2020 13:45:23 -0800
From: Nick Desaulniers <ndesaulniers@...gle.com>
To: John Stultz <john.stultz@...aro.org>
Cc: lkml <linux-kernel@...r.kernel.org>,
Rob Clark <robdclark@...il.com>, Sean Paul <sean@...rly.run>,
Sami Tolvanen <samitolvanen@...gle.com>,
Todd Kjos <tkjos@...gle.com>,
Alistair Delva <adelva@...gle.com>,
Amit Pundir <amit.pundir@...aro.org>,
Sumit Semwal <sumit.semwal@...aro.org>,
freedreno@...ts.freedesktop.org,
clang-built-linux <clang-built-linux@...glegroups.com>
Subject: Re: [PATCH] drm: msm: Fix return type of dsi_mgr_connector_mode_valid
for kCFI
On Wed, Jan 29, 2020 at 12:12 PM John Stultz <john.stultz@...aro.org> wrote:
>
> I was hitting kCFI crashes when building with clang, and after
> some digging finally narrowed it down to the
> dsi_mgr_connector_mode_valid() function being implemented as
> returning an int, instead of an enum drm_mode_status.
>
> This patch fixes it, and appeases the opaque word of the kCFI
> gods (seriously, clang inlining everything makes the kCFI
> backtraces only really rough estimates of where things went
> wrong).
>
> Thanks as always to Sami for his help narrowing this down.
>
> Cc: Rob Clark <robdclark@...il.com>
> Cc: Sean Paul <sean@...rly.run>
> Cc: Sami Tolvanen <samitolvanen@...gle.com>
> Cc: Todd Kjos <tkjos@...gle.com>
> Cc: Alistair Delva <adelva@...gle.com>
> Cc: Amit Pundir <amit.pundir@...aro.org>
> Cc: Sumit Semwal <sumit.semwal@...aro.org>
> Cc: freedreno@...ts.freedesktop.org
> Cc: clang-built-linux@...glegroups.com
> Signed-off-by: John Stultz <john.stultz@...aro.org>
John, thanks for fixing this. Our inliner is a point of pride
(inlining indirect function calls; you're welcome). ;)
Indeed, the function pointer member `mode_valid` in `struct
drm_connector_helper_funcs` in
include/drm/drm_modeset_helper_vtables.h returns an `enum
drm_mode_status`.
Reviewed-by: Nick Desaulniers <ndesaulniers@...gle.com>
> ---
> drivers/gpu/drm/msm/dsi/dsi_manager.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c
> index 271aa7bbca925..355a60b4a536f 100644
> --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c
> +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c
> @@ -336,7 +336,7 @@ static int dsi_mgr_connector_get_modes(struct drm_connector *connector)
> return num;
> }
>
> -static int dsi_mgr_connector_mode_valid(struct drm_connector *connector,
> +static enum drm_mode_status dsi_mgr_connector_mode_valid(struct drm_connector *connector,
> struct drm_display_mode *mode)
> {
> int id = dsi_mgr_connector_get_id(connector);
> --
--
Thanks,
~Nick Desaulniers
Powered by blists - more mailing lists