zink: fix bo_export caching
When creating and caching the bo_export object for a given zink_bo, the
screen file descriptor was used. Since no buffer object's file descriptor
would match that, bo_export objects were continuously added to the exports
list and no bo_export was effectively picked from the cache. Using the
buffer object's file descriptor avoids that.
Signed-off-by: Zan Dobersek <zdobersek@igalia.com>
Fixes: b0fe621459
("zink: add back kms handling")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31715>
This commit is contained in:
@@ -130,7 +130,7 @@ bo_destroy(struct zink_screen *screen, struct pb_buffer *pbuf)
|
|||||||
simple_mtx_lock(&bo->u.real.export_lock);
|
simple_mtx_lock(&bo->u.real.export_lock);
|
||||||
list_for_each_entry_safe(struct bo_export, export, &bo->u.real.exports, link) {
|
list_for_each_entry_safe(struct bo_export, export, &bo->u.real.exports, link) {
|
||||||
struct drm_gem_close args = { .handle = export->gem_handle };
|
struct drm_gem_close args = { .handle = export->gem_handle };
|
||||||
drmIoctl(export->drm_fd, DRM_IOCTL_GEM_CLOSE, &args);
|
drmIoctl(screen->drm_fd, DRM_IOCTL_GEM_CLOSE, &args);
|
||||||
list_del(&export->link);
|
list_del(&export->link);
|
||||||
free(export);
|
free(export);
|
||||||
}
|
}
|
||||||
@@ -1216,7 +1216,7 @@ zink_bo_get_kms_handle(struct zink_screen *screen, struct zink_bo *bo, int fd, u
|
|||||||
if (success) {
|
if (success) {
|
||||||
list_addtail(&export->link, &bo->u.real.exports);
|
list_addtail(&export->link, &bo->u.real.exports);
|
||||||
export->gem_handle = *handle;
|
export->gem_handle = *handle;
|
||||||
export->drm_fd = screen->drm_fd;
|
export->drm_fd = fd;
|
||||||
} else {
|
} else {
|
||||||
mesa_loge("zink: failed drmPrimeFDToHandle %s", strerror(errno));
|
mesa_loge("zink: failed drmPrimeFDToHandle %s", strerror(errno));
|
||||||
FREE(export);
|
FREE(export);
|
||||||
|
Reference in New Issue
Block a user