Re: [Intel-gfx] [PATCH 1/4] drm/i915: Move compressed_fb to static allocation

2014-06-30 Thread Rodrigo Vivi
Reviewed-by: Rodrigo Vivi rodrigo.v...@intel.com


On Thu, Jun 19, 2014 at 12:06 PM, Ben Widawsky benjamin.widaw...@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 b...@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@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/intel-gfx




-- 
Rodrigo Vivi
Blog: 

[Intel-gfx] [PATCH 1/4] drm/i915: Move compressed_fb to static allocation

2014-06-19 Thread Ben Widawsky
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 b...@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@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx