projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
a6c0077
)
drm/i915: Only mark the execobject as pinned on success
author
Chris Wilson
<
[email protected]
>
Fri, 21 Jul 2017 14:50:35 +0000
(15:50 +0100)
committer
Daniel Vetter
<
[email protected]
>
Thu, 27 Jul 2017 20:07:23 +0000
(22:07 +0200)
If we fail to acquire a fence (for old school fenced GPU access) then we
unwind the vma reservation, including its pin. However, we were making
the execobject as holding the pin before erring out, leading to a double
unpin:
[ 3193.991802] kernel BUG at drivers/gpu/drm/i915/i915_vma.h:287!
[ 3193.998131] invalid opcode: 0000 [#1] PREEMPT SMP
[ 3194.002816] Modules linked in: snd_hda_intel i915 vgem snd_hda_codec_analog snd_hda_codec_generic coretemp snd_hda_codec snd_hwdep snd_hda_core snd_pcm lpc_ich mei_me e1000e mei prime_numbers ptp pps_core [last unloaded: i915]
[ 3194.022841] CPU: 0 PID: 8123 Comm: kms_flip Tainted: G U 4.13.0-rc1-CI-CI_DRM_471+ #1
[ 3194.031765] Hardware name: Dell Inc. OptiPlex 755 /0PU052, BIOS A04 11/05/2007
[ 3194.040343] task:
ffff8800785d4c40
task.stack:
ffffc90001768000
[ 3194.046339] RIP: 0010:eb_release_vmas.isra.6+0x119/0x180 [i915]
[ 3194.052234] RSP: 0018:
ffffc9000176ba80
EFLAGS:
00010246
[ 3194.057439] RAX:
00000000000003c0
RBX:
ffff8800710fc2d8
RCX:
ffff8800588e4f48
[ 3194.064546] RDX:
ffffffff1fffffff
RSI:
00000000ffffffff
RDI:
ffff8800588e00d0
[ 3194.071654] RBP:
ffffc9000176bab0
R08:
0000000000000000
R09:
0000000000000000
[ 3194.078761] R10:
0000000000000040
R11:
0000000000000001
R12:
ffff880060822f00
[ 3194.085867] R13:
0000000000000310
R14:
00000000000003b8
R15:
ffffc9000176bbb0
[ 3194.092975] FS:
00007fd2b94aba40
(0000) GS:
ffff88007d200000
(0000) knlGS:
0000000000000000
[ 3194.101033] CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
[ 3194.106754] CR2:
00007ffbec3ff000
CR3:
0000000074e67000
CR4:
00000000000006f0
[ 3194.113861] Call Trace:
[ 3194.116321] eb_relocate_slow+0x67/0x4e0 [i915]
[ 3194.120861] i915_gem_do_execbuffer+0x429/0x1260 [i915]
[ 3194.126070] ? lock_acquire+0xb5/0x210
[ 3194.129803] ? __might_fault+0x39/0x90
[ 3194.133563] i915_gem_execbuffer2+0x9b/0x1b0 [i915]
[ 3194.138447] ? i915_gem_execbuffer+0x2b0/0x2b0 [i915]
[ 3194.143478] drm_ioctl_kernel+0x64/0xb0
[ 3194.147298] drm_ioctl+0x2cd/0x390
[ 3194.150710] ? i915_gem_execbuffer+0x2b0/0x2b0 [i915]
[ 3194.155741] ? finish_task_switch+0xa5/0x210
[ 3194.159993] ? finish_task_switch+0x6a/0x210
[ 3194.164247] do_vfs_ioctl+0x90/0x670
[ 3194.167806] ? entry_SYSCALL_64_fastpath+0x5/0xb1
[ 3194.172492] ? __this_cpu_preempt_check+0x13/0x20
[ 3194.177176] ? trace_hardirqs_on_caller+0xe7/0x1c0
[ 3194.181946] SyS_ioctl+0x3c/0x70
[ 3194.185159] entry_SYSCALL_64_fastpath+0x1c/0xb1
[ 3194.189756] RIP: 0033:0x7fd2b76a8587
[ 3194.193314] RSP: 002b:
00007fff074845b8
EFLAGS:
00000246
ORIG_RAX:
0000000000000010
[ 3194.200855] RAX:
ffffffffffffffda
RBX:
ffffffff8146da43
RCX:
00007fd2b76a8587
[ 3194.207962] RDX:
00007fff074846e0
RSI:
0000000040406469
RDI:
0000000000000003
[ 3194.215068] RBP:
ffffc9000176bf88
R08:
0000000000000000
R09:
0000000000000003
[ 3194.222175] R10:
00007fd2b796bb58
R11:
0000000000000246
R12:
00007fff07484880
[ 3194.229280] R13:
0000000000000003
R14:
0000000040406469
R15:
0000000000000000
[ 3194.236386] ? __this_cpu_preempt_check+0x13/0x20
[ 3194.241070] Code: 24 b0 00 00 00 48 85 c9 0f 84 6c ff ff ff 8b 41 20 85 c0 7e 73 83 e8 01 89 41 20 41 8b 84 24 e8 00 00 00 a8 0f 0f 85 5f ff ff ff <0f> 0b 48 83 c4 08 5b 41 5c 41 5d 41 5e 41 5f 5d f3 c3 49 8b 84
[ 3194.259943] RIP: eb_release_vmas.isra.6+0x119/0x180 [i915] RSP:
ffffc9000176ba80
[ 3194.268047] ---[ end trace
1d7348c6575d8800
]---
[ 3673.658819] softdog: Initiating panic
[ 3673.662471] Kernel panic - not syncing: Software Watchdog Timer expired
[ 3673.669066] Kernel Offset: disabled
[ 3673.672541] Rebooting in 1 seconds..
Reported-by: Tomi Sarvela <
[email protected]
>
Fixes: 2889caa92321 ("drm/i915: Eliminate lots of iterations over the execobjects array")
Signed-off-by: Chris Wilson <
[email protected]
>
Cc: Joonas Lahtinen <
[email protected]
>
Link:
https://patchwork.freedesktop.org/patch/msgid/
[email protected]
Reviewed-by: Joonas Lahtinen <
[email protected]
>
Signed-off-by: Daniel Vetter <
[email protected]
>
(cherry picked from commit
1da7b54c46bcfe5484af0b27d8c9003b238031b0
)
Signed-off-by: Daniel Vetter <
[email protected]
>
drivers/gpu/drm/i915/i915_gem_execbuffer.c
patch
|
blob
|
history
diff --git
a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index 8d6a783b06ba635b93b1d1a054b333b2a974c5ce..8125bb1c745e8de8b8a5b11e3ebbf5c42b2d8ee9 100644
(file)
--- a/
drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/
drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@
-560,9
+560,6
@@
static int eb_reserve_vma(const struct i915_execbuffer *eb,
eb->args->flags |= __EXEC_HAS_RELOC;
}
- entry->flags |= __EXEC_OBJECT_HAS_PIN;
- GEM_BUG_ON(eb_vma_misplaced(entry, vma));
-
if (unlikely(entry->flags & EXEC_OBJECT_NEEDS_FENCE)) {
err = i915_vma_get_fence(vma);
if (unlikely(err)) {
@@
-574,6
+571,9
@@
static int eb_reserve_vma(const struct i915_execbuffer *eb,
entry->flags |= __EXEC_OBJECT_HAS_FENCE;
}
+ entry->flags |= __EXEC_OBJECT_HAS_PIN;
+ GEM_BUG_ON(eb_vma_misplaced(entry, vma));
+
return 0;
}