aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/vc4/vc4_gem.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c
index 9dc7646d49ed..d5b821ad06af 100644
--- a/drivers/gpu/drm/vc4/vc4_gem.c
+++ b/drivers/gpu/drm/vc4/vc4_gem.c
@@ -111,8 +111,8 @@ vc4_get_hang_state_ioctl(struct drm_device *dev, void *data,
111 &handle); 111 &handle);
112 112
113 if (ret) { 113 if (ret) {
114 state->bo_count = i - 1; 114 state->bo_count = i;
115 goto err; 115 goto err_delete_handle;
116 } 116 }
117 bo_state[i].handle = handle; 117 bo_state[i].handle = handle;
118 bo_state[i].paddr = vc4_bo->base.paddr; 118 bo_state[i].paddr = vc4_bo->base.paddr;
@@ -124,13 +124,16 @@ vc4_get_hang_state_ioctl(struct drm_device *dev, void *data,
124 state->bo_count * sizeof(*bo_state))) 124 state->bo_count * sizeof(*bo_state)))
125 ret = -EFAULT; 125 ret = -EFAULT;
126 126
127 kfree(bo_state); 127err_delete_handle:
128 if (ret) {
129 for (i = 0; i < state->bo_count; i++)
130 drm_gem_handle_delete(file_priv, bo_state[i].handle);
131 }
128 132
129err_free: 133err_free:
130
131 vc4_free_hang_state(dev, kernel_state); 134 vc4_free_hang_state(dev, kernel_state);
135 kfree(bo_state);
132 136
133err:
134 return ret; 137 return ret;
135} 138}
136 139