OSDN Git Service
(root)
/
uclinux-h8
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
ab9e2f7
)
drm/i915/gtt: Mark the freed page table entries with scratch
author
Chris Wilson
<chris@chris-wilson.co.uk>
Thu, 4 Jul 2019 20:16:56 +0000
(21:16 +0100)
committer
Chris Wilson
<chris@chris-wilson.co.uk>
Thu, 4 Jul 2019 21:26:31 +0000
(22:26 +0100)
On unwinding the allocation error path and having freed the page table
entry, it is imperative that we mark it as scratch.
<4> [416.075569] general protection fault: 0000 [#1] PREEMPT SMP PTI
<4> [416.075801] CPU: 0 PID: 2385 Comm: kworker/u2:11 Tainted: G U 5.2.0-rc7-CI-Patchwork_13534+ #1
<4> [416.076162] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
rel-1.10.1-0-g8891697
-prebuilt.qemu-project.org 04/01/2014
<4> [416.076522] Workqueue: i915 __i915_vm_release [i915]
<4> [416.076754] RIP: 0010:gen8_ppgtt_cleanup_3lvl+0x58/0xb0 [i915]
<4> [416.077023] Code: 81 e2 04 fe ff ff 81 c2 ff 01 00 00 4c 8d 74 d6 58 4d 8b 65 00 4d 3b a7 28 02 00 00 74 40 49 8d 5c 24 50 49 81 c4 50 10 00 00 <48> 8b 2b 49 3b af 20 02 00 00 74 13 4c 89 ff 48 89 ee e8 01 fb ff
<4> [416.077445] RSP: 0018:
ffffc9000046bd98
EFLAGS:
00010206
<4> [416.077625] RAX:
0001000000000000
RBX:
6b6b6b6b6b6b6bbb
RCX:
8b4b56d500000000
<4> [416.077838] RDX:
00000000000001ff
RSI:
ffff88805a578008
RDI:
ffff88805bd0efc8
<4> [416.078167] RBP:
ffff88805bd0efc8
R08:
0000000004e42b93
R09:
0000000000000001
<4> [416.078381] R10:
0000000000000000
R11:
ffff888077a1b0b8
R12:
6b6b6b6b6b6b7bbb
<4> [416.078594] R13:
ffff88805a578058
R14:
ffff88805a579058
R15:
ffff88805bd0efc8
<4> [416.078815] FS:
0000000000000000
(0000) GS:
ffff88807da00000
(0000) knlGS:
0000000000000000
<4> [416.079395] CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
<4> [416.079851] CR2:
000056160fec2b14
CR3:
0000000071bbc003
CR4:
00000000003606f0
<4> [416.080388] Call Trace:
<4> [416.080828] gen8_ppgtt_cleanup+0x64/0x100 [i915]
<4> [416.081399] __i915_vm_release+0xfc/0x1d0 [i915]
Fixes:
1d1b5490b91c
("drm/i915/gtt: Replace struct_mutex serialisation for allocation")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link:
https://patchwork.freedesktop.org/patch/msgid/20190704201656.15775-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_gem_gtt.c
patch
|
blob
|
history
diff --git
a/drivers/gpu/drm/i915/i915_gem_gtt.c
b/drivers/gpu/drm/i915/i915_gem_gtt.c
index
9756f1b
..
57db2d7
100644
(file)
--- a/
drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/
drivers/gpu/drm/i915/i915_gem_gtt.c
@@
-1491,6
+1491,7
@@
unwind_pd:
spin_lock(&pdp->lock);
if (atomic_dec_and_test(&pd->used)) {
gen8_ppgtt_set_pdpe(pdp, vm->scratch_pd, pdpe);
+ pdp->entry[pdpe] = vm->scratch_pd;
GEM_BUG_ON(!atomic_read(&pdp->used));
atomic_dec(&pdp->used);
GEM_BUG_ON(alloc);
@@
-1567,6
+1568,7
@@
unwind_pdp:
spin_lock(&pml4->lock);
if (atomic_dec_and_test(&pdp->used)) {
gen8_ppgtt_set_pml4e(pml4, vm->scratch_pdp, pml4e);
+ pml4->entry[pml4e] = vm->scratch_pdp;
GEM_BUG_ON(alloc);
alloc = pdp; /* defer the free until after the lock */
}