[Intel-gfx] [PATCH 3/6] drm/i915: Limit number of capture objects
Mika Kuoppala
mika.kuoppala at linux.intel.com
Mon Sep 10 13:14:56 UTC 2018
Chris Wilson <chris at chris-wilson.co.uk> writes:
> 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: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/i915_gpu_error.c | 20 +++++++++++++-------
> 1 file changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
> index f7f2aa71d8d9..2835cacd0d08 100644
> --- a/drivers/gpu/drm/i915/i915_gpu_error.c
> +++ b/drivers/gpu/drm/i915/i915_gpu_error.c
> @@ -1365,15 +1365,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);
There seems to be no need to zero the array.
> + if (!bo) {
> + /* If we can't capture everything, try to capture something. */
> + max = min_t(long, max, PAGE_SIZE / sizeof(*bo));
Perhaps there is some bookkeeping in slab so this would spill to 2
pages eventually?
Reviewed-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>
> + bo = kmalloc_array(max, sizeof(*bo), GFP_ATOMIC);
> + }
> if (!bo)
> return;
>
> @@ -1382,7 +1387,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;
> --
> 2.19.0.rc2
More information about the Intel-gfx
mailing list