From owner-svn-src-head@FreeBSD.ORG  Tue Mar  5 09:07:59 2013
Return-Path: <owner-svn-src-head@FreeBSD.ORG>
Delivered-To: svn-src-head@freebsd.org
Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115])
 by hub.freebsd.org (Postfix) with ESMTP id 46DF5347;
 Tue,  5 Mar 2013 09:07:59 +0000 (UTC) (envelope-from kib@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 by mx1.freebsd.org (Postfix) with ESMTP id 17921A90;
 Tue,  5 Mar 2013 09:07:59 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2597wlm008375;
 Tue, 5 Mar 2013 09:07:58 GMT (envelope-from kib@svn.freebsd.org)
Received: (from kib@localhost)
 by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2597wbk008373;
 Tue, 5 Mar 2013 09:07:58 GMT (envelope-from kib@svn.freebsd.org)
Message-Id: <201303050907.r2597wbk008373@svn.freebsd.org>
From: Konstantin Belousov <kib@FreeBSD.org>
Date: Tue, 5 Mar 2013 09:07:58 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-all@freebsd.org,
 svn-src-head@freebsd.org
Subject: svn commit: r247833 - head/sys/dev/drm2
X-SVN-Group: head
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-head@freebsd.org
X-Mailman-Version: 2.1.14
Precedence: list
List-Id: SVN commit messages for the src tree for head/-current
 <svn-src-head.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-head>,
 <mailto:svn-src-head-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-head>
List-Post: <mailto:svn-src-head@freebsd.org>
List-Help: <mailto:svn-src-head-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-head>,
 <mailto:svn-src-head-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 05 Mar 2013 09:07:59 -0000

Author: kib
Date: Tue Mar  5 09:07:58 2013
New Revision: 247833
URL: http://svnweb.freebsd.org/changeset/base/247833

Log:
  Import the drm_mm_debug_table() function.
  
  Sponsored by:	The FreeBSD Foundation
  MFC after:	1 month

Modified:
  head/sys/dev/drm2/drm_mm.c
  head/sys/dev/drm2/drm_mm.h

Modified: head/sys/dev/drm2/drm_mm.c
==============================================================================
--- head/sys/dev/drm2/drm_mm.c	Tue Mar  5 09:07:01 2013	(r247832)
+++ head/sys/dev/drm2/drm_mm.c	Tue Mar  5 09:07:58 2013	(r247833)
@@ -561,3 +561,40 @@ void drm_mm_takedown(struct drm_mm * mm)
 
 	KASSERT(mm->num_unused == 0, ("num_unused != 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;
+	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)
+		printf("%s 0x%08lx-0x%08lx: %8lu: free\n",
+			prefix, hole_start, hole_end,
+			hole_size);
+	total_free += hole_size;
+
+	drm_mm_for_each_node(entry, mm) {
+		printf("%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;
+			printf("%s 0x%08lx-0x%08lx: %8lu: free\n",
+				prefix, hole_start, hole_end,
+				hole_size);
+			total_free += hole_size;
+		}
+	}
+	total = total_free + total_used;
+
+	printf("%s total: %lu, used %lu free %lu\n", prefix, total,
+		total_used, total_free);
+}

Modified: head/sys/dev/drm2/drm_mm.h
==============================================================================
--- head/sys/dev/drm2/drm_mm.h	Tue Mar  5 09:07:01 2013	(r247832)
+++ head/sys/dev/drm2/drm_mm.h	Tue Mar  5 09:07:58 2013	(r247833)
@@ -182,4 +182,6 @@ void drm_mm_init_scan_with_range(struct 
 int drm_mm_scan_add_block(struct drm_mm_node *node);
 int drm_mm_scan_remove_block(struct drm_mm_node *node);
 
+void drm_mm_debug_table(struct drm_mm *mm, const char *prefix);
+
 #endif