summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authortijl <tijl@FreeBSD.org>2014-12-02 14:21:06 +0000
committertijl <tijl@FreeBSD.org>2014-12-02 14:21:06 +0000
commitf3fce3afbd1c4050c718893066b4e89d130ef5d9 (patch)
tree07c6a0a43bf7bed843bf1adc6f0f4cc79c11bc7b /sys/dev
parent5bc138563e4ed95ebccf89ef0ea259d8d15978ac (diff)
downloadFreeBSD-src-f3fce3afbd1c4050c718893066b4e89d130ef5d9.zip
FreeBSD-src-f3fce3afbd1c4050c718893066b4e89d130ef5d9.tar.gz
MFC r269634:
drm: fix usage of vm_phys_fictitious_to_vm_page vm_phys_fictitious_to_vm_page should not be called directly, even when operating on a range that has been registered using vm_phys_fictitious_reg_range. PHYS_TO_VM_PAGE should be used instead because on arches that use VM_PHYSSEG_DENSE the page might come directly from vm_page_array. Reported by: nwhitehorn Tested by: nwhitehorn, David Mackay <davidm.jx8p@gmail.com> Sponsored by: Citrix Systems R&D
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/drm2/i915/i915_gem.c6
-rw-r--r--sys/dev/drm2/ttm/ttm_bo_vm.c8
2 files changed, 10 insertions, 4 deletions
diff --git a/sys/dev/drm2/i915/i915_gem.c b/sys/dev/drm2/i915/i915_gem.c
index f3736c5..1e0a13e 100644
--- a/sys/dev/drm2/i915/i915_gem.c
+++ b/sys/dev/drm2/i915/i915_gem.c
@@ -1429,8 +1429,10 @@ retry:
obj->fault_mappable = true;
VM_OBJECT_WLOCK(vm_obj);
- m = vm_phys_fictitious_to_vm_page(dev->agp->base + obj->gtt_offset +
- offset);
+ m = PHYS_TO_VM_PAGE(dev->agp->base + obj->gtt_offset + offset);
+ KASSERT((m->flags & PG_FICTITIOUS) != 0,
+ ("physical address %#jx not fictitious",
+ (uintmax_t)(dev->agp->base + obj->gtt_offset + offset)));
if (m == NULL) {
VM_OBJECT_WUNLOCK(vm_obj);
cause = 60;
diff --git a/sys/dev/drm2/ttm/ttm_bo_vm.c b/sys/dev/drm2/ttm/ttm_bo_vm.c
index 83ec76c..7aa1ac0 100644
--- a/sys/dev/drm2/ttm/ttm_bo_vm.c
+++ b/sys/dev/drm2/ttm/ttm_bo_vm.c
@@ -216,8 +216,12 @@ reserve:
}
if (bo->mem.bus.is_iomem) {
- m = vm_phys_fictitious_to_vm_page(bo->mem.bus.base +
- bo->mem.bus.offset + offset);
+ m = PHYS_TO_VM_PAGE(bo->mem.bus.base + bo->mem.bus.offset +
+ offset);
+ KASSERT((m->flags & PG_FICTITIOUS) != 0,
+ ("physical address %#jx not fictitious",
+ (uintmax_t)(bo->mem.bus.base + bo->mem.bus.offset
+ + offset)));
pmap_page_set_memattr(m, ttm_io_prot(bo->mem.placement));
} else {
ttm = bo->ttm;
OpenPOWER on IntegriCloud