[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