Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2c54b133 authored by Daniel Vetter's avatar Daniel Vetter Committed by Dave Airlie
Browse files

drm/mm: fix debug table BUG



In

commit 3a359f0b
Author: Daniel Vetter <daniel.vetter@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 9e8944ab
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Thu Nov 15 11:32:17 2012 +0000

   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 <chris@chris-wilson.co.uk>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 4a88f73f
Loading
Loading
Loading
Loading
+19 −18
Original line number Original line Diff line number Diff line
@@ -714,36 +714,37 @@ void drm_mm_takedown(struct drm_mm * mm)
}
}
EXPORT_SYMBOL(drm_mm_takedown);
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;
	unsigned long hole_start, hole_end, hole_size;


	hole_start = drm_mm_hole_node_start(&mm->head_node);
	if (entry->hole_follows) {
	hole_end = drm_mm_hole_node_end(&mm->head_node);
		hole_start = drm_mm_hole_node_start(entry);
		hole_end = drm_mm_hole_node_end(entry);
		hole_size = hole_end - hole_start;
		hole_size = hole_end - hole_start;
	if (hole_size)
		printk(KERN_DEBUG "%s 0x%08lx-0x%08lx: %8lu: free\n",
		printk(KERN_DEBUG "%s 0x%08lx-0x%08lx: %8lu: free\n",
			prefix, hole_start, hole_end,
			prefix, hole_start, hole_end,
			hole_size);
			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) {
	drm_mm_for_each_node(entry, mm) {
		printk(KERN_DEBUG "%s 0x%08lx-0x%08lx: %8lu: used\n",
		printk(KERN_DEBUG "%s 0x%08lx-0x%08lx: %8lu: used\n",
			prefix, entry->start, entry->start + entry->size,
			prefix, entry->start, entry->start + entry->size,
			entry->size);
			entry->size);
		total_used += entry->size;
		total_used += entry->size;

		total_free += drm_mm_debug_hole(entry, prefix);
		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 = total_free + total_used;
	total = total_free + total_used;