anv_device_unmap_bo(device, bo, bo->map, bo->size);
assert(bo->gem_handle != 0);
- anv_gem_close(device, bo->gem_handle);
+ device->kmd_backend->gem_close(device, bo->gem_handle);
}
static VkResult
VkResult result = anv_device_map_bo(device, &new_bo, 0, size,
0 /* gem_flags */, &new_bo.map);
if (unlikely(result != VK_SUCCESS)) {
- anv_gem_close(device, new_bo.gem_handle);
+ device->kmd_backend->gem_close(device, new_bo.gem_handle);
return result;
}
}
} else {
off_t size = lseek(fd, 0, SEEK_END);
if (size == (off_t)-1) {
- anv_gem_close(device, gem_handle);
+ device->kmd_backend->gem_close(device, gem_handle);
pthread_mutex_unlock(&cache->mutex);
return vk_error(device, VK_ERROR_INVALID_EXTERNAL_HANDLE);
}
#include "anv_private.h"
#include "common/intel_gem.h"
-void
-anv_gem_close(struct anv_device *device, uint32_t gem_handle)
-{
- struct drm_gem_close close = {
- .handle = gem_handle,
- };
-
- intel_ioctl(device->fd, DRM_IOCTL_GEM_CLOSE, &close);
-}
-
/**
* Wrapper around DRM_IOCTL_I915_GEM_MMAP. Returns MAP_FAILED on error.
*/
#include "util/anon_file.h"
#include "anv_private.h"
-void
-anv_gem_close(struct anv_device *device, uint32_t gem_handle)
+static void
+stub_gem_close(struct anv_device *device, uint32_t gem_handle)
{
close(gem_handle);
}
{
static const struct anv_kmd_backend stub_backend = {
.gem_create = stub_gem_create,
+ .gem_close = stub_gem_close,
};
return &stub_backend;
}
const struct intel_memory_class_instance **regions,
uint16_t num_regions, uint64_t size,
enum anv_bo_alloc_flags alloc_flags);
+ void (*gem_close)(struct anv_device *device, uint32_t handle);
};
const struct anv_kmd_backend *anv_kmd_backend_get(enum intel_kmd_type type);
void* anv_gem_mmap(struct anv_device *device, struct anv_bo *bo,
uint64_t offset, uint64_t size, uint32_t flags);
void anv_gem_munmap(struct anv_device *device, void *p, uint64_t size);
-void anv_gem_close(struct anv_device *device, uint32_t gem_handle);
uint32_t anv_gem_userptr(struct anv_device *device, void *mem, size_t size);
int anv_gem_wait(struct anv_device *device, uint32_t gem_handle, int64_t *timeout_ns);
int anv_gem_set_tiling(struct anv_device *device, uint32_t gem_handle,
return gem_create.handle;
}
+static void
+i915_gem_close(struct anv_device *device, uint32_t handle)
+{
+ struct drm_gem_close close = {
+ .handle = handle,
+ };
+
+ intel_ioctl(device->fd, DRM_IOCTL_GEM_CLOSE, &close);
+}
+
const struct anv_kmd_backend *
anv_i915_kmd_backend_get(void)
{
static const struct anv_kmd_backend i915_backend = {
.gem_create = i915_gem_create,
+ .gem_close = i915_gem_close,
};
return &i915_backend;
}