[PATCH 4/4] drm/i915/vma: Debug "ref_tracker: reference already released"
Janusz Krzysztofik
janusz.krzysztofik at linux.intel.com
Tue Jan 30 10:52:41 UTC 2024
<3> [153.525501] ref_tracker: reference already released.
<3> [153.525716] ref_tracker: allocated in:
<4> [153.525743] __i915_vma_active+0xe1/0x130 [i915]
<4> [153.525853] i915_active_acquire+0x5c/0xa0 [i915]
<4> [153.525943] i915_active_add_request+0x34/0x210 [i915]
<4> [153.526031] _i915_vma_move_to_active+0x267/0x820 [i915]
<4> [153.526133] eb_submit+0x2e2/0x820 [i915]
<4> [153.526220] i915_gem_do_execbuffer+0x1a86/0x26b0 [i915]
<4> [153.526307] i915_gem_execbuffer2_ioctl+0x123/0x2a0 [i915]
<4> [153.526393] drm_ioctl_kernel+0xa8/0x100
<4> [153.526395] drm_ioctl+0x223/0x430
<4> [153.526397] __x64_sys_ioctl+0x79/0xb0
<4> [153.526399] do_syscall_64+0x6f/0x140
<4> [153.526402] entry_SYSCALL_64_after_hwframe+0x6e/0x76
<3> [153.526405] ref_tracker: freed in:
<4> [153.526417] __i915_vma_retire+0x95/0xf0 [i915]
<4> [153.526517] __active_retire+0x10c/0x350 [i915]
<4> [153.526610] dma_fence_signal_timestamp_locked+0x9e/0x160
<4> [153.526613] i915_request_retire.part.0+0x441/0x600 [i915]
<4> [153.526707] retire_requests+0x51/0x80 [i915]
<4> [153.526786] engine_retire+0x6a/0x100 [i915]
<4> [153.526861] process_scheduled_works+0x2db/0x530
<4> [153.526864] worker_thread+0x18c/0x350
<4> [153.526865] kthread+0xfe/0x130
<4> [153.526868] ret_from_fork+0x2c/0x50
<4> [153.526870] ret_from_fork_asm+0x1b/0x30
<4> [153.526880] ------------[ cut here ]------------
<4> [153.526915] WARNING: CPU: 8 PID: 375 at lib/ref_tracker.c:255 ref_tracker_free+0x1af/0x210
<4> [153.526918] Modules linked in: snd_hda_intel vgem drm_shmem_helper snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic snd_intel_dspcfg snd_hda_codec snd_hwdep snd_hda_core snd_pcm i915 prime_numbers i2c_algo_bit ttm drm_display_helper drm_buddy fuse x86_pkg_temp_thermal coretemp kvm_intel kvm smsc75xx mei_pxp mei_hdcp usbnet wmi_bmof mii video irqbypass igc crct10dif_pclmul crc32_pclmul ghash_clmulni_intel ptp mei_me pps_core i2c_i801 mei i2c_smbus wmi [last unloaded: snd_hda_intel]
<4> [153.526954] CPU: 8 PID: 375 Comm: kworker/8:2 Not tainted 6.8.0-rc1-Patchwork_129026v1-g7f85c565ce86+ #1
<4> [153.526956] Hardware name: Micro-Star International Co., Ltd. MS-7D25/PRO Z690-A DDR4(MS-7D25), BIOS 1.10 12/13/2021
<4> [153.526958] Workqueue: i915-unordered engine_retire [i915]
<4> [153.527037] RIP: 0010:ref_tracker_free+0x1af/0x210
<4> [153.527040] Code: e9 6b ff ff ff 48 c7 c7 b0 65 49 82 e8 da bd a6 ff 8b 53 14 85 d2 75 52 8b 43 18 85 c0 75 35 4c 89 e6 48 89 ef e8 01 aa 60 00 <0f> 0b b8 ea ff ff ff e9 3a ff ff ff 48 8d 7d 44 ba ff ff ff ff f0
<4> [153.527042] RSP: 0018:ffffc90005bc3c58 EFLAGS: 00010082
<4> [153.527044] RAX: 0000000080000001 RBX: ffff888111d8fa20 RCX: 0000000000000000
<4> [153.527045] RDX: 0000000000000002 RSI: ffffffff823f8d3c RDI: 00000000ffffffff
<4> [153.527047] RBP: ffff8882465d9790 R08: 00000000f3ce87bd R09: ffffc90005bc3ad0
<4> [153.527048] R10: 0000000000000001 R11: 00000000000db1d0 R12: 0000000000000092
<4> [153.527050] R13: 00000000026403cf R14: ffff888119f13e05 R15: ffff88811d023850
<4> [153.527051] FS: 0000000000000000(0000) GS:ffff88888f200000(0000) knlGS:0000000000000000
<4> [153.527053] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
<4> [153.527054] CR2: 00007f7837292000 CR3: 000000011da46000 CR4: 0000000000f50ef0
<4> [153.527055] PKRU: 55555554
<4> [153.527057] Call Trace:
<4> [153.527058] <TASK>
<4> [153.527059] ? __warn+0x7f/0x170
<4> [153.527063] ? ref_tracker_free+0x1af/0x210
<4> [153.527065] ? report_bug+0x1f8/0x200
<4> [153.527070] ? handle_bug+0x3c/0x70
<4> [153.527074] ? exc_invalid_op+0x18/0x70
<4> [153.527076] ? asm_exc_invalid_op+0x1a/0x20
<4> [153.527082] ? ref_tracker_free+0x1af/0x210
<4> [153.527084] ? ref_tracker_free+0x1af/0x210
<4> [153.527086] ? __i915_vma_retire+0x95/0xf0 [i915]
<4> [153.527187] ? __active_retire+0x10c/0x350 [i915]
<4> [153.527280] ? dma_fence_signal_timestamp_locked+0x9e/0x160
<4> [153.527282] ? i915_request_retire.part.0+0x441/0x600 [i915]
<4> [153.527377] ? retire_requests+0x51/0x80 [i915]
<4> [153.527455] ? engine_retire+0x6a/0x100 [i915]
<4> [153.527531] ? process_scheduled_works+0x2db/0x530
<4> [153.527533] ? worker_thread+0x18c/0x350
<4> [153.527535] ? kthread+0xfe/0x130
<4> [153.527537] ? ret_from_fork+0x2c/0x50
<4> [153.527539] ? ret_from_fork_asm+0x1b/0x30
<4> [153.527543] __i915_vma_retire+0x95/0xf0 [i915]
<4> [153.527643] __active_retire+0x10c/0x350 [i915]
<4> [153.527738] dma_fence_signal_timestamp_locked+0x9e/0x160
<4> [153.527741] i915_request_retire.part.0+0x441/0x600 [i915]
<4> [153.527837] retire_requests+0x51/0x80 [i915]
<4> [153.527916] engine_retire+0x6a/0x100 [i915]
<4> [153.527992] ? process_scheduled_works+0x264/0x530
<4> [153.527995] process_scheduled_works+0x2db/0x530
<4> [153.528000] ? __pfx_worker_thread+0x10/0x10
<4> [153.528002] worker_thread+0x18c/0x350
<4> [153.528004] ? __pfx_worker_thread+0x10/0x10
<4> [153.528006] kthread+0xfe/0x130
<4> [153.528008] ? __pfx_kthread+0x10/0x10
<4> [153.528011] ret_from_fork+0x2c/0x50
<4> [153.528012] ? __pfx_kthread+0x10/0x10
<4> [153.528014] ret_from_fork_asm+0x1b/0x30
<4> [153.528021] </TASK>
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik at linux.intel.com>
---
drivers/gpu/drm/i915/i915_vma.c | 12 ++++++++++--
drivers/gpu/drm/i915/intel_wakeref.h | 4 +++-
2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
index 09b8a6b52d065..aa41e6e1642dd 100644
--- a/drivers/gpu/drm/i915/i915_vma.c
+++ b/drivers/gpu/drm/i915/i915_vma.c
@@ -109,9 +109,13 @@ static int __i915_vma_active(struct i915_active *ref)
if (!i915_vma_tryget(vma))
return -ENOENT;
- if (!i915_vma_is_ggtt(vma))
+ if (!i915_vma_is_ggtt(vma)) {
vma->wakeref = intel_gt_pm_get(vma->vm->gt);
+ GEM_TRACE("vma:@%px, vma->active.count:@%d, vma->wakeref:%lu\n",
+ vma, atomic_read(&vma->active.count), vma->wakeref);
+ }
+
return 0;
}
@@ -119,8 +123,12 @@ static void __i915_vma_retire(struct i915_active *ref)
{
struct i915_vma *vma = active_to_vma(ref);
- if (!i915_vma_is_ggtt(vma))
+ if (!i915_vma_is_ggtt(vma)) {
+ GEM_TRACE("vma:@%px, vma->active.count:@%d, vma->wakeref:%lu\n",
+ vma, atomic_read(&vma->active.count), vma->wakeref);
+
intel_gt_pm_put_async(vma->vm->gt, vma->wakeref);
+ }
i915_vma_put(vma);
}
diff --git a/drivers/gpu/drm/i915/intel_wakeref.h b/drivers/gpu/drm/i915/intel_wakeref.h
index 68aa3be482515..9f7802c38103b 100644
--- a/drivers/gpu/drm/i915/intel_wakeref.h
+++ b/drivers/gpu/drm/i915/intel_wakeref.h
@@ -21,6 +21,8 @@
#include <linux/timer.h>
#include <linux/workqueue.h>
+#include "i915_gem.h"
+
typedef unsigned long intel_wakeref_t;
#define INTEL_REFTRACK_DEAD_COUNT 16
@@ -291,7 +293,7 @@ static inline void intel_ref_tracker_free(struct ref_tracker_dir *dir,
user = (handle == INTEL_WAKEREF_DEF) ? NULL : (void *)handle;
- ref_tracker_free(dir, &user);
+ GEM_BUG_ON(ref_tracker_free(dir, &user) == -EINVAL);
}
void intel_ref_tracker_show(struct ref_tracker_dir *dir,
--
2.43.0
More information about the Intel-gfx-trybot
mailing list