12345678910111213141516171819202122232425262728293031323334 |
- From 73042261439a2d73e4e7b711de55a8a135725739 Mon Sep 17 00:00:00 2001
- From: Eric Anholt <eric@anholt.net>
- Date: Thu, 9 Feb 2017 09:23:34 -0800
- Subject: [PATCH] drm/vc4: Fix OOPSes from trying to cache a partially
- constructed BO.
- 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(+)
- --- a/drivers/gpu/drm/vc4/vc4_bo.c
- +++ b/drivers/gpu/drm/vc4/vc4_bo.c
- @@ -334,6 +334,14 @@ void vc4_free_object(struct drm_gem_obje
- 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);
|