summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2013-07-27 16:44:37 +0000
committerkib <kib@FreeBSD.org>2013-07-27 16:44:37 +0000
commit7c8915aba7b1a5f66c9eb2d0faefe45750c41866 (patch)
tree96414538052757ac3b0f68fd1cd4fc8b3170d505
parentece824c2dc95bb1fc9b769c661303b9e24f3301b (diff)
downloadFreeBSD-src-7c8915aba7b1a5f66c9eb2d0faefe45750c41866.zip
FreeBSD-src-7c8915aba7b1a5f66c9eb2d0faefe45750c41866.tar.gz
MFgem r251960: re-check the mgt device object for the requested page
after the object was relocked. Tested by: dumbbell Sponsored by: The FreeBSD Foundation MFC after: 1 week
-rw-r--r--sys/dev/drm2/ttm/ttm_bo_vm.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/dev/drm2/ttm/ttm_bo_vm.c b/sys/dev/drm2/ttm/ttm_bo_vm.c
index 40a0fe4..08e1c87 100644
--- a/sys/dev/drm2/ttm/ttm_bo_vm.c
+++ b/sys/dev/drm2/ttm/ttm_bo_vm.c
@@ -102,7 +102,7 @@ ttm_bo_vm_fault(vm_object_t vm_obj, vm_ooffset_t offset,
struct ttm_buffer_object *bo = vm_obj->handle;
struct ttm_bo_device *bdev = bo->bdev;
struct ttm_tt *ttm = NULL;
- vm_page_t m, oldm;
+ vm_page_t m, m1, oldm;
int ret;
int retval = VM_PAGER_OK;
struct ttm_mem_type_manager *man =
@@ -220,7 +220,14 @@ reserve:
}
m->valid = VM_PAGE_BITS_ALL;
*mres = m;
- vm_page_insert(m, vm_obj, OFF_TO_IDX(offset));
+ m1 = vm_page_lookup(vm_obj, OFF_TO_IDX(offset));
+ if (m1 == NULL) {
+ vm_page_insert(m, vm_obj, OFF_TO_IDX(offset));
+ } else {
+ KASSERT(m == m1,
+ ("inconsistent insert bo %p m %p m1 %p offset %jx",
+ bo, m, m1, (uintmax_t)offset));
+ }
vm_page_busy(m);
if (oldm != NULL) {
OpenPOWER on IntegriCloud