From patchwork Wed Mar 17 20:50:01 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pauli Nieminen X-Patchwork-Id: 86509 Received: from lists.sourceforge.net (lists.sourceforge.net [216.34.181.88]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o2HKpYnC022818 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Wed, 17 Mar 2010 20:52:11 GMT Received: from localhost ([127.0.0.1] helo=sfs-ml-3.v29.ch3.sourceforge.com) by sfs-ml-3.v29.ch3.sourceforge.com with esmtp (Exim 4.69) (envelope-from ) id 1Ns0CC-0002Tk-C1; Wed, 17 Mar 2010 20:50:28 +0000 Received: from sfi-mx-4.v28.ch3.sourceforge.com ([172.29.28.124] helo=mx.sourceforge.net) by sfs-ml-3.v29.ch3.sourceforge.com with esmtp (Exim 4.69) (envelope-from ) id 1Ns0CB-0002TT-PJ for dri-devel@lists.sourceforge.net; Wed, 17 Mar 2010 20:50:27 +0000 Received-SPF: neutral (sfi-mx-4.v28.ch3.sourceforge.com: 213.243.153.189 is neither permitted nor denied by domain of gmail.com) client-ip=213.243.153.189; envelope-from=suokkos@gmail.com; helo=filtteri6.pp.htv.fi; Received: from filtteri6.pp.htv.fi ([213.243.153.189]) by sfi-mx-4.v28.ch3.sourceforge.com with esmtp (Exim 4.69) id 1Ns0CA-00026M-D2 for dri-devel@lists.sourceforge.net; Wed, 17 Mar 2010 20:50:27 +0000 Received: from localhost (localhost [127.0.0.1]) by filtteri6.pp.htv.fi (Postfix) with ESMTP id 4587756E0E8; Wed, 17 Mar 2010 22:50:19 +0200 (EET) X-Virus-Scanned: Debian amavisd-new at pp.htv.fi Received: from smtp6.welho.com ([213.243.153.40]) by localhost (filtteri6.pp.htv.fi [213.243.153.189]) (amavisd-new, port 10024) with ESMTP id Lf-7W2XXbt+J; Wed, 17 Mar 2010 22:50:19 +0200 (EET) Received: from localhost.localdomain (cs181130083.pp.htv.fi [82.181.130.83]) by smtp6.welho.com (Postfix) with ESMTP id E52045BC005; Wed, 17 Mar 2010 22:50:18 +0200 (EET) From: Pauli Nieminen To: dri-devel@lists.sourceforge.net Subject: [PATCH 2/7] drm/ttm: Add debugfs output entry to pool allocator. Date: Wed, 17 Mar 2010 22:50:01 +0200 Message-Id: <1268859006-18707-3-git-send-email-suokkos@gmail.com> X-Mailer: git-send-email 1.6.3.3 In-Reply-To: <1268859006-18707-2-git-send-email-suokkos@gmail.com> References: <1268859006-18707-1-git-send-email-suokkos@gmail.com> <1268859006-18707-2-git-send-email-suokkos@gmail.com> X-Spam-Score: 1.0 (+) X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. 1.2 SPF_NEUTRAL SPF: sender does not match SPF record (neutral) -0.2 AWL AWL: From: address is in the auto white-list X-Headers-End: 1Ns0CA-00026M-D2 X-BeenThere: dri-devel@lists.sourceforge.net X-Mailman-Version: 2.1.9 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.sourceforge.net X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Wed, 17 Mar 2010 20:52:12 +0000 (UTC) diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c index 768d479..206bee9 100644 --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -73,6 +74,9 @@ struct ttm_page_pool { unsigned npages; unsigned nlowpages; unsigned alloc_size; + char *name; + unsigned long nfrees; + unsigned long nrefills; }; #define NUM_POOLS 4 @@ -240,6 +244,7 @@ static bool ttm_page_pool_free_pages_locked(struct ttm_page_pool *pool, { unsigned tmp; pool->npages -= freed_pages; + pool->nfrees += freed_pages; /* Calculate number of pages taken from nlowpages * npages_to_free = 1/2*nlowpages => * nlowpages_delta = 2*freed_pages @@ -320,6 +325,7 @@ restart: } pool->npages -= freed_pages; + pool->nfrees += freed_pages; /* set nlowpages to zero to prevent extra freeing in thsi patch. * nlowpages is reseted later after all work has been finnished. **/ @@ -537,6 +543,7 @@ static void ttm_page_pool_fill_locked(struct ttm_page_pool *pool, if (!r) { list_splice(&new_pages, &pool->list); + ++pool->nrefills; pool->npages += pool->alloc_size; /* Have to remmber to update the low number of pages * too */ @@ -724,14 +731,16 @@ void ttm_put_pages(struct list_head *pages, int flags, round_jiffies(_manager.free_interval)); } -static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, int flags) +static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, int flags, + char *name) { spin_lock_init(&pool->lock); pool->fill_lock = false; INIT_LIST_HEAD(&pool->list); - pool->npages = pool->nlowpages = 0; + pool->npages = pool->nlowpages = pool->nfrees = 0; pool->alloc_size = NUM_PAGES_TO_ALLOC; pool->gfp_flags = flags; + pool->name = name; } int ttm_page_alloc_init(struct ttm_mem_global *glob) @@ -741,13 +750,15 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob) printk(KERN_INFO "[ttm] Initializing pool allocator.\n"); - ttm_page_pool_init_locked(&_manager.wc_pool, GFP_HIGHUSER); + ttm_page_pool_init_locked(&_manager.wc_pool, GFP_HIGHUSER, "wc"); - ttm_page_pool_init_locked(&_manager.uc_pool, GFP_HIGHUSER); + ttm_page_pool_init_locked(&_manager.uc_pool, GFP_HIGHUSER, "uc"); - ttm_page_pool_init_locked(&_manager.wc_pool_dma32, GFP_USER | GFP_DMA32); + ttm_page_pool_init_locked(&_manager.wc_pool_dma32, GFP_USER | GFP_DMA32, + "wc dma"); - ttm_page_pool_init_locked(&_manager.uc_pool_dma32, GFP_USER | GFP_DMA32); + ttm_page_pool_init_locked(&_manager.uc_pool_dma32, GFP_USER | GFP_DMA32, + "uc dma"); _manager.free_interval = msecs_to_jiffies(PAGE_FREE_INTERVAL); _manager.small_allocation = SMALL_ALLOCATION; @@ -773,3 +784,26 @@ void ttm_page_alloc_fini() for (i = 0; i < NUM_POOLS; ++i) ttm_page_pool_free(&_manager.pools[i], FREE_ALL_PAGES); } + +int ttm_page_alloc_debugfs(struct seq_file *m, void *data) +{ + struct ttm_page_pool *p; + unsigned i; + char *h[] = {"pool", "refills", "pages freed", "size", "min size"}; + if (atomic_read(&_manager.page_alloc_inited) == 0) { + seq_printf(m, "No pool allocator running.\n"); + return 0; + } + seq_printf(m, "%6s %12s %13s %8s %8s\n", + h[0], h[1], h[2], h[3], h[4]); + for (i = 0; i < NUM_POOLS; ++i) { + p = &_manager.pools[i]; + + seq_printf(m, "%6s %12ld %13ld %8d %8d\n", + p->name, p->nrefills, + p->nfrees, p->npages, + p->nlowpages); + } + return 0; +} +EXPORT_SYMBOL(ttm_page_alloc_debugfs); diff --git a/include/drm/ttm/ttm_page_alloc.h b/include/drm/ttm/ttm_page_alloc.h index 485514a..2df0caa 100644 --- a/include/drm/ttm/ttm_page_alloc.h +++ b/include/drm/ttm/ttm_page_alloc.h @@ -61,4 +61,8 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob); */ void ttm_page_alloc_fini(void); +/** + * Output the state of pools to debugfs file + */ +extern int ttm_page_alloc_debugfs(struct seq_file *m, void *data); #endif