From: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
To: Rob Herring <robh@kernel.org>
Cc: Tomeu Vizoso <tomeu.vizoso@collabora.com>,
Maxime Ripard <maxime.ripard@bootlin.com>,
Robin Murphy <robin.murphy@arm.com>,
dri-devel@lists.freedesktop.org,
Steven Price <steven.price@arm.com>,
David Airlie <airlied@linux.ie>,
Boris Brezillon <boris.brezillon@collabora.com>,
Sean Paul <sean@poorly.run>
Subject: Re: [PATCH v4 3/9] drm/panfrost: Restructure the GEM object creation
Date: Fri, 9 Aug 2019 14:38:19 -0700 [thread overview]
Message-ID: <20190809213819.GA15496@kevin> (raw)
In-Reply-To: <20190808222200.13176-4-robh@kernel.org>
[-- Attachment #1.1: Type: text/plain, Size: 5853 bytes --]
Still A-b :)
On Thu, Aug 08, 2019 at 04:21:54PM -0600, Rob Herring wrote:
> Setting the GPU VA when creating the GEM object doesn't allow for any
> conditional adjustments to the mapping. In preparation to support
> adjusting the mapping and per FD address spaces, restructure the GEM
> object creation to map and unmap the GEM object in the GEM object .open()
> and .close() hooks.
>
> While panfrost_gem_free_object() and panfrost_gem_prime_import_sg_table()
> are not really needed after this commit, keep them as we'll need them in
> subsequent commits.
>
> Cc: Tomeu Vizoso <tomeu.vizoso@collabora.com>
> Cc: Boris Brezillon <boris.brezillon@collabora.com>
> Cc: Robin Murphy <robin.murphy@arm.com>
> Reviewed-by: Steven Price <steven.price@arm.com>
> Acked-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---
> Steven, Alyssa, I kept your tags, but please take another look as things
> moved around a bit here.
>
> drivers/gpu/drm/panfrost/panfrost_drv.c | 9 ----
> drivers/gpu/drm/panfrost/panfrost_gem.c | 67 ++++++++++++++-----------
> 2 files changed, 37 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
> index 926d021ee202..2894cfbbce2b 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
> @@ -78,7 +78,6 @@ static int panfrost_ioctl_get_param(struct drm_device *ddev, void *data, struct
> static int panfrost_ioctl_create_bo(struct drm_device *dev, void *data,
> struct drm_file *file)
> {
> - int ret;
> struct drm_gem_shmem_object *shmem;
> struct drm_panfrost_create_bo *args = data;
>
> @@ -90,17 +89,9 @@ static int panfrost_ioctl_create_bo(struct drm_device *dev, void *data,
> if (IS_ERR(shmem))
> return PTR_ERR(shmem);
>
> - ret = panfrost_mmu_map(to_panfrost_bo(&shmem->base));
> - if (ret)
> - goto err_free;
> -
> args->offset = to_panfrost_bo(&shmem->base)->node.start << PAGE_SHIFT;
>
> return 0;
> -
> -err_free:
> - drm_gem_handle_delete(file, args->handle);
> - return ret;
> }
>
> /**
> diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c
> index 67d374184340..3933f83ba6b0 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_gem.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c
> @@ -15,6 +15,39 @@
> * BO.
> */
> static void panfrost_gem_free_object(struct drm_gem_object *obj)
> +{
> + mutex_lock(&pfdev->shrinker_lock);
> + if (!list_empty(&bo->base.madv_list))
> + list_del(&bo->base.madv_list);
> + mutex_unlock(&pfdev->shrinker_lock);
> +
> + drm_gem_shmem_free_object(obj);
> +}
> +
> +static int panfrost_gem_open(struct drm_gem_object *obj, struct drm_file *file_priv)
> +{
> + int ret;
> + size_t size = obj->size;
> + u64 align = size >= SZ_2M ? SZ_2M >> PAGE_SHIFT : 0;
> + struct panfrost_gem_object *bo = to_panfrost_bo(obj);
> + struct panfrost_device *pfdev = obj->dev->dev_private;
> +
> + spin_lock(&pfdev->mm_lock);
> + ret = drm_mm_insert_node_generic(&pfdev->mm, &bo->node,
> + size >> PAGE_SHIFT, align, 0, 0);
> + if (ret)
> + goto out;
> +
> + ret = panfrost_mmu_map(bo);
> + if (ret)
> + drm_mm_remove_node(&bo->node);
> +
> +out:
> + spin_unlock(&pfdev->mm_lock);
> + return ret;
> +}
> +
> +static void panfrost_gem_close(struct drm_gem_object *obj, struct drm_file *file_priv)
> {
> struct panfrost_gem_object *bo = to_panfrost_bo(obj);
> struct panfrost_device *pfdev = obj->dev->dev_private;
> @@ -23,19 +56,15 @@ static void panfrost_gem_free_object(struct drm_gem_object *obj)
> panfrost_mmu_unmap(bo);
>
> spin_lock(&pfdev->mm_lock);
> - drm_mm_remove_node(&bo->node);
> + if (drm_mm_node_allocated(&bo->node))
> + drm_mm_remove_node(&bo->node);
> spin_unlock(&pfdev->mm_lock);
> -
> - mutex_lock(&pfdev->shrinker_lock);
> - if (!list_empty(&bo->base.madv_list))
> - list_del(&bo->base.madv_list);
> - mutex_unlock(&pfdev->shrinker_lock);
> -
> - drm_gem_shmem_free_object(obj);
> }
>
> static const struct drm_gem_object_funcs panfrost_gem_funcs = {
> .free = panfrost_gem_free_object,
> + .open = panfrost_gem_open,
> + .close = panfrost_gem_close,
> .print_info = drm_gem_shmem_print_info,
> .pin = drm_gem_shmem_pin,
> .unpin = drm_gem_shmem_unpin,
> @@ -55,10 +84,7 @@ static const struct drm_gem_object_funcs panfrost_gem_funcs = {
> */
> struct drm_gem_object *panfrost_gem_create_object(struct drm_device *dev, size_t size)
> {
> - int ret;
> - struct panfrost_device *pfdev = dev->dev_private;
> struct panfrost_gem_object *obj;
> - u64 align;
>
> obj = kzalloc(sizeof(*obj), GFP_KERNEL);
> if (!obj)
> @@ -66,21 +92,7 @@ struct drm_gem_object *panfrost_gem_create_object(struct drm_device *dev, size_t
>
> obj->base.base.funcs = &panfrost_gem_funcs;
>
> - size = roundup(size, PAGE_SIZE);
> - align = size >= SZ_2M ? SZ_2M >> PAGE_SHIFT : 0;
> -
> - spin_lock(&pfdev->mm_lock);
> - ret = drm_mm_insert_node_generic(&pfdev->mm, &obj->node,
> - size >> PAGE_SHIFT, align, 0, 0);
> - spin_unlock(&pfdev->mm_lock);
> - if (ret)
> - goto free_obj;
> -
> return &obj->base.base;
> -
> -free_obj:
> - kfree(obj);
> - return ERR_PTR(ret);
> }
>
> struct drm_gem_object *
> @@ -89,15 +101,10 @@ panfrost_gem_prime_import_sg_table(struct drm_device *dev,
> struct sg_table *sgt)
> {
> struct drm_gem_object *obj;
> - struct panfrost_gem_object *pobj;
>
> obj = drm_gem_shmem_prime_import_sg_table(dev, attach, sgt);
> if (IS_ERR(obj))
> return ERR_CAST(obj);
>
> - pobj = to_panfrost_bo(obj);
> -
> - panfrost_mmu_map(pobj);
> -
> return obj;
> }
> --
> 2.20.1
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
[-- Attachment #2: Type: text/plain, Size: 159 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2019-08-09 21:38 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-08 22:21 [PATCH v4 0/9] drm/panfrost: Add heap and no execute buffer allocation Rob Herring
2019-08-08 22:21 ` [PATCH v4 1/9] drm/gem: Allow sparsely populated page arrays in drm_gem_put_pages Rob Herring
2019-08-08 22:21 ` [PATCH v4 2/9] drm/shmem: Put pages independent of a SG table being set Rob Herring
2019-08-08 23:15 ` Eric Anholt
2019-08-08 22:21 ` [PATCH v4 3/9] drm/panfrost: Restructure the GEM object creation Rob Herring
2019-08-09 10:11 ` Steven Price
2019-08-09 21:38 ` Alyssa Rosenzweig [this message]
2019-08-08 22:21 ` [PATCH v4 4/9] drm/panfrost: Split panfrost_mmu_map SG list mapping to its own function Rob Herring
2019-08-08 22:21 ` [PATCH v4 5/9] drm/panfrost: Add a no execute flag for BO allocations Rob Herring
2019-08-08 22:21 ` [PATCH v4 6/9] drm/panfrost: Consolidate reset handling Rob Herring
2019-08-09 10:24 ` Steven Price
2019-08-09 21:40 ` Alyssa Rosenzweig
2019-08-08 22:21 ` [PATCH v4 7/9] drm/panfrost: Convert MMU IRQ handler to threaded handler Rob Herring
2019-08-08 22:21 ` [PATCH v4 8/9] drm/panfrost: Add support for GPU heap allocations Rob Herring
2019-08-09 10:31 ` Steven Price
2019-08-08 22:22 ` [PATCH v4 9/9] drm/panfrost: Bump driver version to 1.1 Rob Herring
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=20190809213819.GA15496@kevin \
--to=alyssa.rosenzweig@collabora.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=steven.price@arm.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox