On 2/16/23 23:44, Jani Nikula wrote:
> Avoid figuring out the header pointer multiple times.
> 
> Cc: Iaroslav Boliukin <i...@lach.pw>
> Cc: Dmitry Osipenko <dmitry.osipe...@collabora.com>
> Signed-off-by: Jani Nikula <jani.nik...@intel.com>
> ---
>  drivers/gpu/drm/drm_displayid.c | 17 ++++++++---------
>  1 file changed, 8 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_displayid.c b/drivers/gpu/drm/drm_displayid.c
> index 7d03159dc146..0de9b5530393 100644
> --- a/drivers/gpu/drm/drm_displayid.c
> +++ b/drivers/gpu/drm/drm_displayid.c
> @@ -20,7 +20,8 @@ displayid_get_header(const u8 *displayid, int length, int 
> index)
>       return base;
>  }
>  
> -static int validate_displayid(const u8 *displayid, int length, int idx)
> +static const struct displayid_header *
> +validate_displayid(const u8 *displayid, int length, int idx)
>  {
>       int i, dispid_length;
>       u8 csum = 0;
> @@ -28,7 +29,7 @@ static int validate_displayid(const u8 *displayid, int 
> length, int idx)
>  
>       base = displayid_get_header(displayid, length, idx);
>       if (IS_ERR(base))
> -             return PTR_ERR(base);
> +             return base;
>  
>       DRM_DEBUG_KMS("base revision 0x%x, length %d, %d %d\n",
>                     base->rev, base->bytes, base->prod_id, base->ext_count);
> @@ -36,16 +37,16 @@ static int validate_displayid(const u8 *displayid, int 
> length, int idx)
>       /* +1 for DispID checksum */
>       dispid_length = sizeof(*base) + base->bytes + 1;
>       if (dispid_length > length - idx)
> -             return -EINVAL;
> +             return ERR_PTR(-EINVAL);
>  
>       for (i = 0; i < dispid_length; i++)
>               csum += displayid[idx + i];
>       if (csum) {
>               DRM_NOTE("DisplayID checksum invalid, remainder is %d\n", csum);
> -             return -EINVAL;
> +             return ERR_PTR(-EINVAL);
>       }
>  
> -     return 0;
> +     return base;
>  }
>  
>  static const u8 *drm_find_displayid_extension(const struct drm_edid 
> *drm_edid,
> @@ -54,7 +55,6 @@ static const u8 *drm_find_displayid_extension(const struct 
> drm_edid *drm_edid,
>  {
>       const u8 *displayid = drm_find_edid_extension(drm_edid, DISPLAYID_EXT, 
> ext_index);
>       const struct displayid_header *base;
> -     int ret;
>  
>       if (!displayid)
>               return NULL;
> @@ -63,11 +63,10 @@ static const u8 *drm_find_displayid_extension(const 
> struct drm_edid *drm_edid,
>       *length = EDID_LENGTH - 1;
>       *idx = 1;
>  
> -     ret = validate_displayid(displayid, *length, *idx);
> -     if (ret)
> +     base = validate_displayid(displayid, *length, *idx);
> +     if (IS_ERR(base))
>               return NULL;
>  
> -     base = (const struct displayid_header *)&displayid[*idx];
>       *length = *idx + sizeof(*base) + base->bytes;
>  
>       return displayid;

Tested-by: Dmitry Osipenko <dmitry.osipe...@collabora.com>
Reviewed-by: Dmitry Osipenko <dmitry.osipe...@collabora.com>

-- 
Best regards,
Dmitry

Reply via email to