diff options
| -rw-r--r-- | drivers/gpu/drm/vc4/vc4_gem.c | 13 |
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); | 127 | err_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 | ||
| 129 | err_free: | 133 | err_free: |
| 130 | |||
| 131 | vc4_free_hang_state(dev, kernel_state); | 134 | vc4_free_hang_state(dev, kernel_state); |
| 135 | kfree(bo_state); | ||
| 132 | 136 | ||
| 133 | err: | ||
| 134 | return ret; | 137 | return ret; |
| 135 | } | 138 | } |
| 136 | 139 | ||
