* [PATCH 1/2 RESEND] drm/vc4: Fulfill user BO creation requests from the kernel BO cache.
@ 2017-03-01 18:56 Eric Anholt
2017-03-01 18:56 ` [PATCH 2/2 RESEND] drm/vc4: Fix OOPSes from trying to cache a partially constructed BO Eric Anholt
2017-03-02 8:08 ` [PATCH 1/2 RESEND] drm/vc4: Fulfill user BO creation requests from the kernel BO cache Boris Brezillon
0 siblings, 2 replies; 4+ messages in thread
From: Eric Anholt @ 2017-03-01 18:56 UTC (permalink / raw)
To: dri-devel; +Cc: linux-kernel
The from_cache flag was actually "the BO is invisible to userspace",
so we can repurpose it to just zero out a cached BO and return it to
userspace.
Improves wall time for a loop of 5 glsl-algebraic-add-add-1 by
-1.44989% +/- 0.862891% (n=28, 1 outlier removed from each that
appeared to be other system noise)
Note that there's an intel-gpu-tools test to check for the proper
zeroing behavior here, which we continue to pass.
Signed-off-by: Eric Anholt <eric@anholt.net>
---
drivers/gpu/drm/vc4/vc4_bo.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
index 7abcd9c5dbe2..e5c7aa935b4b 100644
--- a/drivers/gpu/drm/vc4/vc4_bo.c
+++ b/drivers/gpu/drm/vc4/vc4_bo.c
@@ -211,21 +211,22 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size)
}
struct vc4_bo *vc4_bo_create(struct drm_device *dev, size_t unaligned_size,
- bool from_cache)
+ bool allow_unzeroed)
{
size_t size = roundup(unaligned_size, PAGE_SIZE);
struct vc4_dev *vc4 = to_vc4_dev(dev);
struct drm_gem_cma_object *cma_obj;
+ struct vc4_bo *bo;
if (size == 0)
return ERR_PTR(-EINVAL);
/* First, try to get a vc4_bo from the kernel BO cache. */
- if (from_cache) {
- struct vc4_bo *bo = vc4_bo_get_from_cache(dev, size);
-
- if (bo)
- return bo;
+ bo = vc4_bo_get_from_cache(dev, size);
+ if (bo) {
+ if (!allow_unzeroed)
+ memset(bo->base.vaddr, 0, bo->base.base.size);
+ return bo;
}
cma_obj = drm_gem_cma_create(dev, size);
--
2.11.0
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 2/2 RESEND] drm/vc4: Fix OOPSes from trying to cache a partially constructed BO.
2017-03-01 18:56 [PATCH 1/2 RESEND] drm/vc4: Fulfill user BO creation requests from the kernel BO cache Eric Anholt
@ 2017-03-01 18:56 ` Eric Anholt
2017-03-02 8:14 ` Boris Brezillon
2017-03-02 8:08 ` [PATCH 1/2 RESEND] drm/vc4: Fulfill user BO creation requests from the kernel BO cache Boris Brezillon
1 sibling, 1 reply; 4+ messages in thread
From: Eric Anholt @ 2017-03-01 18:56 UTC (permalink / raw)
To: dri-devel; +Cc: linux-kernel
If a CMA allocation failed, the partially constructed BO would be
unreferenced through the normal path, and we might choose to put it in
the BO cache. If we then reused it before it expired from the cache,
the kernel would OOPS.
Signed-off-by: Eric Anholt <eric@anholt.net>
Fixes: c826a6e10644 ("drm/vc4: Add a BO cache.")
---
drivers/gpu/drm/vc4/vc4_bo.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
index e5c7aa935b4b..af29432a6471 100644
--- a/drivers/gpu/drm/vc4/vc4_bo.c
+++ b/drivers/gpu/drm/vc4/vc4_bo.c
@@ -317,6 +317,14 @@ void vc4_free_object(struct drm_gem_object *gem_bo)
goto out;
}
+ /* If this object was partially constructed but CMA allocation
+ * had failed, just free it.
+ */
+ if (!bo->base.vaddr) {
+ vc4_bo_destroy(bo);
+ goto out;
+ }
+
cache_list = vc4_get_cache_list_for_size(dev, gem_bo->size);
if (!cache_list) {
vc4_bo_destroy(bo);
--
2.11.0
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH 2/2 RESEND] drm/vc4: Fix OOPSes from trying to cache a partially constructed BO.
2017-03-01 18:56 ` [PATCH 2/2 RESEND] drm/vc4: Fix OOPSes from trying to cache a partially constructed BO Eric Anholt
@ 2017-03-02 8:14 ` Boris Brezillon
0 siblings, 0 replies; 4+ messages in thread
From: Boris Brezillon @ 2017-03-02 8:14 UTC (permalink / raw)
To: Eric Anholt; +Cc: linux-kernel, dri-devel
On Wed, 1 Mar 2017 10:56:02 -0800
Eric Anholt <eric@anholt.net> wrote:
> If a CMA allocation failed, the partially constructed BO would be
> unreferenced through the normal path, and we might choose to put it in
> the BO cache. If we then reused it before it expired from the cache,
> the kernel would OOPS.
>
> Signed-off-by: Eric Anholt <eric@anholt.net>
> Fixes: c826a6e10644 ("drm/vc4: Add a BO cache.")
Reviewed-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
> drivers/gpu/drm/vc4/vc4_bo.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
> index e5c7aa935b4b..af29432a6471 100644
> --- a/drivers/gpu/drm/vc4/vc4_bo.c
> +++ b/drivers/gpu/drm/vc4/vc4_bo.c
> @@ -317,6 +317,14 @@ void vc4_free_object(struct drm_gem_object *gem_bo)
> goto out;
> }
>
> + /* If this object was partially constructed but CMA allocation
> + * had failed, just free it.
> + */
> + if (!bo->base.vaddr) {
> + vc4_bo_destroy(bo);
> + goto out;
> + }
> +
> cache_list = vc4_get_cache_list_for_size(dev, gem_bo->size);
> if (!cache_list) {
> vc4_bo_destroy(bo);
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2 RESEND] drm/vc4: Fulfill user BO creation requests from the kernel BO cache.
2017-03-01 18:56 [PATCH 1/2 RESEND] drm/vc4: Fulfill user BO creation requests from the kernel BO cache Eric Anholt
2017-03-01 18:56 ` [PATCH 2/2 RESEND] drm/vc4: Fix OOPSes from trying to cache a partially constructed BO Eric Anholt
@ 2017-03-02 8:08 ` Boris Brezillon
1 sibling, 0 replies; 4+ messages in thread
From: Boris Brezillon @ 2017-03-02 8:08 UTC (permalink / raw)
To: Eric Anholt; +Cc: linux-kernel, dri-devel
On Wed, 1 Mar 2017 10:56:01 -0800
Eric Anholt <eric@anholt.net> wrote:
> The from_cache flag was actually "the BO is invisible to userspace",
> so we can repurpose it to just zero out a cached BO and return it to
> userspace.
>
> Improves wall time for a loop of 5 glsl-algebraic-add-add-1 by
> -1.44989% +/- 0.862891% (n=28, 1 outlier removed from each that
> appeared to be other system noise)
>
> Note that there's an intel-gpu-tools test to check for the proper
> zeroing behavior here, which we continue to pass.
>
> Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
> drivers/gpu/drm/vc4/vc4_bo.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
> index 7abcd9c5dbe2..e5c7aa935b4b 100644
> --- a/drivers/gpu/drm/vc4/vc4_bo.c
> +++ b/drivers/gpu/drm/vc4/vc4_bo.c
> @@ -211,21 +211,22 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size)
> }
>
> struct vc4_bo *vc4_bo_create(struct drm_device *dev, size_t unaligned_size,
> - bool from_cache)
> + bool allow_unzeroed)
> {
> size_t size = roundup(unaligned_size, PAGE_SIZE);
> struct vc4_dev *vc4 = to_vc4_dev(dev);
> struct drm_gem_cma_object *cma_obj;
> + struct vc4_bo *bo;
>
> if (size == 0)
> return ERR_PTR(-EINVAL);
>
> /* First, try to get a vc4_bo from the kernel BO cache. */
> - if (from_cache) {
> - struct vc4_bo *bo = vc4_bo_get_from_cache(dev, size);
> -
> - if (bo)
> - return bo;
> + bo = vc4_bo_get_from_cache(dev, size);
> + if (bo) {
> + if (!allow_unzeroed)
> + memset(bo->base.vaddr, 0, bo->base.base.size);
> + return bo;
> }
>
> cma_obj = drm_gem_cma_create(dev, size);
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-03-02 8:14 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-01 18:56 [PATCH 1/2 RESEND] drm/vc4: Fulfill user BO creation requests from the kernel BO cache Eric Anholt
2017-03-01 18:56 ` [PATCH 2/2 RESEND] drm/vc4: Fix OOPSes from trying to cache a partially constructed BO Eric Anholt
2017-03-02 8:14 ` Boris Brezillon
2017-03-02 8:08 ` [PATCH 1/2 RESEND] drm/vc4: Fulfill user BO creation requests from the kernel BO cache Boris Brezillon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).