[Intel-gfx] [PATCH 2/2] drm/i915/fbc: Deactivate fbc when switching pipes
Chris Wilson
chris at chris-wilson.co.uk
Fri Oct 27 19:42:40 UTC 2017
If we are transfering an fb from one crtc to another, we will keep FBC
activated (due to only having a single pipe) but then we will call
intel_fbc_disable() from intel_atomic_commit_tail() on the old pipe
before enabling the new pipe. However, we insist that before disabling
FBC, it is deactivated.
Otherwise we generate warnings such as:
[ 346.741263] WARN_ON(fbc->active)
[ 346.741308] ------------[ cut here ]------------
[ 346.741387] WARNING: CPU: 3 PID: 4014 at drivers/gpu/drm/i915/intel_fbc.c:1176 __intel_fbc_disable+0xdf/0x110 [i915]
[ 346.741394] Modules linked in: vgem snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic i915 x86_pkg_temp_thermal intel_powerclamp coretemp snd_hda_intel crct10dif_pclmul snd_hda_codec crc32_pclmul snd_hwdep snd_hda_core ghash_clmulni_intel snd_pcm e1000e mei_me mei lpc_ich ptp pps_core prime_numbers i2c_hid
[ 346.741531] CPU: 3 PID: 4014 Comm: kms_frontbuffer Tainted: G U 4.14.0-rc6-CI-Patchwork_6242+ #1
[ 346.741537] Hardware name: /NUC5i7RYB, BIOS RYBDWi35.86A.0362.2017.0118.0940 01/18/2017
[ 346.741544] task: ffff880236502800 task.stack: ffffc90002874000
[ 346.741617] RIP: 0010:__intel_fbc_disable+0xdf/0x110 [i915]
[ 346.741624] RSP: 0018:ffffc900028779c0 EFLAGS: 00010282
[ 346.741635] RAX: 0000000000000014 RBX: ffff880240df0000 RCX: 0000000000000006
[ 346.741641] RDX: 000000000000136a RSI: ffffffff81d0e984 RDI: ffffffff81cc2576
[ 346.741647] RBP: ffffc900028779d0 R08: ffff880236503138 R09: 0000000000000000
[ 346.741653] R10: ffffc900028779d0 R11: 0000000000000000 R12: ffff880240dec138
[ 346.741659] R13: ffff880240df4960 R14: ffff880240df0000 R15: ffff880240dec138
[ 346.741666] FS: 00007fb237b2ca40(0000) GS:ffff880256d80000(0000) knlGS:0000000000000000
[ 346.741673] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 346.741679] CR2: 00007f9c1805b008 CR3: 0000000236b5f004 CR4: 00000000003606e0
[ 346.741685] Call Trace:
[ 346.741762] intel_fbc_disable+0x61/0x70 [i915]
[ 346.741837] intel_atomic_commit_tail+0x11c/0xbf0 [i915]
[ 346.741920] intel_atomic_commit+0x223/0x2d0 [i915]
[ 346.742046] drm_atomic_commit+0x4b/0x50
[ 346.742128] hsw_pipe_A_crc_wa+0x87/0x180 [i915]
[ 346.742226] get_new_crc_ctl_reg+0x13d/0x320 [i915]
[ 346.742304] intel_crtc_set_crc_source+0x7c/0x1d0 [i915]
[ 346.742329] crtc_crc_open+0xa2/0x2b0
[ 346.742346] ? rcu_read_lock_sched_held+0x7a/0x90
[ 346.742359] ? kmem_cache_alloc_trace+0x270/0x2d0
[ 346.742382] full_proxy_open+0xfd/0x1b0
[ 346.742401] ? u32_array_release+0x20/0x20
[ 346.742419] do_dentry_open.isra.1+0x1d3/0x2e0
[ 346.742440] vfs_open+0x47/0x70
[ 346.742458] path_openat+0x274/0x990
[ 346.742489] do_filp_open+0x8a/0xf0
[ 346.742530] ? _raw_spin_unlock+0x31/0x50
[ 346.742547] ? __alloc_fd+0xf8/0x210
[ 346.742573] do_sys_open+0x12f/0x200
[ 346.742588] ? do_sys_open+0x12f/0x200
[ 346.742615] SyS_openat+0x14/0x20
[ 346.742631] entry_SYSCALL_64_fastpath+0x1c/0xb1
[ 346.742643] RIP: 0033:0x7fb235d1d0fa
[ 346.742654] RSP: 002b:00007ffd72cd60a0 EFLAGS: 00000246 ORIG_RAX: 0000000000000101
[ 346.742675] RAX: ffffffffffffffda RBX: ffffffff81491ef3 RCX: 00007fb235d1d0fa
[ 346.742689] RDX: 0000000000000000 RSI: 00007ffd72cd6160 RDI: 0000000000000006
[ 346.742702] RBP: ffffc90002877f88 R08: 0000000000000000 R09: 000000000000000f
[ 346.742713] R10: 0000000000000000 R11: 0000000000000246 R12: 000055e1cbb31298
[ 346.742723] R13: 000055e1cb91aaca R14: 0000000000000001 R15: 000055e1cbce1450
[ 346.742744] ? __this_cpu_preempt_check+0x13/0x20
[ 346.742772] Code: 74 4a 2a a0 e8 b4 35 ed e0 0f ff 80 bb a2 4a 00 00 00 0f 84 6f ff ff ff 48 c7 c6 8e 4a 2a a0 48 c7 c7 74 4a 2a a0 e8 92 35 ed e0 <0f> ff 41 80 bc 24 e8 05 00 00 00 0f 84 5a ff ff ff 48 c7 c6 a3
[ 346.743496] ---[ end trace 5331a8d111243000 ]---
[ 346.746293] WARN_ON(fbc->active)
[ 346.746313] ------------[ cut here ]------------
[ 346.746351] WARNING: CPU: 3 PID: 4014 at drivers/gpu/drm/i915/intel_fbc.c:1144 intel_fbc_enable+0x4b6/0x560 [i915]
[ 346.746356] Modules linked in: vgem snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic i915 x86_pkg_temp_thermal intel_powerclamp coretemp snd_hda_intel crct10dif_pclmul snd_hda_codec crc32_pclmul snd_hwdep snd_hda_core ghash_clmulni_intel snd_pcm e1000e mei_me mei lpc_ich ptp pps_core prime_numbers i2c_hid
[ 346.746432] CPU: 3 PID: 4014 Comm: kms_frontbuffer Tainted: G U W 4.14.0-rc6-CI-Patchwork_6242+ #1
[ 346.746435] Hardware name: /NUC5i7RYB, BIOS RYBDWi35.86A.0362.2017.0118.0940 01/18/2017
[ 346.746438] task: ffff880236502800 task.stack: ffffc90002874000
[ 346.746474] RIP: 0010:intel_fbc_enable+0x4b6/0x560 [i915]
[ 346.746478] RSP: 0018:ffffc90002877950 EFLAGS: 00010282
[ 346.746485] RAX: 0000000000000014 RBX: ffff880240df0000 RCX: 0000000000000006
[ 346.746488] RDX: 000000000000136a RSI: ffffffff81d0e984 RDI: ffffffff81cc2576
[ 346.746491] RBP: ffffc900028779a0 R08: ffff880236503138 R09: 0000000000000000
[ 346.746494] R10: ffffc90002877940 R11: 0000000000000000 R12: ffff88024470c138
[ 346.746497] R13: ffff8802497fc6f8 R14: ffff88024470a548 R15: ffff880240df0000
[ 346.746501] FS: 00007fb237b2ca40(0000) GS:ffff880256d80000(0000) knlGS:0000000000000000
[ 346.746504] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 346.746507] CR2: 00007f9c1805b008 CR3: 0000000236b5f004 CR4: 00000000003606e0
[ 346.746511] Call Trace:
[ 346.746551] intel_update_crtc+0x67/0x90 [i915]
[ 346.746590] intel_update_crtcs+0x5d/0x70 [i915]
[ 346.746630] intel_atomic_commit_tail+0x286/0xbf0 [i915]
[ 346.746674] intel_atomic_commit+0x223/0x2d0 [i915]
[ 346.746684] drm_atomic_commit+0x4b/0x50
[ 346.746714] hsw_pipe_A_crc_wa+0x87/0x180 [i915]
[ 346.746750] get_new_crc_ctl_reg+0x13d/0x320 [i915]
[ 346.746782] intel_crtc_set_crc_source+0x7c/0x1d0 [i915]
[ 346.746789] crtc_crc_open+0xa2/0x2b0
[ 346.746795] ? rcu_read_lock_sched_held+0x7a/0x90
[ 346.746800] ? kmem_cache_alloc_trace+0x270/0x2d0
[ 346.746808] full_proxy_open+0xfd/0x1b0
[ 346.746814] ? u32_array_release+0x20/0x20
[ 346.746820] do_dentry_open.isra.1+0x1d3/0x2e0
[ 346.746827] vfs_open+0x47/0x70
[ 346.746833] path_openat+0x274/0x990
[ 346.746842] do_filp_open+0x8a/0xf0
[ 346.746854] ? _raw_spin_unlock+0x31/0x50
[ 346.746860] ? __alloc_fd+0xf8/0x210
[ 346.746869] do_sys_open+0x12f/0x200
[ 346.746874] ? do_sys_open+0x12f/0x200
[ 346.746917] SyS_openat+0x14/0x20
[ 346.746928] entry_SYSCALL_64_fastpath+0x1c/0xb1
[ 346.746935] RIP: 0033:0x7fb235d1d0fa
[ 346.746941] RSP: 002b:00007ffd72cd60a0 EFLAGS: 00000246 ORIG_RAX: 0000000000000101
[ 346.746955] RAX: ffffffffffffffda RBX: ffffffff81491ef3 RCX: 00007fb235d1d0fa
[ 346.746963] RDX: 0000000000000000 RSI: 00007ffd72cd6160 RDI: 0000000000000006
[ 346.746969] RBP: ffffc90002877f88 R08: 0000000000000000 R09: 000000000000000f
[ 346.746975] R10: 0000000000000000 R11: 0000000000000246 R12: 000055e1cbb31298
[ 346.746981] R13: 000055e1cb91aaca R14: 0000000000000001 R15: 000055e1cbce1450
[ 346.746993] ? __this_cpu_preempt_check+0x13/0x20
[ 346.747008] Code: c6 10 1c 2c a0 48 c7 c7 74 4a 2a a0 e8 75 1e ed e0 0f ff e9 e3 fb ff ff 48 c7 c6 8e 4a 2a a0 48 c7 c7 74 4a 2a a0 e8 5b 1e ed e0 <0f> ff e9 bb fb ff ff 49 8b 94 24 00 4a 00 00 41 03 94 24 10 62
[ 346.747357] ---[ end trace 5331a8d111243001 ]---
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102473
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Cc: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
Cc: Paulo Zanoni <paulo.r.zanoni at intel.com>
---
drivers/gpu/drm/i915/intel_fbc.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c
index f4c3a3b9a8e6..8a597165190d 100644
--- a/drivers/gpu/drm/i915/intel_fbc.c
+++ b/drivers/gpu/drm/i915/intel_fbc.c
@@ -927,14 +927,11 @@ void intel_fbc_pre_update(struct intel_crtc *crtc,
goto deactivate;
}
- if (fbc->crtc != crtc)
- goto unlock;
-
- intel_fbc_update_state_cache(crtc, crtc_state, plane_state);
+ if (fbc->crtc == crtc)
+ intel_fbc_update_state_cache(crtc, crtc_state, plane_state);
deactivate:
intel_fbc_deactivate(dev_priv);
-unlock:
mutex_unlock(&fbc->lock);
}
--
2.15.0.rc2
More information about the Intel-gfx
mailing list