svn commit: r266599 - in user/attilio/rm_vmobj_cache/sys: dev/drm2/ttm x86/iommu

Attilio Rao attilio at FreeBSD.org
Fri May 23 22:39:01 UTC 2014


Author: attilio
Date: Fri May 23 22:39:00 2014
New Revision: 266599
URL: http://svnweb.freebsd.org/changeset/base/266599

Log:
  Page allocated by vm_page_alloc_contig() are always unmanaged, then
  wire them.

Modified:
  user/attilio/rm_vmobj_cache/sys/dev/drm2/ttm/ttm_bo.c
  user/attilio/rm_vmobj_cache/sys/x86/iommu/intel_utils.c

Modified: user/attilio/rm_vmobj_cache/sys/dev/drm2/ttm/ttm_bo.c
==============================================================================
--- user/attilio/rm_vmobj_cache/sys/dev/drm2/ttm/ttm_bo.c	Fri May 23 21:24:31 2014	(r266598)
+++ user/attilio/rm_vmobj_cache/sys/dev/drm2/ttm/ttm_bo.c	Fri May 23 22:39:00 2014	(r266599)
@@ -1472,6 +1472,7 @@ static void ttm_bo_global_kobj_release(s
 {
 
 	ttm_mem_unregister_shrink(glob->mem_glob, &glob->shrink);
+	vm_page_unwire(glob->dummy_read_page, 0);
 	vm_page_free(glob->dummy_read_page);
 }
 
@@ -1494,7 +1495,7 @@ int ttm_bo_global_init(struct drm_global
 	mtx_init(&glob->lru_lock, "ttmlru", NULL, MTX_DEF);
 	glob->mem_glob = bo_ref->mem_glob;
 	glob->dummy_read_page = vm_page_alloc_contig(NULL, 0,
-	    VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ,
+	    VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED,
 	    1, 0, VM_MAX_ADDRESS, PAGE_SIZE, 0, VM_MEMATTR_UNCACHEABLE);
 
 	if (unlikely(glob->dummy_read_page == NULL)) {
@@ -1518,6 +1519,7 @@ int ttm_bo_global_init(struct drm_global
 	return (0);
 
 out_no_shrink:
+	vm_page_unwire(glob->dummy_read_page, 0);
 	vm_page_free(glob->dummy_read_page);
 out_no_drp:
 	free(glob, M_DRM_GLOBAL);

Modified: user/attilio/rm_vmobj_cache/sys/x86/iommu/intel_utils.c
==============================================================================
--- user/attilio/rm_vmobj_cache/sys/x86/iommu/intel_utils.c	Fri May 23 21:24:31 2014	(r266598)
+++ user/attilio/rm_vmobj_cache/sys/x86/iommu/intel_utils.c	Fri May 23 22:39:00 2014	(r266599)
@@ -272,8 +272,8 @@ dmar_pgalloc(vm_object_t obj, vm_pindex_
 			break;
 		}
 		m = vm_page_alloc_contig(obj, idx, VM_ALLOC_NOBUSY |
-		    VM_ALLOC_SYSTEM | VM_ALLOC_NODUMP | zeroed, 1, 0,
-		    dmar_high, PAGE_SIZE, 0, VM_MEMATTR_DEFAULT);
+		    VM_ALLOC_SYSTEM | VM_ALLOC_NODUMP | VM_ALLOC_WIRED |
+		    zeroed, 1, 0, dmar_high, PAGE_SIZE, 0, VM_MEMATTR_DEFAULT);
 		if ((flags & DMAR_PGF_OBJL) == 0)
 			VM_OBJECT_WUNLOCK(obj);
 		if (m != NULL) {
@@ -302,6 +302,7 @@ dmar_pgfree(vm_object_t obj, vm_pindex_t
 		VM_OBJECT_WLOCK(obj);
 	m = vm_page_lookup(obj, idx);
 	if (m != NULL) {
+		vm_page_unwire(m, 0);
 		vm_page_free(m);
 		atomic_subtract_int(&dmar_tbl_pagecnt, 1);
 	}


More information about the svn-src-user mailing list