[PATCH 1/3] drm/mm: fix debug table BUG

2013-07-01 Thread Daniel Vetter
In

commit 3a359f0b21ab218c1bf7a6a1b638b6fd143d0b99
Author: Daniel Vetter 
Date:   Sat Apr 20 12:08:11 2013 +0200

drm/mm: fix dump table BUG

I've failed to fix both instances of the regression introduced in

commit 9e8944ab564f2e3dde90a518cd32048c58918608
Author: Chris Wilson 
Date:   Thu Nov 15 11:32:17 2012 +

   drm: Introduce an iterator over holes in the drm_mm range manager

Patch this up in the same way by extracting the hole debug logic
into it's own function, since that'll also clarify the logic a bit.

Cc: Chris Wilson 
Signed-off-by: Daniel Vetter 
---
 drivers/gpu/drm/drm_mm.c | 37 +++--
 1 file changed, 19 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
index 07cf99c..f9d4873 100644
--- a/drivers/gpu/drm/drm_mm.c
+++ b/drivers/gpu/drm/drm_mm.c
@@ -716,36 +716,37 @@ void drm_mm_takedown(struct drm_mm * mm)
 }
 EXPORT_SYMBOL(drm_mm_takedown);

-void drm_mm_debug_table(struct drm_mm *mm, const char *prefix)
+static unsigned long drm_mm_debug_hole(struct drm_mm_node *entry,
+  const char *prefix)
 {
-   struct drm_mm_node *entry;
-   unsigned long total_used = 0, total_free = 0, total = 0;
unsigned long hole_start, hole_end, hole_size;

-   hole_start = drm_mm_hole_node_start(>head_node);
-   hole_end = drm_mm_hole_node_end(>head_node);
-   hole_size = hole_end - hole_start;
-   if (hole_size)
+   if (entry->hole_follows) {
+   hole_start = drm_mm_hole_node_start(entry);
+   hole_end = drm_mm_hole_node_end(entry);
+   hole_size = hole_end - hole_start;
printk(KERN_DEBUG "%s 0x%08lx-0x%08lx: %8lu: free\n",
prefix, hole_start, hole_end,
hole_size);
-   total_free += hole_size;
+   return hole_size;
+   }
+
+   return 0;
+}
+
+void drm_mm_debug_table(struct drm_mm *mm, const char *prefix)
+{
+   struct drm_mm_node *entry;
+   unsigned long total_used = 0, total_free = 0, total = 0;
+
+   total_free += drm_mm_debug_hole(>head_node, prefix);

drm_mm_for_each_node(entry, mm) {
printk(KERN_DEBUG "%s 0x%08lx-0x%08lx: %8lu: used\n",
prefix, entry->start, entry->start + entry->size,
entry->size);
total_used += entry->size;
-
-   if (entry->hole_follows) {
-   hole_start = drm_mm_hole_node_start(entry);
-   hole_end = drm_mm_hole_node_end(entry);
-   hole_size = hole_end - hole_start;
-   printk(KERN_DEBUG "%s 0x%08lx-0x%08lx: %8lu: free\n",
-   prefix, hole_start, hole_end,
-   hole_size);
-   total_free += hole_size;
-   }
+   total_free += drm_mm_debug_hole(entry, prefix);
}
total = total_free + total_used;

-- 
1.8.3.1



[PATCH 1/3] drm/mm: fix debug table BUG

2013-07-01 Thread Daniel Vetter
In

commit 3a359f0b21ab218c1bf7a6a1b638b6fd143d0b99
Author: Daniel Vetter daniel.vet...@ffwll.ch
Date:   Sat Apr 20 12:08:11 2013 +0200

drm/mm: fix dump table BUG

I've failed to fix both instances of the regression introduced in

commit 9e8944ab564f2e3dde90a518cd32048c58918608
Author: Chris Wilson ch...@chris-wilson.co.uk
Date:   Thu Nov 15 11:32:17 2012 +

   drm: Introduce an iterator over holes in the drm_mm range manager

Patch this up in the same way by extracting the hole debug logic
into it's own function, since that'll also clarify the logic a bit.

Cc: Chris Wilson ch...@chris-wilson.co.uk
Signed-off-by: Daniel Vetter daniel.vet...@ffwll.ch
---
 drivers/gpu/drm/drm_mm.c | 37 +++--
 1 file changed, 19 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
index 07cf99c..f9d4873 100644
--- a/drivers/gpu/drm/drm_mm.c
+++ b/drivers/gpu/drm/drm_mm.c
@@ -716,36 +716,37 @@ void drm_mm_takedown(struct drm_mm * mm)
 }
 EXPORT_SYMBOL(drm_mm_takedown);
 
-void drm_mm_debug_table(struct drm_mm *mm, const char *prefix)
+static unsigned long drm_mm_debug_hole(struct drm_mm_node *entry,
+  const char *prefix)
 {
-   struct drm_mm_node *entry;
-   unsigned long total_used = 0, total_free = 0, total = 0;
unsigned long hole_start, hole_end, hole_size;
 
-   hole_start = drm_mm_hole_node_start(mm-head_node);
-   hole_end = drm_mm_hole_node_end(mm-head_node);
-   hole_size = hole_end - hole_start;
-   if (hole_size)
+   if (entry-hole_follows) {
+   hole_start = drm_mm_hole_node_start(entry);
+   hole_end = drm_mm_hole_node_end(entry);
+   hole_size = hole_end - hole_start;
printk(KERN_DEBUG %s 0x%08lx-0x%08lx: %8lu: free\n,
prefix, hole_start, hole_end,
hole_size);
-   total_free += hole_size;
+   return hole_size;
+   }
+
+   return 0;
+}
+
+void drm_mm_debug_table(struct drm_mm *mm, const char *prefix)
+{
+   struct drm_mm_node *entry;
+   unsigned long total_used = 0, total_free = 0, total = 0;
+
+   total_free += drm_mm_debug_hole(mm-head_node, prefix);
 
drm_mm_for_each_node(entry, mm) {
printk(KERN_DEBUG %s 0x%08lx-0x%08lx: %8lu: used\n,
prefix, entry-start, entry-start + entry-size,
entry-size);
total_used += entry-size;
-
-   if (entry-hole_follows) {
-   hole_start = drm_mm_hole_node_start(entry);
-   hole_end = drm_mm_hole_node_end(entry);
-   hole_size = hole_end - hole_start;
-   printk(KERN_DEBUG %s 0x%08lx-0x%08lx: %8lu: free\n,
-   prefix, hole_start, hole_end,
-   hole_size);
-   total_free += hole_size;
-   }
+   total_free += drm_mm_debug_hole(entry, prefix);
}
total = total_free + total_used;
 
-- 
1.8.3.1

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel