All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steven Price <steven.price@arm.com>
To: Rob Herring <robh@kernel.org>, dri-devel@lists.freedesktop.org
Cc: Tomeu Vizoso <tomeu.vizoso@collabora.com>,
	Maxime Ripard <maxime.ripard@bootlin.com>,
	Robin Murphy <robin.murphy@arm.com>,
	David Airlie <airlied@linux.ie>,
	Boris Brezillon <boris.brezillon@collabora.com>,
	Sean Paul <sean@poorly.run>
Subject: Re: [PATCH 1/4] drm/shmem: Do dma_unmap_sg before purging pages
Date: Thu, 22 Aug 2019 14:27:06 +0100	[thread overview]
Message-ID: <fe8d2180-32e3-096f-cd74-968b91fd9504@arm.com> (raw)
In-Reply-To: <20190819161204.3106-2-robh@kernel.org>

On 19/08/2019 17:12, Rob Herring wrote:
> 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: 17acb9f35ed7 ("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>
> Signed-off-by: Rob Herring <robh@kernel.org>

Looks good to me:

Reviewed-by: Steven Price <steven.price@arm.com>

> ---
>  drivers/gpu/drm/drm_gem_shmem_helper.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c
> index df8f2c8adb2b..5423ec56b535 100644
> --- a/drivers/gpu/drm/drm_gem_shmem_helper.c
> +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c
> @@ -390,6 +390,12 @@ void drm_gem_shmem_purge_locked(struct drm_gem_object *obj)
>  
>  	WARN_ON(!drm_gem_shmem_is_purgeable(shmem));
>  
> +	dma_unmap_sg(obj->dev->dev, shmem->sgt->sgl,
> +		     shmem->sgt->nents, DMA_BIDIRECTIONAL);
> +	sg_free_table(shmem->sgt);
> +	kfree(shmem->sgt);
> +	shmem->sgt = NULL;
> +
>  	drm_gem_shmem_put_pages_locked(shmem);
>  
>  	shmem->madv = -1;
> 

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2019-08-22 13:27 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-19 16:12 [PATCH 0/4] panfrost: Locking fixes Rob Herring
2019-08-19 16:12 ` [PATCH 1/4] drm/shmem: Do dma_unmap_sg before purging pages Rob Herring
2019-08-22 13:27   ` Steven Price [this message]
2019-08-19 16:12 ` [PATCH 2/4] drm/shmem: Use mutex_trylock in drm_gem_shmem_purge Rob Herring
2019-08-20  9:05   ` Daniel Vetter
2019-08-20 12:35     ` Rob Herring
2019-08-21  8:23       ` Daniel Vetter
2019-08-21 16:03         ` Rob Herring
2019-08-21 16:32           ` Daniel Vetter
2019-08-22 13:28   ` Steven Price
2019-08-19 16:12 ` [PATCH 3/4] drm/panfrost: Fix shrinker lockdep issues using drm_gem_shmem_purge() Rob Herring
2019-08-22 13:23   ` Steven Price
2019-08-19 16:12 ` [PATCH 4/4] drm/panfrost: Fix sleeping while atomic in panfrost_gem_open Rob Herring
2019-08-22 14:58   ` Steven Price

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=fe8d2180-32e3-096f-cd74-968b91fd9504@arm.com \
    --to=steven.price@arm.com \
    --cc=airlied@linux.ie \
    --cc=boris.brezillon@collabora.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=maxime.ripard@bootlin.com \
    --cc=robh@kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=sean@poorly.run \
    --cc=tomeu.vizoso@collabora.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.