Rob Herring
fe20d1cc95
drm/shmem: Do dma_unmap_sg before purging pages
Calling dma_unmap_sg() in drm_gem_shmem_free_object() is too late if the
backing pages have already been released by the shrinker. The result is
the following abort:
Unable to handle kernel paging request at virtual address ffff8000098ed000
Mem abort info:
ESR = 0x96000147
Exception class = DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
Data abort info:
ISV = 0, ISS = 0x00000147
CM = 1, WnR = 1
swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000002f51000
[ffff8000098ed000] pgd=00000000401f8003, pud=00000000401f7003, pmd=00000000401b1003, pte=00e80000098ed712
Internal error: Oops: 96000147 [#1] SMP
Modules linked in: panfrost gpu_sched
CPU: 5 PID: 902 Comm: gnome-shell Not tainted 5.3.0-rc1+ #95
Hardware name: 96boards Rock960 (DT)
pstate: 40000005 (nZcv daif -PAN -UAO)
pc : __dma_inv_area+0x40/0x58
lr : arch_sync_dma_for_cpu+0x28/0x30
sp : ffff00001321ba30
x29: ffff00001321ba30 x28: ffff00001321bd08
x27: 0000000000000000 x26: 0000000000000009
x25: 0000ffffc1f86170 x24: 0000000000000000
x23: 0000000000000000 x22: 0000000000000000
x21: 0000000000021000 x20: ffff80003bb2d810
x19: 00000000098ed000 x18: 0000000000000000
x17: 0000000000000000 x16: ffff800023fd9480
x15: 0000000000000000 x14: 0000000000000000
x13: 0000000000000000 x12: 0000000000000000
x11: 00000000fffb9fff x10: 0000000000000000
x9 : 0000000000000000 x8 : ffff800023fd9c18
x7 : 0000000000000000 x6 : 00000000ffffffff
x5 : 0000000000000000 x4 : 0000000000021000
Purging 5693440 bytes
x3 : 000000000000003f x2 : 0000000000000040
x1 : ffff80000990e000 x0 : ffff8000098ed000
Call trace:
__dma_inv_area+0x40/0x58
dma_direct_sync_single_for_cpu+0x7c/0x80
dma_direct_unmap_page+0x80/0x88
dma_direct_unmap_sg+0x54/0x80
drm_gem_shmem_free_object+0xfc/0x108
panfrost_gem_free_object+0x118/0x128 [panfrost]
drm_gem_object_free+0x18/0x90
drm_gem_object_put_unlocked+0x58/0x80
drm_gem_object_handle_put_unlocked+0x64/0xb0
drm_gem_object_release_handle+0x70/0x98
drm_gem_handle_delete+0x64/0xb0
drm_gem_close_ioctl+0x28/0x38
drm_ioctl_kernel+0xb8/0x110
drm_ioctl+0x244/0x3f0
do_vfs_ioctl+0xbc/0x910
ksys_ioctl+0x78/0xa8
__arm64_sys_ioctl+0x1c/0x28
el0_svc_common.constprop.0+0x88/0x150
el0_svc_handler+0x28/0x78
el0_svc+0x8/0xc
Code: 8a230000 54000060 d50b7e20 14000002 (d5087620)
Fixes: 17acb9f35e ("drm/shmem: Add madvise state and purge helpers")
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <maxime.ripard@bootlin.com>
Cc: Sean Paul <sean@poorly.run>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Reviewed-by: Steven Price <steven.price@arm.com>
Signed-off-by: Rob Herring <robh@kernel.org>
Acked-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190823021216.5862-5-robh@kernel.org
2019-08-28 10:02:39 -05:00
..
2019-08-03 07:02:01 -07:00
2019-07-12 12:24:03 -07:00
2019-07-24 11:02:28 +02:00
2019-07-31 08:51:17 -06:00
2019-07-15 11:06:27 -07:00
2019-07-09 12:34:26 -07:00
2019-07-28 10:26:10 -07:00
2019-07-31 08:51:56 -06:00
2019-07-31 13:17:33 -07:00
2019-07-19 17:13:56 -07:00
2019-08-05 00:55:00 +03:00
2019-07-22 15:04:54 -07:00
2019-07-10 11:05:26 +02:00
2019-07-21 13:31:14 -07:00
2019-07-11 15:36:02 -07:00
2019-07-23 09:49:10 +02:00
2019-07-18 09:49:30 +02:00
2019-07-19 12:23:37 -07:00
2019-07-19 10:42:02 -07:00
2019-07-17 09:55:43 -07:00
2019-08-20 13:49:15 +01:00
2019-06-27 10:24:47 -07:00
2019-07-25 20:09:37 -05:00
2019-07-26 09:43:43 -07:00
2019-07-24 11:29:41 +02:00
2019-07-29 00:57:39 +02:00
2019-08-28 10:02:39 -05:00
2019-07-15 09:42:32 -07:00
2019-07-18 17:08:07 -07:00
2019-07-21 19:18:45 -07:00
2019-06-29 21:08:14 -07:00
2019-07-12 14:42:05 -07:00
2019-08-01 22:24:16 +02:00
2019-07-09 09:04:31 -07:00
2019-07-09 12:34:26 -07:00
2019-07-12 12:24:03 -07:00
2019-08-01 12:53:53 -04:00
2019-07-20 12:22:30 -07:00
2019-07-29 11:34:12 -07:00
2019-07-11 15:38:21 -07:00
2019-08-01 20:21:00 +02:00
2019-07-15 11:10:31 -07:00
2019-07-09 08:59:39 -07:00
2019-07-31 21:44:45 +10:00
2019-07-14 16:36:51 -07:00
2019-07-30 18:59:24 -04:00
2019-07-22 09:01:47 -07:00
2019-07-20 09:34:55 -07:00
2019-07-11 18:11:21 -07:00
2019-07-11 15:14:01 -07:00
2019-07-15 20:18:40 -07:00
2019-08-01 14:05:17 +02:00
2019-07-22 15:31:00 +02:00
2019-08-04 16:37:08 -07:00
2019-07-27 11:04:18 -07:00
2019-07-02 12:00:50 -07:00
2019-07-21 09:46:59 -07:00
2019-07-27 08:25:51 -07:00
2019-07-23 17:47:02 +02:00
2019-07-12 12:24:03 -07:00
2019-07-17 11:26:09 -07:00
2019-07-15 20:44:49 -07:00
2019-07-04 22:01:59 -04:00
2019-07-09 12:34:26 -07:00
2019-07-21 09:46:59 -07:00
2019-07-09 12:34:26 -07:00
2019-07-29 11:43:48 +01:00
2019-07-01 15:04:59 +02:00
2019-07-13 15:02:27 -07:00
2019-07-29 18:24:59 +03:00
2019-07-15 11:03:02 -03:00
2019-07-15 21:06:15 -07:00
2019-07-22 11:23:00 +02:00
2019-07-16 19:23:24 -07:00
2019-07-09 08:57:45 -07:00
2019-07-17 08:58:04 -07:00
2019-07-15 20:18:40 -07:00
2019-07-17 11:44:41 -07:00
2019-07-19 17:13:56 -07:00
2019-07-17 10:03:50 -07:00
2019-08-02 15:13:27 -07:00
2019-08-02 14:46:33 -07:00
2019-07-22 13:51:20 -06:00
2019-07-05 08:15:08 +02:00
2019-07-12 12:24:03 -07:00
2019-06-25 08:05:34 +03:00
2019-07-16 12:21:41 -07:00
2019-07-22 17:04:20 -04:00
2019-07-23 09:36:07 +02:00
2019-07-12 12:24:03 -07:00
2019-07-28 10:18:33 -07:00
2019-07-25 11:26:42 +02:00
2019-07-17 11:23:13 -07:00
2019-07-26 07:49:29 -04:00
2019-08-19 15:52:29 +02:00
2019-07-19 10:42:02 -07:00
2019-07-15 11:03:02 -03:00
2019-07-15 08:49:11 +02:00
2019-08-02 15:26:48 -07:00