summaryrefslogtreecommitdiffstats
path: root/sys/dev/drm2/ttm/ttm_bo.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/drm2/ttm/ttm_bo.c')
-rw-r--r--sys/dev/drm2/ttm/ttm_bo.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/dev/drm2/ttm/ttm_bo.c b/sys/dev/drm2/ttm/ttm_bo.c
index 4340ed7..64364d5 100644
--- a/sys/dev/drm2/ttm/ttm_bo.c
+++ b/sys/dev/drm2/ttm/ttm_bo.c
@@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$");
#include <dev/drm2/ttm/ttm_module.h>
#include <dev/drm2/ttm/ttm_bo_driver.h>
#include <dev/drm2/ttm/ttm_placement.h>
+#include <vm/vm_pageout.h>
#define TTM_ASSERT_LOCKED(param)
#define TTM_DEBUG(fmt, arg...)
@@ -1489,15 +1490,23 @@ int ttm_bo_global_init(struct drm_global_reference *ref)
container_of(ref, struct ttm_bo_global_ref, ref);
struct ttm_bo_global *glob = ref->object;
int ret;
+ int tries;
sx_init(&glob->device_list_mutex, "ttmdlm");
mtx_init(&glob->lru_lock, "ttmlru", NULL, MTX_DEF);
glob->mem_glob = bo_ref->mem_glob;
+ tries = 0;
+retry:
glob->dummy_read_page = vm_page_alloc_contig(NULL, 0,
VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ,
1, 0, VM_MAX_ADDRESS, PAGE_SIZE, 0, VM_MEMATTR_UNCACHEABLE);
if (unlikely(glob->dummy_read_page == NULL)) {
+ if (tries < 1) {
+ vm_pageout_grow_cache(tries, 0, VM_MAX_ADDRESS);
+ tries++;
+ goto retry;
+ }
ret = -ENOMEM;
goto out_no_drp;
}
OpenPOWER on IntegriCloud