OpenWrt – Blame information for rev 4
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
4 | office | 1 | From 3f131f18e76bb3fa56158adea3abddeaac68e860 Mon Sep 17 00:00:00 2001 |
2 | From: Eric Anholt <eric@anholt.net> |
||
3 | Date: Thu, 9 Feb 2017 09:23:34 -0800 |
||
4 | Subject: [PATCH] drm/vc4: Fix OOPSes from trying to cache a partially |
||
5 | constructed BO. |
||
6 | |||
7 | If a CMA allocation failed, the partially constructed BO would be |
||
8 | unreferenced through the normal path, and we might choose to put it in |
||
9 | the BO cache. If we then reused it before it expired from the cache, |
||
10 | the kernel would OOPS. |
||
11 | |||
12 | Signed-off-by: Eric Anholt <eric@anholt.net> |
||
13 | Fixes: c826a6e10644 ("drm/vc4: Add a BO cache.") |
||
14 | --- |
||
15 | drivers/gpu/drm/vc4/vc4_bo.c | 8 ++++++++ |
||
16 | 1 file changed, 8 insertions(+) |
||
17 | |||
18 | --- a/drivers/gpu/drm/vc4/vc4_bo.c |
||
19 | +++ b/drivers/gpu/drm/vc4/vc4_bo.c |
||
20 | @@ -323,6 +323,14 @@ void vc4_free_object(struct drm_gem_obje |
||
21 | goto out; |
||
22 | } |
||
23 | |||
24 | + /* If this object was partially constructed but CMA allocation |
||
25 | + * had failed, just free it. |
||
26 | + */ |
||
27 | + if (!bo->base.vaddr) { |
||
28 | + vc4_bo_destroy(bo); |
||
29 | + goto out; |
||
30 | + } |
||
31 | + |
||
32 | cache_list = vc4_get_cache_list_for_size(dev, gem_bo->size); |
||
33 | if (!cache_list) { |
||
34 | vc4_bo_destroy(bo); |