nouveau: add a way to override single pushbuffer memory limits
Currently single pushbuffer can take up to 80% of VRAM and 80% of GART. As this value seems to be arbitrary (and user may need to set it differently) this patch adds support for 2 environment variables: NOUVEAU_LIBDRM_VRAM_LIMIT_PERCENT (default 80) NOUVEAU_LIBDRM_GART_LIMIT_PERCENT (default 80) which will let users override pushbuffer VRAM/GART limits. Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>main
parent
284421a569
commit
f92d7969bf
|
@ -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;
|
||||
|
|
|
@ -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 *
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue