diff options
Diffstat (limited to 'lib/i915/intel_memory_region.c')
-rw-r--r-- | lib/i915/intel_memory_region.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/i915/intel_memory_region.c b/lib/i915/intel_memory_region.c index 93a18982..74a4fda6 100644 --- a/lib/i915/intel_memory_region.c +++ b/lib/i915/intel_memory_region.c @@ -197,10 +197,14 @@ bool gem_has_lmem(int fd) /* A version of gem_create_in_memory_region_list which can be allowed to fail so that the object creation can be retried */ -int __gem_create_in_memory_region_list(int fd, uint32_t *handle, uint64_t *size, uint32_t flags, +int __gem_create_in_memory_region_list(int fd, uint32_t *handle, uint64_t *size, uint32_t flags, uint32_t vm_id, struct drm_i915_gem_memory_class_instance *mem_regions, int num_regions) { + struct drm_i915_gem_create_ext_vm_private vm_priv = { + .base = { .name = I915_GEM_CREATE_EXT_VM_PRIVATE }, + .vm_id = vm_id, + }; struct drm_i915_gem_create_ext_memory_regions ext_regions = { .base = { .name = I915_GEM_CREATE_EXT_MEMORY_REGIONS }, .num_regions = num_regions, @@ -208,6 +212,9 @@ int __gem_create_in_memory_region_list(int fd, uint32_t *handle, uint64_t *size, }; int ret; + if (vm_id) + ext_regions.base.next_extension = to_user_pointer(&vm_priv.base); + ret = __gem_create_ext(fd, size, flags, handle, &ext_regions.base); if (flags && ret == -EINVAL) ret = __gem_create_ext(fd, size, 0, handle, &ext_regions.base); @@ -230,15 +237,16 @@ int __gem_create_in_memory_region_list(int fd, uint32_t *handle, uint64_t *size, /* gem_create_in_memory_region_list: * @fd: opened i915 drm file descriptor * @size: requested size of the buffer + * @vm_id: vm_id for VM private Objects. 0 for non-private Objects. * @mem_regions: memory regions array (priority list) * @num_regions: @mem_regions length */ -uint32_t gem_create_in_memory_region_list(int fd, uint64_t size, uint32_t flags, +uint32_t gem_create_in_memory_region_list(int fd, uint64_t size, uint32_t flags, uint32_t vm_id, struct drm_i915_gem_memory_class_instance *mem_regions, int num_regions) { uint32_t handle; - int ret = __gem_create_in_memory_region_list(fd, &handle, &size, flags, + int ret = __gem_create_in_memory_region_list(fd, &handle, &size, flags, vm_id, mem_regions, num_regions); igt_assert_eq(ret, 0); return handle; |