Mesa (master): broadcom/vc4: Fix infinite retry in vc4_bo_alloc()

Eric Anholt anholt at kemper.freedesktop.org
Tue Sep 26 21:50:12 UTC 2017


Module: Mesa
Branch: master
Commit: ef578906d849bf05d04d246e9e3994146dddc01d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ef578906d849bf05d04d246e9e3994146dddc01d

Author: Boris Brezillon <boris.brezillon at free-electrons.com>
Date:   Tue Sep 26 09:48:37 2017 +0200

broadcom/vc4: Fix infinite retry in vc4_bo_alloc()

cleared_and_retried is always reset to false when jumping to the retry
label, thus leading to an infinite retry loop.

Fix that by moving the cleared_and_retried variable definitions at the
beginning of the function.  While we're at it, move the create variable
with the other local variables and explicitly reset its content in the
retry path.

Signed-off-by: Boris Brezillon <boris.brezillon at free-electrons.com>
Reviewed-by: Eric Anholt <eric at anholt.net>
Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>
Fixes: 78087676c98aa8884ba92 "vc4: Restructure the simulator mode."

---

 src/gallium/drivers/vc4/vc4_bufmgr.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/vc4/vc4_bufmgr.c b/src/gallium/drivers/vc4/vc4_bufmgr.c
index 12af7f8a9e..0653f88232 100644
--- a/src/gallium/drivers/vc4/vc4_bufmgr.c
+++ b/src/gallium/drivers/vc4/vc4_bufmgr.c
@@ -123,6 +123,8 @@ vc4_bo_from_cache(struct vc4_screen *screen, uint32_t size, const char *name)
 struct vc4_bo *
 vc4_bo_alloc(struct vc4_screen *screen, uint32_t size, const char *name)
 {
+        bool cleared_and_retried = false;
+        struct drm_vc4_create_bo create;
         struct vc4_bo *bo;
         int ret;
 
@@ -149,12 +151,8 @@ vc4_bo_alloc(struct vc4_screen *screen, uint32_t size, const char *name)
         bo->private = true;
 
  retry:
-        ;
-
-        bool cleared_and_retried = false;
-        struct drm_vc4_create_bo create = {
-                .size = size
-        };
+        memset(&create, 0, sizeof(create));
+        create.size = size;
 
         ret = vc4_ioctl(screen->fd, DRM_IOCTL_VC4_CREATE_BO, &create);
         bo->handle = create.handle;




More information about the mesa-commit mailing list