summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAshutosh Dixit <ashutosh.dixit@intel.com>2021-09-28 11:47:05 -0700
committerAshutosh Dixit <ashutosh.dixit@intel.com>2021-09-29 08:13:49 -0700
commit22643ce4014a0b2dc52ce7916b2f657e2a7757c3 (patch)
tree18766ccd6af6d4b3d095419d375b01066aec0584
parent6ac2da7fd6b13f04f9aa0ec10f86b831d2756946 (diff)
Return allocated size in gem_create_in_memory_regions() and friends
Often the allocated size is of interest and is different from the requested size. Therefore return allocated size for the object (by __gem_create_ext()) in gem_create_in_memory_regions() and friends. v2: Assign buf->size correctly in __intel_buf_init (Zbigniew) Cc: Andrzej Turko <andrzej.turko@linux.intel.com> Cc: Zbigniew Kempczynski <zbigniew.kempczynski@intel.com> Cc: John Harrison <John.C.Harrison@intel.com> Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com> Reviewed-by: Zbigniew KempczyƄski <zbigniew.kempczynski@intel.com>
-rw-r--r--lib/i915/intel_memory_region.c6
-rw-r--r--lib/i915/intel_memory_region.h4
-rw-r--r--lib/intel_bufops.c8
-rw-r--r--lib/ioctl_wrappers.c2
-rw-r--r--tests/i915/gem_exec_basic.c6
-rw-r--r--tests/i915/gem_gpgpu_fill.c3
-rw-r--r--tests/i915/gem_media_fill.c3
-rw-r--r--tests/kms_addfb_basic.c2
-rw-r--r--tests/kms_prime.c4
9 files changed, 20 insertions, 18 deletions
diff --git a/lib/i915/intel_memory_region.c b/lib/i915/intel_memory_region.c
index 3de40549..e59801a4 100644
--- a/lib/i915/intel_memory_region.c
+++ b/lib/i915/intel_memory_region.c
@@ -183,7 +183,7 @@ 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,
+int __gem_create_in_memory_region_list(int fd, uint32_t *handle, uint64_t *size,
struct drm_i915_gem_memory_class_instance *mem_regions,
int num_regions)
{
@@ -193,7 +193,7 @@ int __gem_create_in_memory_region_list(int fd, uint32_t *handle, uint64_t size,
.regions = to_user_pointer(mem_regions),
};
- return __gem_create_ext(fd, &size, handle, &ext_regions.base);
+ return __gem_create_ext(fd, size, handle, &ext_regions.base);
}
/* gem_create_in_memory_region_list:
@@ -202,7 +202,7 @@ int __gem_create_in_memory_region_list(int fd, uint32_t *handle, uint64_t size,
* @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 gem_create_in_memory_region_list(int fd, uint64_t *size,
struct drm_i915_gem_memory_class_instance *mem_regions,
int num_regions)
{
diff --git a/lib/i915/intel_memory_region.h b/lib/i915/intel_memory_region.h
index 70b74944..bf75831c 100644
--- a/lib/i915/intel_memory_region.h
+++ b/lib/i915/intel_memory_region.h
@@ -64,11 +64,11 @@ bool gem_has_lmem(int fd);
struct drm_i915_gem_memory_class_instance;
-int __gem_create_in_memory_region_list(int fd, uint32_t *handle, uint64_t size,
+int __gem_create_in_memory_region_list(int fd, uint32_t *handle, uint64_t *size,
struct drm_i915_gem_memory_class_instance *mem_regions,
int num_regions);
-uint32_t gem_create_in_memory_region_list(int fd, uint64_t size,
+uint32_t gem_create_in_memory_region_list(int fd, uint64_t *size,
struct drm_i915_gem_memory_class_instance *mem_regions,
int num_regions);
diff --git a/lib/intel_bufops.c b/lib/intel_bufops.c
index d1395c16..0cb76142 100644
--- a/lib/intel_bufops.c
+++ b/lib/intel_bufops.c
@@ -813,18 +813,18 @@ static void __intel_buf_init(struct buf_ops *bops,
size = bo_size;
}
- /* Store real bo size to avoid mistakes in calculating it again */
- buf->size = size;
-
if (handle)
buf->handle = handle;
else {
- if (!__gem_create_in_memory_regions(bops->fd, &handle, size, region))
+ if (!__gem_create_in_memory_regions(bops->fd, &handle, &size, region))
buf->handle = handle;
else
buf->handle = gem_create(bops->fd, size);
}
+ /* Store real bo size to avoid mistakes in calculating it again */
+ buf->size = size;
+
set_hw_tiled(bops, buf);
}
diff --git a/lib/ioctl_wrappers.c b/lib/ioctl_wrappers.c
index 09eb3ce7..4d628e50 100644
--- a/lib/ioctl_wrappers.c
+++ b/lib/ioctl_wrappers.c
@@ -635,7 +635,7 @@ uint32_t gem_buffer_create_fb_obj(int fd, uint64_t size)
uint32_t handle;
if (gem_has_lmem(fd))
- handle = gem_create_in_memory_regions(fd, size, REGION_LMEM(0));
+ handle = gem_create_in_memory_regions(fd, &size, REGION_LMEM(0));
else
handle = gem_create(fd, size);
diff --git a/tests/i915/gem_exec_basic.c b/tests/i915/gem_exec_basic.c
index 008a35d0..04e2209c 100644
--- a/tests/i915/gem_exec_basic.c
+++ b/tests/i915/gem_exec_basic.c
@@ -28,12 +28,12 @@
IGT_TEST_DESCRIPTION("Basic sanity check of execbuf-ioctl rings.");
-static uint32_t batch_create(int fd, uint32_t batch_size, uint32_t region)
+static uint32_t batch_create(int fd, uint64_t batch_size, uint32_t region)
{
const uint32_t bbe = MI_BATCH_BUFFER_END;
uint32_t handle;
- handle = gem_create_in_memory_regions(fd, batch_size, region);
+ handle = gem_create_in_memory_regions(fd, &batch_size, region);
gem_write(fd, handle, 0, &bbe, sizeof(bbe));
return handle;
@@ -44,7 +44,7 @@ igt_main
const struct intel_execution_engine2 *e;
struct drm_i915_query_memory_regions *query_info;
struct igt_collection *regions, *set;
- uint32_t batch_size;
+ uint64_t batch_size;
const intel_ctx_t *ctx;
int fd = -1;
diff --git a/tests/i915/gem_gpgpu_fill.c b/tests/i915/gem_gpgpu_fill.c
index 74a227f6..76f4d7c6 100644
--- a/tests/i915/gem_gpgpu_fill.c
+++ b/tests/i915/gem_gpgpu_fill.c
@@ -68,6 +68,7 @@ create_buf(data_t *data, int width, int height, uint8_t color, uint32_t region)
struct intel_buf *buf;
uint8_t *ptr;
uint32_t handle;
+ uint64_t size = SIZE;
int i;
buf = calloc(1, sizeof(*buf));
@@ -77,7 +78,7 @@ create_buf(data_t *data, int width, int height, uint8_t color, uint32_t region)
* Legacy code uses 32 bpp after buffer creation.
* Let's do the same due to keep shader intact.
*/
- handle = gem_create_in_memory_regions(data->drm_fd, SIZE, region);
+ handle = gem_create_in_memory_regions(data->drm_fd, &size, region);
intel_buf_init_using_handle(data->bops, handle, buf,
width/4, height, 32, 0,
I915_TILING_NONE, 0);
diff --git a/tests/i915/gem_media_fill.c b/tests/i915/gem_media_fill.c
index 1d08df24..3d7d6fa2 100644
--- a/tests/i915/gem_media_fill.c
+++ b/tests/i915/gem_media_fill.c
@@ -69,12 +69,13 @@ create_buf(data_t *data, int width, int height, uint8_t color, uint32_t region)
struct intel_buf *buf;
uint32_t handle;
uint8_t *ptr;
+ uint64_t size = SIZE;
int i;
buf = calloc(1, sizeof(*buf));
igt_assert(buf);
- handle = gem_create_in_memory_regions(data->drm_fd, SIZE, region);
+ handle = gem_create_in_memory_regions(data->drm_fd, &size, region);
/*
* Legacy code uses 32 bpp after buffer creation.
diff --git a/tests/kms_addfb_basic.c b/tests/kms_addfb_basic.c
index 55f4852d..62fa78a5 100644
--- a/tests/kms_addfb_basic.c
+++ b/tests/kms_addfb_basic.c
@@ -158,7 +158,7 @@ static void invalid_tests(int fd)
igt_require(gem_has_lmem(fd));
igt_calc_fb_size(fd, f.width, f.height,
DRM_FORMAT_XRGB8888, 0, &size, &stride);
- handle = gem_create_in_memory_regions(fd, size, REGION_SMEM);
+ handle = gem_create_in_memory_regions(fd, &size, REGION_SMEM);
f.handles[0] = handle;
do_ioctl_err(fd, DRM_IOCTL_MODE_ADDFB2, &f, EREMOTE);
}
diff --git a/tests/kms_prime.c b/tests/kms_prime.c
index 5cdb5597..ea459414 100644
--- a/tests/kms_prime.c
+++ b/tests/kms_prime.c
@@ -112,10 +112,10 @@ static void prepare_scratch(int exporter_fd, struct dumb_bo *scratch,
igt_calc_fb_size(exporter_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888,
DRM_FORMAT_MOD_NONE, &scratch->size, &scratch->pitch);
if (gem_has_lmem(exporter_fd))
- scratch->handle = gem_create_in_memory_regions(exporter_fd, scratch->size,
+ scratch->handle = gem_create_in_memory_regions(exporter_fd, &scratch->size,
REGION_LMEM(0), REGION_SMEM);
else
- scratch->handle = gem_create_in_memory_regions(exporter_fd, scratch->size,
+ scratch->handle = gem_create_in_memory_regions(exporter_fd, &scratch->size,
REGION_SMEM);
ptr = gem_mmap__device_coherent(exporter_fd, scratch->handle, 0, scratch->size,