| From 502a88f5c550fa9b2cf7434eaa6c546c435013f0 Mon Sep 17 00:00:00 2001 |
| From: Daniel Vetter <daniel.vetter@ffwll.ch> |
| Date: Sat, 21 Sep 2013 00:35:38 +0200 |
| Subject: drm/i915: Use kcalloc more |
| |
| No buffer overflows here, but better safe than sorry. |
| |
| v2: |
| - Fixup the sizeof conversion, I've missed the pointer deref (Jani). |
| - Drop the redundant GFP_ZERO, kcalloc alreads memsets (Jani). |
| - Use kmalloc_array for the execbuf fastpath to avoid the memset |
| (Chris). I've opted to leave all other conversions as-is since they |
| aren't in a fastpath and dealing with cleared memory instead of |
| random garbage is just generally nicer. |
| |
| Cc: Jani Nikula <jani.nikula@linux.intel.com> |
| Cc: Chris Wilson <chris@chris-wilson.co.uk> |
| Reviewed-by: Jani Nikula <jani.nikula@intel.com> |
| [danvet: Drop the contentious kmalloc_array hunk in execbuf.] |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| |
| (cherry picked from commit a1e2265332e9344f913811ac6d2b84a506195bd8) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/i915_gem_execbuffer.c | 3 ++- |
| drivers/gpu/drm/i915/i915_gem_gtt.c | 4 ++-- |
| drivers/gpu/drm/i915/i915_gem_tiling.c | 6 +++--- |
| drivers/gpu/drm/i915/i915_gpu_error.c | 4 ++-- |
| drivers/gpu/drm/i915/intel_display.c | 2 +- |
| 5 files changed, 10 insertions(+), 9 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c |
| index ee933572bdc1..b87107e73c05 100644 |
| --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c |
| +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c |
| @@ -1047,7 +1047,8 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, |
| return -EINVAL; |
| } |
| |
| - cliprects = kmalloc(args->num_cliprects * sizeof(*cliprects), |
| + cliprects = kcalloc(args->num_cliprects, |
| + sizeof(*cliprects), |
| GFP_KERNEL); |
| if (cliprects == NULL) { |
| ret = -ENOMEM; |
| diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c |
| index 212f6d8c35ec..e999496532c6 100644 |
| --- a/drivers/gpu/drm/i915/i915_gem_gtt.c |
| +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c |
| @@ -336,7 +336,7 @@ static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt) |
| ppgtt->base.insert_entries = gen6_ppgtt_insert_entries; |
| ppgtt->base.cleanup = gen6_ppgtt_cleanup; |
| ppgtt->base.scratch = dev_priv->gtt.base.scratch; |
| - ppgtt->pt_pages = kzalloc(sizeof(struct page *)*ppgtt->num_pd_entries, |
| + ppgtt->pt_pages = kcalloc(ppgtt->num_pd_entries, sizeof(struct page *), |
| GFP_KERNEL); |
| if (!ppgtt->pt_pages) |
| return -ENOMEM; |
| @@ -347,7 +347,7 @@ static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt) |
| goto err_pt_alloc; |
| } |
| |
| - ppgtt->pt_dma_addr = kzalloc(sizeof(dma_addr_t) *ppgtt->num_pd_entries, |
| + ppgtt->pt_dma_addr = kcalloc(ppgtt->num_pd_entries, sizeof(dma_addr_t), |
| GFP_KERNEL); |
| if (!ppgtt->pt_dma_addr) |
| goto err_pt_alloc; |
| diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c |
| index 032e9ef9c896..ac9ebe98f8b0 100644 |
| --- a/drivers/gpu/drm/i915/i915_gem_tiling.c |
| +++ b/drivers/gpu/drm/i915/i915_gem_tiling.c |
| @@ -393,7 +393,7 @@ i915_gem_set_tiling(struct drm_device *dev, void *data, |
| /* Try to preallocate memory required to save swizzling on put-pages */ |
| if (i915_gem_object_needs_bit17_swizzle(obj)) { |
| if (obj->bit_17 == NULL) { |
| - obj->bit_17 = kmalloc(BITS_TO_LONGS(obj->base.size >> PAGE_SHIFT) * |
| + obj->bit_17 = kcalloc(BITS_TO_LONGS(obj->base.size >> PAGE_SHIFT), |
| sizeof(long), GFP_KERNEL); |
| } |
| } else { |
| @@ -504,8 +504,8 @@ i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj) |
| int i; |
| |
| if (obj->bit_17 == NULL) { |
| - obj->bit_17 = kmalloc(BITS_TO_LONGS(page_count) * |
| - sizeof(long), GFP_KERNEL); |
| + obj->bit_17 = kcalloc(BITS_TO_LONGS(page_count), |
| + sizeof(long), GFP_KERNEL); |
| if (obj->bit_17 == NULL) { |
| DRM_ERROR("Failed to allocate memory for bit 17 " |
| "record\n"); |
| diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c |
| index 7bea61325741..c3ff6bd220dc 100644 |
| --- a/drivers/gpu/drm/i915/i915_gpu_error.c |
| +++ b/drivers/gpu/drm/i915/i915_gpu_error.c |
| @@ -793,7 +793,7 @@ static void i915_gem_record_rings(struct drm_device *dev, |
| |
| error->ring[i].num_requests = count; |
| error->ring[i].requests = |
| - kmalloc(count*sizeof(struct drm_i915_error_request), |
| + kcalloc(count, sizeof(*error->ring[i].requests), |
| GFP_ATOMIC); |
| if (error->ring[i].requests == NULL) { |
| error->ring[i].num_requests = 0; |
| @@ -835,7 +835,7 @@ static void i915_gem_capture_vm(struct drm_i915_private *dev_priv, |
| error->pinned_bo_count[ndx] = i - error->active_bo_count[ndx]; |
| |
| if (i) { |
| - active_bo = kmalloc(sizeof(*active_bo)*i, GFP_ATOMIC); |
| + active_bo = kcalloc(i, sizeof(*active_bo), GFP_ATOMIC); |
| if (active_bo) |
| pinned_bo = active_bo + error->active_bo_count[ndx]; |
| } |
| diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c |
| index f0b18c342dee..c61a0bd32edd 100644 |
| --- a/drivers/gpu/drm/i915/intel_display.c |
| +++ b/drivers/gpu/drm/i915/intel_display.c |
| @@ -9052,7 +9052,7 @@ static int __intel_set_mode(struct drm_crtc *crtc, |
| unsigned disable_pipes, prepare_pipes, modeset_pipes; |
| int ret = 0; |
| |
| - saved_mode = kmalloc(2 * sizeof(*saved_mode), GFP_KERNEL); |
| + saved_mode = kcalloc(2, sizeof(*saved_mode), GFP_KERNEL); |
| if (!saved_mode) |
| return -ENOMEM; |
| saved_hwmode = saved_mode + 1; |
| -- |
| 1.8.5.rc3 |
| |