[Nouveau] [libdrm PATCH 2/2] nouveau: add a way to override single pushbuffer vram/gart limits

Marcin Slusarz marcin.slusarz at gmail.com
Tue Mar 5 12:14:54 PST 2013


Add environment variables:
NOUVEAU_LIBDRM_VRAM_LIMIT_PERCENT
NOUVEAU_LIBDRM_GART_LIMIT_PERCENT
which will allow override how much VRAM/GART single pushbuffer can take.
Default to 80.

Signed-off-by: Marcin Slusarz <marcin.slusarz at gmail.com>
---
 nouveau/nouveau.c | 18 ++++++++++++++++--
 nouveau/private.h |  1 +
 nouveau/pushbuf.c |  6 ++++--
 3 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/nouveau/nouveau.c b/nouveau/nouveau.c
index 9b32e31..ee7893b 100644
--- a/nouveau/nouveau.c
+++ b/nouveau/nouveau.c
@@ -77,6 +77,7 @@ nouveau_device_wrap(int fd, int close, struct nouveau_device **pdev)
 	uint64_t chipset, vram, gart, bousage;
 	drmVersionPtr ver;
 	int ret;
+	char *tmp;
 
 #ifdef DEBUG
 	debug_init(getenv("NOUVEAU_LIBDRM_DEBUG"));
@@ -114,14 +115,27 @@ nouveau_device_wrap(int fd, int close, struct nouveau_device **pdev)
 		nvdev->have_bo_usage = (bousage != 0);
 
 	nvdev->close = close;
+
+	tmp = getenv("NOUVEAU_LIBDRM_VRAM_LIMIT_PERCENT");
+	if (tmp)
+		nvdev->vram_limit_percent = atoi(tmp);
+	else
+		nvdev->vram_limit_percent = 80;
+	tmp = getenv("NOUVEAU_LIBDRM_GART_LIMIT_PERCENT");
+	if (tmp)
+		nvdev->gart_limit_percent = atoi(tmp);
+	else
+		nvdev->gart_limit_percent = 80;
 	DRMINITLISTHEAD(&nvdev->bo_list);
 	nvdev->base.object.oclass = NOUVEAU_DEVICE_CLASS;
 	nvdev->base.lib_version = 0x01000000;
 	nvdev->base.chipset = chipset;
 	nvdev->base.vram_size = vram;
 	nvdev->base.gart_size = gart;
-	nvdev->base.vram_limit = (nvdev->base.vram_size * 80) / 100;
-	nvdev->base.gart_limit = (nvdev->base.gart_size * 80) / 100;
+	nvdev->base.vram_limit =
+		(nvdev->base.vram_size * nvdev->vram_limit_percent) / 100;
+	nvdev->base.gart_limit =
+		(nvdev->base.gart_size * nvdev->gart_limit_percent) / 100;
 
 	*pdev = &nvdev->base;
 	return 0;
diff --git a/nouveau/private.h b/nouveau/private.h
index 8a5cb26..60714b8 100644
--- a/nouveau/private.h
+++ b/nouveau/private.h
@@ -99,6 +99,7 @@ struct nouveau_device_priv {
 	uint32_t *client;
 	int nr_client;
 	bool have_bo_usage;
+	int gart_limit_percent, vram_limit_percent;
 };
 
 static inline struct nouveau_device_priv *
diff --git a/nouveau/pushbuf.c b/nouveau/pushbuf.c
index e720a08..0fd0c47 100644
--- a/nouveau/pushbuf.c
+++ b/nouveau/pushbuf.c
@@ -347,8 +347,10 @@ pushbuf_submit(struct nouveau_pushbuf *push, struct nouveau_object *chan)
 					  &req, sizeof(req));
 		nvpb->suffix0 = req.suffix0;
 		nvpb->suffix1 = req.suffix1;
-		dev->vram_limit = (req.vram_available * 80) / 100;
-		dev->gart_limit = (req.gart_available * 80) / 100;
+		dev->vram_limit = (req.vram_available *
+				nouveau_device(dev)->vram_limit_percent) / 100;
+		dev->gart_limit = (req.gart_available *
+				nouveau_device(dev)->gart_limit_percent) / 100;
 #else
 		if (dbg_on(31))
 			ret = -EINVAL;
-- 
1.8.1.4



More information about the Nouveau mailing list