summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBoris Brezillon <[email protected]>2017-09-26 09:48:37 +0200
committerEric Anholt <[email protected]>2017-09-26 14:49:48 -0700
commitef578906d849bf05d04d246e9e3994146dddc01d (patch)
tree802919dfa931d1f989515a344d40b3d04d9f094a /src
parent68c91a87d73cfcd947e09803ceb800b50bf9e399 (diff)
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 <[email protected]> Reviewed-by: Eric Anholt <[email protected]> Reviewed-by: Eric Engestrom <[email protected]> Fixes: 78087676c98aa8884ba92 "vc4: Restructure the simulator mode."
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/vc4/vc4_bufmgr.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/src/gallium/drivers/vc4/vc4_bufmgr.c b/src/gallium/drivers/vc4/vc4_bufmgr.c
index 12af7f8a9ef..0653f882323 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;