}
static void
+iris_bufmgr_destroy_global_vm(struct iris_bufmgr *bufmgr)
+{
+ switch (bufmgr->devinfo.kmd_type) {
+ case INTEL_KMD_TYPE_I915:
+ /* Nothing to do in i915 */
+ break;
+ case INTEL_KMD_TYPE_XE:
+ iris_xe_destroy_global_vm(bufmgr);
+ break;
+ default:
+ unreachable("missing");
+ }
+}
+
+static void
iris_bufmgr_destroy(struct iris_bufmgr *bufmgr)
{
iris_destroy_border_color_pool(&bufmgr->border_color_pool);
for (int z = 0; z < IRIS_MEMZONE_COUNT; z++)
util_vma_heap_finish(&bufmgr->vma_allocator[z]);
+ iris_bufmgr_destroy_global_vm(bufmgr);
+
close(bufmgr->fd);
simple_mtx_unlock(&bufmgr->lock);
pb_slabs_deinit(&bufmgr->bo_slabs[i]);
}
+ iris_bufmgr_destroy_global_vm(bufmgr);
error_init_vm:
error_engine_info:
close(bufmgr->fd);
{
return bufmgr->kmd_backend;
}
+
+uint32_t
+iris_bufmgr_get_global_vm_id(struct iris_bufmgr *bufmgr)
+{
+ return bufmgr->global_vm_id;
+}
const struct intel_device_info *iris_bufmgr_get_device_info(struct iris_bufmgr *bufmgr);
const struct iris_kmd_backend *
iris_bufmgr_get_kernel_driver_backend(struct iris_bufmgr *bufmgr);
+uint32_t iris_bufmgr_get_global_vm_id(struct iris_bufmgr *bufmgr);
enum iris_madvice {
IRIS_MADVICE_WILL_NEED = 0,
*vm_id = create.vm_id;
return true;
}
+
+bool
+iris_xe_destroy_global_vm(struct iris_bufmgr *bufmgr)
+{
+ struct drm_xe_vm_destroy destroy = {
+ .vm_id = iris_bufmgr_get_global_vm_id(bufmgr),
+ };
+ return intel_ioctl(iris_bufmgr_get_fd(bufmgr), DRM_IOCTL_XE_VM_DESTROY,
+ &destroy) == 0;
+}