diff options
author | tijl <tijl@FreeBSD.org> | 2014-11-02 11:47:40 +0000 |
---|---|---|
committer | tijl <tijl@FreeBSD.org> | 2014-11-02 11:47:40 +0000 |
commit | c53f11d985b382be2a49d0c6b8de39dd30f32a71 (patch) | |
tree | 2b92b7251a30e9e1cd6ff3db8e3db70d60f7d466 /sys/dev/agp | |
parent | c6908948e33ef7d19dcfcd6462e0e6e762bce03c (diff) | |
download | FreeBSD-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.c | 7 |
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 |