summaryrefslogtreecommitdiffstats
path: root/sys/dev/agp
diff options
context:
space:
mode:
authortijl <tijl@FreeBSD.org>2014-11-02 11:47:40 +0000
committertijl <tijl@FreeBSD.org>2014-11-02 11:47:40 +0000
commitc53f11d985b382be2a49d0c6b8de39dd30f32a71 (patch)
tree2b92b7251a30e9e1cd6ff3db8e3db70d60f7d466 /sys/dev/agp
parentc6908948e33ef7d19dcfcd6462e0e6e762bce03c (diff)
downloadFreeBSD-src-c53f11d985b382be2a49d0c6b8de39dd30f32a71.zip
FreeBSD-src-c53f11d985b382be2a49d0c6b8de39dd30f32a71.tar.gz
- agp_generic_unbind_memory: flush AGP TLB before unwiring pages
- agp_bind_pages: assert that pages have been wired down MFC after: 1 month
Diffstat (limited to 'sys/dev/agp')
-rw-r--r--sys/dev/agp/agp.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/dev/agp/agp.c b/sys/dev/agp/agp.c
index 566a0d9..39caf58 100644
--- a/sys/dev/agp/agp.c
+++ b/sys/dev/agp/agp.c
@@ -645,6 +645,9 @@ agp_generic_unbind_memory(device_t dev, struct agp_memory *mem)
*/
for (i = 0; i < mem->am_size; i += AGP_PAGE_SIZE)
AGP_UNBIND_PAGE(dev, mem->am_offset + i);
+
+ AGP_FLUSH_TLB(dev);
+
VM_OBJECT_WLOCK(mem->am_obj);
for (i = 0; i < mem->am_size; i += PAGE_SIZE) {
m = vm_page_lookup(mem->am_obj, atop(i));
@@ -653,8 +656,6 @@ agp_generic_unbind_memory(device_t dev, struct agp_memory *mem)
vm_page_unlock(m);
}
VM_OBJECT_WUNLOCK(mem->am_obj);
-
- AGP_FLUSH_TLB(dev);
mem->am_offset = 0;
mem->am_is_bound = 0;
@@ -1000,6 +1001,8 @@ agp_bind_pages(device_t dev, vm_page_t *pages, vm_size_t size,
mtx_lock(&sc->as_lock);
for (i = 0; i < size; i += PAGE_SIZE) {
m = pages[OFF_TO_IDX(i)];
+ KASSERT(m->wire_count > 0,
+ ("agp_bind_pages: page %p hasn't been wired", m));
/*
* Install entries in the GATT, making sure that if
OpenPOWER on IntegriCloud