Commit 8e3ffa8d authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Limit number of capture objects



If we fail to allocate an array for a large number of user requested
capture objects, reduce the array size and try to grab at least some of
the objects!

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180911115810.8917-3-chris@chris-wilson.co.uk
parent 8db601f0
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -1391,15 +1391,20 @@ static void request_record_user_bo(struct i915_request *request,
{
	struct i915_capture_list *c;
	struct drm_i915_error_object **bo;
	long count;
	long count, max;

	count = 0;
	max = 0;
	for (c = request->capture_list; c; c = c->next)
		count++;
		max++;
	if (!max)
		return;

	bo = NULL;
	if (count)
		bo = kcalloc(count, sizeof(*bo), GFP_ATOMIC);
	bo = kmalloc_array(max, sizeof(*bo), GFP_ATOMIC);
	if (!bo) {
		/* If we can't capture everything, try to capture something. */
		max = min_t(long, max, PAGE_SIZE / sizeof(*bo));
		bo = kmalloc_array(max, sizeof(*bo), GFP_ATOMIC);
	}
	if (!bo)
		return;

@@ -1408,7 +1413,8 @@ static void request_record_user_bo(struct i915_request *request,
		bo[count] = i915_error_object_create(request->i915, c->vma);
		if (!bo[count])
			break;
		count++;
		if (++count == max)
			break;
	}

	ee->user_bo = bo;