Add a helper function that computes the product of hdisplay and vdisplay. This is necessary to prevent a potential sign extension issue.
v2: - Clarify purpose of helper function (Jonathan) - s/drm_mode_display_size/drm_mode_num_active_pixels (Ville) - Add kernel docs (Jani) Signed-off-by: Jonathan Cavitt <jonathan.cav...@intel.com> Cc: Matthew Auld <matthew.a...@intel.com> Cc: Himal Prasad Ghimiray <himal.prasad.ghimi...@intel.com> Cc: Matthew Brost <matthew.br...@intel.com> Cc: Ville Syrjälä <ville.syrj...@linux.intel.com> Cc: Jani Nikula <jani.nik...@linux.intel.com> --- drivers/gpu/drm/drm_gem_vram_helper.c | 2 +- drivers/gpu/drm/drm_mipi_dbi.c | 2 +- include/drm/drm_modes.h | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c index 90760d0ca071..a345dc8caa3b 100644 --- a/drivers/gpu/drm/drm_gem_vram_helper.c +++ b/drivers/gpu/drm/drm_gem_vram_helper.c @@ -967,7 +967,7 @@ drm_vram_helper_mode_valid_internal(struct drm_device *dev, max_fbpages = (vmm->vram_size / 2) >> PAGE_SHIFT; - fbsize = mode->hdisplay * mode->vdisplay * max_bpp; + fbsize = drm_mode_num_active_pixels(mode) * max_bpp; fbpages = DIV_ROUND_UP(fbsize, PAGE_SIZE); if (fbpages > max_fbpages) diff --git a/drivers/gpu/drm/drm_mipi_dbi.c b/drivers/gpu/drm/drm_mipi_dbi.c index e33c78fc8fbd..08da48bfff36 100644 --- a/drivers/gpu/drm/drm_mipi_dbi.c +++ b/drivers/gpu/drm/drm_mipi_dbi.c @@ -691,7 +691,7 @@ int mipi_dbi_dev_init(struct mipi_dbi_dev *dbidev, const struct drm_simple_display_pipe_funcs *funcs, const struct drm_display_mode *mode, unsigned int rotation) { - size_t bufsize = mode->vdisplay * mode->hdisplay * sizeof(u16); + size_t bufsize = drm_mode_num_active_pixels(mode) * sizeof(u16); dbidev->drm.mode_config.preferred_depth = 16; diff --git a/include/drm/drm_modes.h b/include/drm/drm_modes.h index b9bb92e4b029..c0e8d6c4d43c 100644 --- a/include/drm/drm_modes.h +++ b/include/drm/drm_modes.h @@ -572,4 +572,18 @@ struct drm_display_mode * drm_mode_create_from_cmdline_mode(struct drm_device *dev, struct drm_cmdline_mode *cmd); +/** + * drm_mode_num_active_pixels - Computes the number of pixels in the + * drm display mode + * + * @mode - The target drm_display_mode + * + * Returns the product of hdisplay and vdisplay + */ +static inline u32 +drm_mode_num_active_pixels(const struct drm_display_mode *mode) +{ + return mode->hdisplay * mode->vdisplay; +} + #endif /* __DRM_MODES_H__ */ -- 2.43.0