projects
/
GitHub
/
moto-9609
/
android_kernel_motorola_exynos9610.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
4c4c565
)
drm/i915: Short-circuit i915_gem_wait_for_idle() if already idle
author
Chris Wilson
<chris@chris-wilson.co.uk>
Tue, 30 May 2017 12:13:32 +0000
(13:13 +0100)
committer
Jani Nikula
<jani.nikula@intel.com>
Wed, 7 Jun 2017 13:30:54 +0000
(16:30 +0300)
If the device is asleep (no GT wakeref), we know the GPU is already idle.
If we add an early return, we can avoid touching registers and checking
hw state outside of the assumed GT wakelock. This prevents causing such
errors whilst debugging:
[ 2613.401647] RPM wakelock ref not held during HW access
[ 2613.401684] ------------[ cut here ]------------
[ 2613.401720] WARNING: CPU: 5 PID: 7739 at drivers/gpu/drm/i915/intel_drv.h:1787 gen6_read32+0x21f/0x2b0 [i915]
[ 2613.401731] Modules linked in: snd_hda_intel i915 vgem snd_hda_codec_hdmi x86_pkg_temp_thermal intel_powerclamp snd_hda_codec_realtek coretemp snd_hda_codec_generic crct10dif_pclmul crc32_pclmul ghash_clmulni_intel snd_hda_codec snd_hwdep snd_hda_core snd_pcm r8169 mii mei_me lpc_ich mei prime_numbers [last unloaded: i915]
[ 2613.401823] CPU: 5 PID: 7739 Comm: drv_missed_irq Tainted: G U 4.12.0-rc2-CI-CI_DRM_421+ #1
[ 2613.401825] Hardware name: MSI MS-7924/Z97M-G43(MS-7924), BIOS V1.12 02/15/2016
[ 2613.401840] task:
ffff880409e3a740
task.stack:
ffffc900084dc000
[ 2613.401861] RIP: 0010:gen6_read32+0x21f/0x2b0 [i915]
[ 2613.401863] RSP: 0018:
ffffc900084dfce8
EFLAGS:
00010292
[ 2613.401869] RAX:
000000000000002a
RBX:
ffff8804016a8000
RCX:
0000000000000006
[ 2613.401871] RDX:
0000000000000006
RSI:
ffffffff81cbf2d9
RDI:
ffffffff81c9e3a7
[ 2613.401874] RBP:
ffffc900084dfd18
R08:
ffff880409e3afc8
R09:
0000000000000000
[ 2613.401877] R10:
000000008a1c483f
R11:
0000000000000000
R12:
000000000000209c
[ 2613.401879] R13:
0000000000000001
R14:
ffff8804016a8000
R15:
ffff8804016ac150
[ 2613.401882] FS:
00007f39ef3dd8c0
(0000) GS:
ffff88041fb40000
(0000) knlGS:
0000000000000000
[ 2613.401885] CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
[ 2613.401887] CR2:
00000000023717c8
CR3:
00000002e7b34000
CR4:
00000000001406e0
[ 2613.401889] Call Trace:
[ 2613.401912] intel_engine_is_idle+0x76/0x90 [i915]
[ 2613.401931] i915_gem_wait_for_idle+0xe6/0x1e0 [i915]
[ 2613.401951] fault_irq_set+0x40/0x90 [i915]
[ 2613.401970] i915_ring_test_irq_set+0x42/0x50 [i915]
[ 2613.401976] simple_attr_write+0xc7/0xe0
[ 2613.401981] full_proxy_write+0x4f/0x70
[ 2613.401987] __vfs_write+0x23/0x120
[ 2613.401992] ? rcu_read_lock_sched_held+0x75/0x80
[ 2613.401996] ? rcu_sync_lockdep_assert+0x2a/0x50
[ 2613.401999] ? __sb_start_write+0xfa/0x1f0
[ 2613.402004] vfs_write+0xc5/0x1d0
[ 2613.402008] ? trace_hardirqs_on_caller+0xe7/0x1c0
[ 2613.402013] SyS_write+0x44/0xb0
[ 2613.402020] entry_SYSCALL_64_fastpath+0x1c/0xb1
[ 2613.402022] RIP: 0033:0x7f39eded6670
[ 2613.402025] RSP: 002b:
00007fffdcdcb1a8
EFLAGS:
00000246
ORIG_RAX:
0000000000000001
[ 2613.402030] RAX:
ffffffffffffffda
RBX:
ffffffff81470203
RCX:
00007f39eded6670
[ 2613.402033] RDX:
0000000000000001
RSI:
000000000041bc33
RDI:
0000000000000006
[ 2613.402036] RBP:
ffffc900084dff88
R08:
00007f39ef3dd8c0
R09:
0000000000000001
[ 2613.402038] R10:
0000000000000000
R11:
0000000000000246
R12:
000000000041bc33
[ 2613.402041] R13:
0000000000000006
R14:
0000000000000000
R15:
0000000000000000
[ 2613.402046] ? __this_cpu_preempt_check+0x13/0x20
[ 2613.402052] Code: 01 9b fa e0 0f ff e9 28 fe ff ff 80 3d 6a dd 0e 00 00 0f 85 29 fe ff ff 48 c7 c7 48 19 29 a0 c6 05 56 dd 0e 00 01 e8 da 9a fa e0 <0f> ff e9 0f fe ff ff b9 01 00 00 00 ba 01 00 00 00 44 89 e6 48
[ 2613.402199] ---[ end trace
31f0cfa93ab632bf
]---
Fixes:
25112b64b3d2
("drm/i915: Wait for all engines to be idle as part of i915_gem_wait_for_idle()")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link:
http://patchwork.freedesktop.org/patch/msgid/20170530121334.17364-1-chris@chris-wilson.co.uk
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
(cherry picked from commit
863e9fde1a7061dad09bb299c65bed5f1ccb44ff
)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/i915_gem.c
patch
|
blob
|
blame
|
history
diff --git
a/drivers/gpu/drm/i915/i915_gem.c
b/drivers/gpu/drm/i915/i915_gem.c
index b6ac3df18b582534b118ab44aae1dbfe9f75186e..462031cbd77f714b23a3b7645039c0d8dba71f40 100644
(file)
--- a/
drivers/gpu/drm/i915/i915_gem.c
+++ b/
drivers/gpu/drm/i915/i915_gem.c
@@
-3298,6
+3298,10
@@
int i915_gem_wait_for_idle(struct drm_i915_private *i915, unsigned int flags)
{
int ret;
+ /* If the device is asleep, we have no requests outstanding */
+ if (!READ_ONCE(i915->gt.awake))
+ return 0;
+
if (flags & I915_WAIT_LOCKED) {
struct i915_gem_timeline *tl;