All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Adrián Larumbe" <adrian.larumbe@collabora.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v5 02/11] drm/panfrost: Prevent division by 0
Date: Tue, 11 Aug 2026 21:57:15 +0000	[thread overview]
Message-ID: <20260811215715.BF9831F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260811-claude-fixes-v5-2-3d692c9e98c2@collabora.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] Multiplying `status->busy_time` by 100 introduces a 32-bit integer overflow on 32-bit architectures, resulting in wildly incorrect GPU load percentages in the debug log.
- [Low] The use of the type-unsafe `MAX()` macro violates kernel coding style guidelines.
--

--- Patch [2]: [PATCH v5 02/11] drm/panfrost: Prevent division by 0 ---
commit 40a64804964495fc5a5f268bdf1f61ec7215f8a4
Author: Adrián Larumbe <adrian.larumbe@collabora.com>

drm/panfrost: Prevent division by 0

This commit attempts to fix a potential division by zero when calculating the
GPU load percentage for debug logging by rearranging the operands. It changes
the calculation to multiply busy_time by 100 before dividing, and uses MAX()
to ensure the divisor is at least 1.

Closes: https://gitlab.freedesktop.org/panfrost/linux/-/work_items/88

> diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.c b/drivers/gpu/drm/panfrost/panfrost_devfreq.c
> --- a/drivers/gpu/drm/panfrost/panfrost_devfreq.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.c
> @@ -78,7 +78,7 @@ static int panfrost_devfreq_get_dev_status(struct device *dev,
>  
>  	dev_dbg(pfdev->base.dev, "busy %lu total %lu %lu %% freq %lu MHz\n",
>  		status->busy_time, status->total_time,
> -		status->busy_time / (status->total_time / 100),
> +		status->busy_time * 100 / MAX(status->total_time, 1),

[Severity: Medium]
Does this calculation introduce a 32-bit integer overflow on 32-bit platforms
like ARMv7?

The fields busy_time and total_time in struct devfreq_dev_status are of type
unsigned long. On 32-bit architectures, unsigned long is 32 bits, with a
maximum value of 4,294,967,295.

Since time is measured in nanoseconds and the devfreq polling interval is
typically 50ms, a fully loaded GPU will have a busy_time close to 50,000,000 ns.

Multiplying this by 100 yields 5,000,000,000, which overflows the 32-bit
unsigned integer and wraps around to ~705 million. This results in the debug
log incorrectly reporting a ~14% load instead of 100% when the GPU is fully
utilized.

[Severity: Low]
This isn't a bug introduced by this patch, but does the use of MAX() here
bypass strict kernel type-checking mechanisms?

The MAX() macro defined in linux/minmax.h is explicitly documented with a
warning to use it carefully for obvious constants only, as it performs no type
checking and uses the arguments multiple times.

While this specific instance does not cause a runtime bug, using the type-safe
max(status->total_time, 1UL) or max_t(unsigned long, status->total_time, 1)
might be a better fit for standard kernel coding style guidelines.

>  		status->current_frequency / 1000 / 1000);
>  
>  	return 0;

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260811-claude-fixes-v5-0-3d692c9e98c2@collabora.com?part=2

  reply	other threads:[~2026-08-11 21:57 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-11 21:42 [PATCH v5 00/11] RPM, perfcnt and other minor fixes for Panfrost Adrián Larumbe
2026-08-11 21:42 ` [PATCH v5 01/11] drm/panfrost: Check another bo field for cache option query Adrián Larumbe
2026-08-11 21:42 ` [PATCH v5 02/11] drm/panfrost: Prevent division by 0 Adrián Larumbe
2026-08-11 21:57   ` sashiko-bot [this message]
2026-08-12  7:59   ` Boris Brezillon
2026-08-11 21:42 ` [PATCH v5 03/11] drm/panfrost: Remove unnecessary header file include Adrián Larumbe
2026-08-12  8:00   ` Boris Brezillon
2026-08-11 21:42 ` [PATCH v5 04/11] drm/panfrost: Move shrinker initialization and unplug one level down Adrián Larumbe
2026-08-11 21:55   ` sashiko-bot
2026-08-12  8:07   ` Boris Brezillon
2026-08-11 21:42 ` [PATCH v5 05/11] drm/panfrost: Move all device power up and down into RPM callbacks Adrián Larumbe
2026-08-11 21:54   ` sashiko-bot
2026-08-12  9:07   ` Boris Brezillon
2026-08-11 21:42 ` [PATCH v5 06/11] drm/panfrost: Explicitly enable MMU interrupts at device init Adrián Larumbe
2026-08-11 21:54   ` sashiko-bot
2026-08-12  9:14   ` Boris Brezillon
2026-08-11 21:42 ` [PATCH v5 07/11] drm/panfrost: Add debugfs knob for manually triggering a GPU reset Adrián Larumbe
2026-08-11 21:54   ` sashiko-bot
2026-08-12  9:17   ` Boris Brezillon
2026-08-11 21:42 ` [PATCH v5 08/11] drm/panfrost: Move perfcnt GPU disable sequence into a helper Adrián Larumbe
2026-08-12  9:48   ` Boris Brezillon
2026-08-11 21:42 ` [PATCH v5 09/11] drm/panfrost: Introduce a reset lock Adrián Larumbe
2026-08-11 21:55   ` sashiko-bot
2026-08-12  9:44   ` Boris Brezillon
2026-08-12  9:45   ` Boris Brezillon
2026-08-11 21:42 ` [PATCH v5 10/11] drm/panfrost: Fix races between perfcnt and reset sequence Adrián Larumbe
2026-08-11 21:58   ` sashiko-bot
2026-08-12 10:06   ` Boris Brezillon
2026-08-11 21:42 ` [PATCH v5 11/11] drm/panfrost: Bump driver minor to reflect new DUMP IOCTL req field Adrián Larumbe
2026-08-11 21:55   ` sashiko-bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260811215715.BF9831F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=adrian.larumbe@collabora.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.