<div dir="ltr">Reviewed-by: Rodrigo Vivi <<a href="mailto:rodrigo.vivi@intel.com">rodrigo.vivi@intel.com</a>></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jun 19, 2014 at 12:06 PM, Ben Widawsky <span dir="ltr"><<a href="mailto:benjamin.widawsky@intel.com" target="_blank">benjamin.widawsky@intel.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">We are already using the size to determine whether or not to free the<br>
object, so there is no functional change there. Almost everything else<br>
has changed to static allocations of the drm_mm_node too.<br>
<br>
Aside from bringing this inline with much of our other code, this makes<br>
error paths slightly simpler, which benefits the look of an upcoming<br>
patch.<br>
<br>
Signed-off-by: Ben Widawsky <<a href="mailto:ben@bwidawsk.net">ben@bwidawsk.net</a>><br>
---<br>
 drivers/gpu/drm/i915/i915_drv.h        |  2 +-<br>
 drivers/gpu/drm/i915/i915_gem_stolen.c | 27 ++++++++++-----------------<br>
 2 files changed, 11 insertions(+), 18 deletions(-)<br>
<br>
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h<br>
index 0640071..0003206 100644<br>
--- a/drivers/gpu/drm/i915/i915_drv.h<br>
+++ b/drivers/gpu/drm/i915/i915_drv.h<br>
@@ -605,7 +605,7 @@ struct i915_fbc {<br>
        enum plane plane;<br>
        int y;<br>
<br>
-       struct drm_mm_node *compressed_fb;<br>
+       struct drm_mm_node compressed_fb;<br>
        struct drm_mm_node *compressed_llb;<br>
<br>
        struct intel_fbc_work {<br>
diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c<br>
index 6441178..642fd36 100644<br>
--- a/drivers/gpu/drm/i915/i915_gem_stolen.c<br>
+++ b/drivers/gpu/drm/i915/i915_gem_stolen.c<br>
@@ -106,27 +106,25 @@ static unsigned long i915_stolen_to_physical(struct drm_device *dev)<br>
 static int i915_setup_compression(struct drm_device *dev, int size)<br>
 {<br>
        struct drm_i915_private *dev_priv = dev->dev_private;<br>
-       struct drm_mm_node *compressed_fb, *uninitialized_var(compressed_llb);<br>
+       struct drm_mm_node *uninitialized_var(compressed_llb);<br>
        int ret;<br>
<br>
-       compressed_fb = kzalloc(sizeof(*compressed_fb), GFP_KERNEL);<br>
-       if (!compressed_fb)<br>
-               goto err_llb;<br>
-<br>
        /* Try to over-allocate to reduce reallocations and fragmentation */<br>
-       ret = drm_mm_insert_node(&dev_priv->mm.stolen, compressed_fb,<br>
+       ret = drm_mm_insert_node(&dev_priv->mm.stolen,<br>
+                                &dev_priv->fbc.compressed_fb,<br>
                                 size <<= 1, 4096, DRM_MM_SEARCH_DEFAULT);<br>
        if (ret)<br>
-               ret = drm_mm_insert_node(&dev_priv->mm.stolen, compressed_fb,<br>
+               ret = drm_mm_insert_node(&dev_priv->mm.stolen,<br>
+                                        &dev_priv->fbc.compressed_fb,<br>
                                         size >>= 1, 4096,<br>
                                         DRM_MM_SEARCH_DEFAULT);<br>
        if (ret)<br>
                goto err_llb;<br>
<br>
        if (HAS_PCH_SPLIT(dev))<br>
-               I915_WRITE(ILK_DPFC_CB_BASE, compressed_fb->start);<br>
+               I915_WRITE(ILK_DPFC_CB_BASE, dev_priv->fbc.compressed_fb.start);<br>
        else if (IS_GM45(dev)) {<br>
-               I915_WRITE(DPFC_CB_BASE, compressed_fb->start);<br>
+               I915_WRITE(DPFC_CB_BASE, dev_priv->fbc.compressed_fb.start);<br>
        } else {<br>
                compressed_llb = kzalloc(sizeof(*compressed_llb), GFP_KERNEL);<br>
                if (!compressed_llb)<br>
@@ -140,12 +138,11 @@ static int i915_setup_compression(struct drm_device *dev, int size)<br>
                dev_priv->fbc.compressed_llb = compressed_llb;<br>
<br>
                I915_WRITE(FBC_CFB_BASE,<br>
-                          dev_priv->mm.stolen_base + compressed_fb->start);<br>
+                          dev_priv->mm.stolen_base + dev_priv->fbc.compressed_fb.start);<br>
                I915_WRITE(FBC_LL_BASE,<br>
                           dev_priv->mm.stolen_base + compressed_llb->start);<br>
        }<br>
<br>
-       dev_priv->fbc.compressed_fb = compressed_fb;<br>
        dev_priv->fbc.size = size;<br>
<br>
        DRM_DEBUG_KMS("reserved %d bytes of contiguous stolen space for FBC\n",<br>
@@ -155,9 +152,8 @@ static int i915_setup_compression(struct drm_device *dev, int size)<br>
<br>
 err_fb:<br>
        kfree(compressed_llb);<br>
-       drm_mm_remove_node(compressed_fb);<br>
+       drm_mm_remove_node(&dev_priv->fbc.compressed_fb);<br>
 err_llb:<br>
-       kfree(compressed_fb);<br>
        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);<br>
        return -ENOSPC;<br>
 }<br>
@@ -185,10 +181,7 @@ void i915_gem_stolen_cleanup_compression(struct drm_device *dev)<br>
        if (dev_priv->fbc.size == 0)<br>
                return;<br>
<br>
-       if (dev_priv->fbc.compressed_fb) {<br>
-               drm_mm_remove_node(dev_priv->fbc.compressed_fb);<br>
-               kfree(dev_priv->fbc.compressed_fb);<br>
-       }<br>
+       drm_mm_remove_node(&dev_priv->fbc.compressed_fb);<br>
<br>
        if (dev_priv->fbc.compressed_llb) {<br>
                drm_mm_remove_node(dev_priv->fbc.compressed_llb);<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.0.0<br>
<br>
_______________________________________________<br>
Intel-gfx mailing list<br>
<a href="mailto:Intel-gfx@lists.freedesktop.org">Intel-gfx@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/intel-gfx" target="_blank">http://lists.freedesktop.org/mailman/listinfo/intel-gfx</a><br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Rodrigo Vivi</div><div>Blog: <a href="http://blog.vivi.eng.br" target="_blank">http://blog.vivi.eng.br</a></div><div> </div>
</div>