All of lore.kernel.org
 help / color / mirror / Atom feed
From: Roger He <Hongbo.He-5C7GfCeVMHo@public.gmane.org>
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Cc: Roger He <Hongbo.He-5C7GfCeVMHo@public.gmane.org>,
	Christian.Koenig-5C7GfCeVMHo@public.gmane.org
Subject: [PATCH 3/4] drm/ttm: add static buffer for ttm_pages_put to support pool shrink
Date: Wed, 22 Nov 2017 13:36:55 +0800	[thread overview]
Message-ID: <1511329016-552-3-git-send-email-Hongbo.He@amd.com> (raw)
In-Reply-To: <1511329016-552-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>

Change-Id: Ic20c016eb3043d7cfedc2e3648790a017168da6c
Signed-off-by: Roger He <Hongbo.He@amd.com>
---
 drivers/gpu/drm/ttm/ttm_page_alloc.c | 28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
index de64209..37c2f2f 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -285,20 +285,27 @@ static struct ttm_page_pool *ttm_get_pool(int flags, bool huge,
 }
 
 /* set memory back to wb and free the pages. */
+#define STATIC_BUF_PUT_SIZE 512
 static void ttm_pages_put(struct page *pages[], unsigned npages,
-		unsigned int order)
+		unsigned int order, bool use_static)
 {
+	static struct page *static_buf_put[STATIC_BUF_PUT_SIZE];
 	struct page **pages_to_free = NULL;
 	struct page **pages_array;
 	struct page *p;
 	unsigned int i, j, pages_nr = (1 << order);
 
+	BUG_ON(use_static && pages_nr > STATIC_BUF_PUT_SIZE);
 	if (order > 0) {
-		pages_to_free = kmalloc_array(pages_nr, sizeof(struct page *),
-					GFP_KERNEL);
-		if (!pages_to_free) {
-			pr_err("Failed to allocate memory for ttm pages put operation\n");
-			return;
+		if (use_static)
+			pages_to_free = static_buf_put;
+		else {
+			pages_to_free = kmalloc_array(pages_nr,
+				sizeof(struct page *), GFP_KERNEL);
+			if (!pages_to_free) {
+				pr_err("Failed to allocate memory for ttm pages put operation\n");
+				return;
+			}
 		}
 	}
 
@@ -317,7 +324,8 @@ static void ttm_pages_put(struct page *pages[], unsigned npages,
 		__free_pages(pages[i], order);
 	}
 
-	kfree(pages_to_free);
+	if (!use_static)
+		kfree(pages_to_free);
 }
 
 static void ttm_pool_update_free_locked(struct ttm_page_pool *pool,
@@ -380,7 +388,8 @@ static int ttm_page_pool_free(struct ttm_page_pool *pool, unsigned nr_free,
 			 */
 			spin_unlock_irqrestore(&pool->lock, irq_flags);
 
-			ttm_pages_put(pages_to_free, freed_pages, pool->order);
+			ttm_pages_put(pages_to_free, freed_pages, pool->order,
+					use_static);
 			if (likely(nr_free != FREE_ALL_PAGES))
 				nr_free -= freed_pages;
 
@@ -415,7 +424,8 @@ static int ttm_page_pool_free(struct ttm_page_pool *pool, unsigned nr_free,
 	spin_unlock_irqrestore(&pool->lock, irq_flags);
 
 	if (freed_pages)
-		ttm_pages_put(pages_to_free, freed_pages, pool->order);
+		ttm_pages_put(pages_to_free, freed_pages, pool->order,
+			use_static);
 out:
 	if (pages_to_free != static_buf)
 		kfree(pages_to_free);
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

  parent reply	other threads:[~2017-11-22  5:36 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-22  5:36 [PATCH 1/4] drm/ttm: add page order in page pool Roger He
2017-11-22  5:36 ` [PATCH 2/4] drm/ttm: add page order support in ttm_pages_put Roger He
2017-11-22  6:01   ` Chunming Zhou
2017-11-22  7:40     ` He, Roger
     [not found]   ` <1511329016-552-2-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-11-22  9:29     ` Christian König
     [not found]       ` <b6c683f7-0fda-e6cd-f1d4-6037c889eca6-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-11-22  9:48         ` He, Roger
     [not found] ` <1511329016-552-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-11-22  5:36   ` Roger He [this message]
2017-11-22  5:36   ` [PATCH 4/4] drm/ttm: free one in huge pool even shrink request less than one element Roger He
2017-11-22  6:38   ` [PATCH 1/4] drm/ttm: add page order in page pool Chunming Zhou
2017-11-22  7:47   ` Christian König
     [not found]     ` <6c134a88-2322-b131-d79f-0e5e3b74cd17-5C7GfCeVMHo@public.gmane.org>
2017-11-22  8:10       ` He, Roger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1511329016-552-3-git-send-email-Hongbo.He@amd.com \
    --to=hongbo.he-5c7gfcevmho@public.gmane.org \
    --cc=Christian.Koenig-5C7GfCeVMHo@public.gmane.org \
    --cc=amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.