From: Damien Lespiau Date: Tue, 15 Oct 2013 17:55:34 +0000 (+0100) Subject: drm/i915: Dynamically allocate the CRC circular buffer X-Git-Tag: next-20131017~56^2~20 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=e5f75aca193837c57a886c3fb83442fda88142e9;p=karo-tx-linux.git drm/i915: Dynamically allocate the CRC circular buffer So we don't eat that memory when not needed. Signed-off-by: Damien Lespiau Signed-off-by: Daniel Vetter --- diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index ec9151afa240..53a3f2224d1f 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@ -1822,6 +1822,12 @@ static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe, /* none -> real source transition */ if (source) { + pipe_crc->entries = kzalloc(sizeof(*pipe_crc->entries) * + INTEL_PIPE_CRC_ENTRIES_NR, + GFP_KERNEL); + if (!pipe_crc->entries) + return -ENOMEM; + atomic_set(&pipe_crc->head, 0); atomic_set(&pipe_crc->tail, 0); } @@ -1847,6 +1853,12 @@ static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe, I915_WRITE(PIPE_CRC_CTL(pipe), val); POSTING_READ(PIPE_CRC_CTL(pipe)); + /* real source -> none transition */ + if (source == INTEL_PIPE_CRC_SOURCE_NONE) { + kfree(pipe_crc->entries); + pipe_crc->entries = NULL; + } + return 0; } diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index f8a36d038457..1faeaac5f9f3 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1232,7 +1232,7 @@ struct intel_pipe_crc_entry { #define INTEL_PIPE_CRC_ENTRIES_NR 128 struct intel_pipe_crc { - struct intel_pipe_crc_entry entries[INTEL_PIPE_CRC_ENTRIES_NR]; + struct intel_pipe_crc_entry *entries; enum intel_pipe_crc_source source; atomic_t head, tail; };