[PATCH] drm/v3d: Stop active perfmon if it is being destroyed
Maíra Canal
mcanal at igalia.com
Fri Nov 22 11:59:41 UTC 2024
Hi Christian,
On 18/11/24 19:19, Christian Gmeiner wrote:
> From: Christian Gmeiner <cgmeiner at igalia.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 at vger.kernel.org # v5.15+
> Fixes: 26a4dc29b74a ("drm/v3d: Expose performance counters to userspace")
> Signed-off-by: Christian Gmeiner <cgmeiner at igalia.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;
More information about the dri-devel
mailing list