[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <c00c6436-8abf-4b8d-a5a1-dfcab45b6f7d@igalia.com>
Date: Fri, 22 Nov 2024 08:59:41 -0300
From: Maíra Canal <mcanal@...lia.com>
To: Christian Gmeiner <christian.gmeiner@...il.com>,
Melissa Wen <mwen@...lia.com>,
Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
Maxime Ripard <mripard@...nel.org>, Thomas Zimmermann <tzimmermann@...e.de>,
David Airlie <airlied@...il.com>, Simona Vetter <simona@...ll.ch>,
"Juan A. Suarez Romero" <jasuarez@...lia.com>
Cc: kernel-dev@...lia.com, Christian Gmeiner <cgmeiner@...lia.com>,
stable@...r.kernel.org, dri-devel@...ts.freedesktop.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] drm/v3d: Stop active perfmon if it is being destroyed
Hi Christian,
On 18/11/24 19:19, Christian Gmeiner wrote:
> From: Christian Gmeiner <cgmeiner@...lia.com>
>
> If the active performance monitor (v3d->active_perfmon) is being
> destroyed, stop it first. Currently, the active perfmon is not
> stopped during destruction, leaving the v3d->active_perfmon pointer
> stale. This can lead to undefined behavior and instability.
>
> This patch ensures that the active perfmon is stopped before being
> destroyed, aligning with the behavior introduced in commit
> 7d1fd3638ee3 ("drm/v3d: Stop the active perfmon before being destroyed").
>
> Cc: stable@...r.kernel.org # v5.15+
> Fixes: 26a4dc29b74a ("drm/v3d: Expose performance counters to userspace")
> Signed-off-by: Christian Gmeiner <cgmeiner@...lia.com>
Applied to misc/kernel.git (drm-misc-next).
Maxime, Thomas, if possible, could you cherry-pick this commit to be
included in 6.13? Thanks!
Best Regards,
- Maíra
> ---
> drivers/gpu/drm/v3d/v3d_perfmon.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/drivers/gpu/drm/v3d/v3d_perfmon.c b/drivers/gpu/drm/v3d/v3d_perfmon.c
> index 00cd081d7873..909288d43f2f 100644
> --- a/drivers/gpu/drm/v3d/v3d_perfmon.c
> +++ b/drivers/gpu/drm/v3d/v3d_perfmon.c
> @@ -383,6 +383,7 @@ int v3d_perfmon_destroy_ioctl(struct drm_device *dev, void *data,
> {
> struct v3d_file_priv *v3d_priv = file_priv->driver_priv;
> struct drm_v3d_perfmon_destroy *req = data;
> + struct v3d_dev *v3d = v3d_priv->v3d;
> struct v3d_perfmon *perfmon;
>
> mutex_lock(&v3d_priv->perfmon.lock);
> @@ -392,6 +393,10 @@ int v3d_perfmon_destroy_ioctl(struct drm_device *dev, void *data,
> if (!perfmon)
> return -EINVAL;
>
> + /* If the active perfmon is being destroyed, stop it first */
> + if (perfmon == v3d->active_perfmon)
> + v3d_perfmon_stop(v3d, perfmon, false);
> +
> v3d_perfmon_put(perfmon);
>
> return 0;
Powered by blists - more mailing lists