diff options
| author | Ingo Molnar <mingo@kernel.org> | 2024-10-21 08:14:15 +0200 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2024-10-21 08:14:15 +0200 |
| commit | d1fb8a78b2ff1fe4e9478c75b4fbec588a73c1b0 (patch) | |
| tree | 1cf2e78b8e7be71a47c8b978dea915533e965cbe /drivers/gpu/drm/v3d/v3d_perfmon.c | |
| parent | af0c8b2bf67b25756f27644936e74fd9a6273bd2 (diff) | |
| parent | 42f7652d3eb527d03665b09edac47f85fb600924 (diff) | |
| download | linux-d1fb8a78b2ff1fe4e9478c75b4fbec588a73c1b0.tar.gz linux-d1fb8a78b2ff1fe4e9478c75b4fbec588a73c1b0.tar.bz2 linux-d1fb8a78b2ff1fe4e9478c75b4fbec588a73c1b0.zip | |
Merge tag 'v6.12-rc4' into sched/core, to resolve conflict
Overlapping fixes solving the same bug slightly differently:
7266f0a6d3bb fs/bcachefs: Fix __wait_on_freeing_inode() definition of waitqueue entry
3b80552e7057 bcachefs: __wait_for_freeing_inode: Switch to wait_bit_queue_entry
Use the upstream version.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/gpu/drm/v3d/v3d_perfmon.c')
| -rw-r--r-- | drivers/gpu/drm/v3d/v3d_perfmon.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/gpu/drm/v3d/v3d_perfmon.c b/drivers/gpu/drm/v3d/v3d_perfmon.c index cd7f1eedf17f..00cd081d7873 100644 --- a/drivers/gpu/drm/v3d/v3d_perfmon.c +++ b/drivers/gpu/drm/v3d/v3d_perfmon.c @@ -306,6 +306,11 @@ void v3d_perfmon_open_file(struct v3d_file_priv *v3d_priv) static int v3d_perfmon_idr_del(int id, void *elem, void *data) { struct v3d_perfmon *perfmon = elem; + struct v3d_dev *v3d = (struct v3d_dev *)data; + + /* 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); @@ -314,8 +319,10 @@ static int v3d_perfmon_idr_del(int id, void *elem, void *data) void v3d_perfmon_close_file(struct v3d_file_priv *v3d_priv) { + struct v3d_dev *v3d = v3d_priv->v3d; + mutex_lock(&v3d_priv->perfmon.lock); - idr_for_each(&v3d_priv->perfmon.idr, v3d_perfmon_idr_del, NULL); + idr_for_each(&v3d_priv->perfmon.idr, v3d_perfmon_idr_del, v3d); idr_destroy(&v3d_priv->perfmon.idr); mutex_unlock(&v3d_priv->perfmon.lock); mutex_destroy(&v3d_priv->perfmon.lock); |
