提交 8e3ffa8d 编写于 作者: C Chris Wilson

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: NChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: NMika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180911115810.8917-3-chris@chris-wilson.co.uk
上级 8db601f0
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册