v3dv: fix debug dump on BO free

We were resetting the BO struct right before dumping its data. Fix
this by moving the reset later.

Fixes: 44fa8304d4 ('v3dv: add a refcount mechanism to BOs')
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19672>
(cherry picked from commit 2c44597181)
This commit is contained in:
Iago Toral Quiroga
2022-11-11 11:36:29 +01:00
committed by Dylan Baker
parent b8e787da4e
commit 2406718cc7
2 changed files with 8 additions and 9 deletions

View File

@@ -625,7 +625,7 @@
"description": "v3dv: fix debug dump on BO free",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "44fa8304d45e775050a42f2fc85c02ad5ddb63bd"
},

View File

@@ -134,16 +134,9 @@ bo_free(struct v3dv_device *device,
assert(p_atomic_read(&bo->refcnt) == 0);
assert(bo->map == NULL);
/* Our BO structs are stored in a sparse array in the physical device,
* so we don't want to free the BO pointer, instead we want to reset it
* to 0, to signal that array entry as being free.
*/
uint32_t handle = bo->handle;
memset(bo, 0, sizeof(*bo));
struct drm_gem_close c;
memset(&c, 0, sizeof(c));
c.handle = handle;
c.handle = bo->handle;
int ret = v3dv_ioctl(device->pdevice->render_fd, DRM_IOCTL_GEM_CLOSE, &c);
if (ret != 0)
fprintf(stderr, "close object %d: %s\n", bo->handle, strerror(errno));
@@ -159,6 +152,12 @@ bo_free(struct v3dv_device *device,
bo_dump_stats(device);
}
/* Our BO structs are stored in a sparse array in the physical device,
* so we don't want to free the BO pointer, instead we want to reset it
* to 0, to signal that array entry as being free.
*/
memset(bo, 0, sizeof(*bo));
return ret == 0;
}