[Intel-gfx] [PATCH 1/4] drm/i915: Move compressed_fb to static allocation
Rodrigo Vivi
rodrigo.vivi at gmail.com
Tue Jul 1 02:15:55 CEST 2014
Reviewed-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
On Thu, Jun 19, 2014 at 12:06 PM, Ben Widawsky <benjamin.widawsky at intel.com>
wrote:
> We are already using the size to determine whether or not to free the
> object, so there is no functional change there. Almost everything else
> has changed to static allocations of the drm_mm_node too.
>
> Aside from bringing this inline with much of our other code, this makes
> error paths slightly simpler, which benefits the look of an upcoming
> patch.
>
> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> ---
> drivers/gpu/drm/i915/i915_drv.h | 2 +-
> drivers/gpu/drm/i915/i915_gem_stolen.c | 27 ++++++++++-----------------
> 2 files changed, 11 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h
> b/drivers/gpu/drm/i915/i915_drv.h
> index 0640071..0003206 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -605,7 +605,7 @@ struct i915_fbc {
> enum plane plane;
> int y;
>
> - struct drm_mm_node *compressed_fb;
> + struct drm_mm_node compressed_fb;
> struct drm_mm_node *compressed_llb;
>
> struct intel_fbc_work {
> diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c
> b/drivers/gpu/drm/i915/i915_gem_stolen.c
> index 6441178..642fd36 100644
> --- a/drivers/gpu/drm/i915/i915_gem_stolen.c
> +++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
> @@ -106,27 +106,25 @@ static unsigned long i915_stolen_to_physical(struct
> drm_device *dev)
> static int i915_setup_compression(struct drm_device *dev, int size)
> {
> struct drm_i915_private *dev_priv = dev->dev_private;
> - struct drm_mm_node *compressed_fb,
> *uninitialized_var(compressed_llb);
> + struct drm_mm_node *uninitialized_var(compressed_llb);
> int ret;
>
> - compressed_fb = kzalloc(sizeof(*compressed_fb), GFP_KERNEL);
> - if (!compressed_fb)
> - goto err_llb;
> -
> /* Try to over-allocate to reduce reallocations and fragmentation
> */
> - ret = drm_mm_insert_node(&dev_priv->mm.stolen, compressed_fb,
> + ret = drm_mm_insert_node(&dev_priv->mm.stolen,
> + &dev_priv->fbc.compressed_fb,
> size <<= 1, 4096, DRM_MM_SEARCH_DEFAULT);
> if (ret)
> - ret = drm_mm_insert_node(&dev_priv->mm.stolen,
> compressed_fb,
> + ret = drm_mm_insert_node(&dev_priv->mm.stolen,
> + &dev_priv->fbc.compressed_fb,
> size >>= 1, 4096,
> DRM_MM_SEARCH_DEFAULT);
> if (ret)
> goto err_llb;
>
> if (HAS_PCH_SPLIT(dev))
> - I915_WRITE(ILK_DPFC_CB_BASE, compressed_fb->start);
> + I915_WRITE(ILK_DPFC_CB_BASE,
> dev_priv->fbc.compressed_fb.start);
> else if (IS_GM45(dev)) {
> - I915_WRITE(DPFC_CB_BASE, compressed_fb->start);
> + I915_WRITE(DPFC_CB_BASE,
> dev_priv->fbc.compressed_fb.start);
> } else {
> compressed_llb = kzalloc(sizeof(*compressed_llb),
> GFP_KERNEL);
> if (!compressed_llb)
> @@ -140,12 +138,11 @@ static int i915_setup_compression(struct drm_device
> *dev, int size)
> dev_priv->fbc.compressed_llb = compressed_llb;
>
> I915_WRITE(FBC_CFB_BASE,
> - dev_priv->mm.stolen_base +
> compressed_fb->start);
> + dev_priv->mm.stolen_base +
> dev_priv->fbc.compressed_fb.start);
> I915_WRITE(FBC_LL_BASE,
> dev_priv->mm.stolen_base +
> compressed_llb->start);
> }
>
> - dev_priv->fbc.compressed_fb = compressed_fb;
> dev_priv->fbc.size = size;
>
> DRM_DEBUG_KMS("reserved %d bytes of contiguous stolen space for
> FBC\n",
> @@ -155,9 +152,8 @@ static int i915_setup_compression(struct drm_device
> *dev, int size)
>
> err_fb:
> kfree(compressed_llb);
> - drm_mm_remove_node(compressed_fb);
> + drm_mm_remove_node(&dev_priv->fbc.compressed_fb);
> err_llb:
> - kfree(compressed_fb);
> pr_info_once("drm: not enough stolen space for compressed buffer
> (need %d more bytes), disabling. Hint: you may be able to increase stolen
> memory size in the BIOS to avoid this.\n", size);
> return -ENOSPC;
> }
> @@ -185,10 +181,7 @@ void i915_gem_stolen_cleanup_compression(struct
> drm_device *dev)
> if (dev_priv->fbc.size == 0)
> return;
>
> - if (dev_priv->fbc.compressed_fb) {
> - drm_mm_remove_node(dev_priv->fbc.compressed_fb);
> - kfree(dev_priv->fbc.compressed_fb);
> - }
> + drm_mm_remove_node(&dev_priv->fbc.compressed_fb);
>
> if (dev_priv->fbc.compressed_llb) {
> drm_mm_remove_node(dev_priv->fbc.compressed_llb);
> --
> 2.0.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
--
Rodrigo Vivi
Blog: http://blog.vivi.eng.br
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/intel-gfx/attachments/20140630/b36f963f/attachment.html>
More information about the Intel-gfx
mailing list