diff options
author | attilio <attilio@FreeBSD.org> | 2014-06-16 18:15:27 +0000 |
---|---|---|
committer | attilio <attilio@FreeBSD.org> | 2014-06-16 18:15:27 +0000 |
commit | 2802c525ad1ace89e32dfadc6121f67fcdd9132f (patch) | |
tree | 84adf2de9d1ba827bc45bbdc6f1e76f230319e94 /sys/dev | |
parent | 4b840db0c44a4742d5d824c47328d0b1c89de43b (diff) | |
download | FreeBSD-src-2802c525ad1ace89e32dfadc6121f67fcdd9132f.zip FreeBSD-src-2802c525ad1ace89e32dfadc6121f67fcdd9132f.tar.gz |
- Modify vm_page_unwire() and vm_page_enqueue() to directly accept
the queue where to enqueue pages that are going to be unwired.
- Add stronger checks to the enqueue/dequeue for the pagequeues when
adding and removing pages to them.
Of course, for unmanaged pages the queue parameter of vm_page_unwire() will
be ignored, just as the active parameter today.
This makes adding new pagequeues quicker.
This change effectively modifies the KPI. __FreeBSD_version will be,
however, bumped just when the full cache of free pages will be
evicted.
Sponsored by: EMC / Isilon storage division
Reviewed by: alc
Tested by: pho
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/agp/agp.c | 4 | ||||
-rw-r--r-- | sys/dev/agp/agp_i810.c | 2 | ||||
-rw-r--r-- | sys/dev/cxgbe/tom/t4_ddp.c | 2 | ||||
-rw-r--r-- | sys/dev/drm/via_dmablit.c | 2 | ||||
-rw-r--r-- | sys/dev/drm2/i915/i915_gem.c | 10 | ||||
-rw-r--r-- | sys/dev/drm2/i915/i915_gem_gtt.c | 2 | ||||
-rw-r--r-- | sys/dev/drm2/ttm/ttm_page_alloc.c | 2 | ||||
-rw-r--r-- | sys/dev/ti/if_ti.c | 2 | ||||
-rw-r--r-- | sys/dev/virtio/balloon/virtio_balloon.c | 2 | ||||
-rw-r--r-- | sys/dev/xen/balloon/balloon.c | 4 |
10 files changed, 16 insertions, 16 deletions
diff --git a/sys/dev/agp/agp.c b/sys/dev/agp/agp.c index 5970943..9eed774 100644 --- a/sys/dev/agp/agp.c +++ b/sys/dev/agp/agp.c @@ -629,7 +629,7 @@ bad: if (k >= i) vm_page_xunbusy(m); vm_page_lock(m); - vm_page_unwire(m, 0); + vm_page_unwire(m, PQ_INACTIVE); vm_page_unlock(m); } VM_OBJECT_WUNLOCK(mem->am_obj); @@ -663,7 +663,7 @@ agp_generic_unbind_memory(device_t dev, struct agp_memory *mem) for (i = 0; i < mem->am_size; i += PAGE_SIZE) { m = vm_page_lookup(mem->am_obj, atop(i)); vm_page_lock(m); - vm_page_unwire(m, 0); + vm_page_unwire(m, PQ_INACTIVE); vm_page_unlock(m); } VM_OBJECT_WUNLOCK(mem->am_obj); diff --git a/sys/dev/agp/agp_i810.c b/sys/dev/agp/agp_i810.c index 725aa99..dbf34e3 100644 --- a/sys/dev/agp/agp_i810.c +++ b/sys/dev/agp/agp_i810.c @@ -2009,7 +2009,7 @@ agp_i810_free_memory(device_t dev, struct agp_memory *mem) VM_OBJECT_WLOCK(mem->am_obj); m = vm_page_lookup(mem->am_obj, 0); vm_page_lock(m); - vm_page_unwire(m, 0); + vm_page_unwire(m, PQ_INACTIVE); vm_page_unlock(m); VM_OBJECT_WUNLOCK(mem->am_obj); } else { diff --git a/sys/dev/cxgbe/tom/t4_ddp.c b/sys/dev/cxgbe/tom/t4_ddp.c index 6c93675..f5dda07 100644 --- a/sys/dev/cxgbe/tom/t4_ddp.c +++ b/sys/dev/cxgbe/tom/t4_ddp.c @@ -869,7 +869,7 @@ unwire_ddp_buffer(struct ddp_buffer *db) for (i = 0; i < db->npages; i++) { p = db->pages[i]; vm_page_lock(p); - vm_page_unwire(p, 0); + vm_page_unwire(p, PQ_INACTIVE); vm_page_unlock(p); } } diff --git a/sys/dev/drm/via_dmablit.c b/sys/dev/drm/via_dmablit.c index 70ba9d9..e8096f2 100644 --- a/sys/dev/drm/via_dmablit.c +++ b/sys/dev/drm/via_dmablit.c @@ -179,7 +179,7 @@ via_free_sg_info(drm_via_sg_info_t *vsg) for (i=0; i < vsg->num_pages; ++i) { page = vsg->pages[i]; vm_page_lock(page); - vm_page_unwire(page, 0); + vm_page_unwire(page, PQ_INACTIVE); vm_page_unlock(page); } case dr_via_pages_alloc: diff --git a/sys/dev/drm2/i915/i915_gem.c b/sys/dev/drm2/i915/i915_gem.c index 99821e4..a3acb60 100644 --- a/sys/dev/drm2/i915/i915_gem.c +++ b/sys/dev/drm2/i915/i915_gem.c @@ -1039,7 +1039,7 @@ i915_gem_swap_io(struct drm_device *dev, struct drm_i915_gem_object *obj, vm_page_dirty(m); vm_page_reference(m); vm_page_lock(m); - vm_page_unwire(m, 1); + vm_page_unwire(m, PQ_ACTIVE); vm_page_unlock(m); atomic_add_long(&i915_gem_wired_pages_cnt, -1); @@ -2247,7 +2247,7 @@ failed: for (j = 0; j < i; j++) { m = obj->pages[j]; vm_page_lock(m); - vm_page_unwire(m, 0); + vm_page_unwire(m, PQ_INACTIVE); vm_page_unlock(m); atomic_add_long(&i915_gem_wired_pages_cnt, -1); } @@ -2308,7 +2308,7 @@ i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj) if (obj->madv == I915_MADV_WILLNEED) vm_page_reference(m); vm_page_lock(m); - vm_page_unwire(obj->pages[i], 1); + vm_page_unwire(obj->pages[i], PQ_ACTIVE); vm_page_unlock(m); atomic_add_long(&i915_gem_wired_pages_cnt, -1); } @@ -3611,7 +3611,7 @@ i915_gem_detach_phys_object(struct drm_device *dev, vm_page_reference(m); vm_page_lock(m); vm_page_dirty(m); - vm_page_unwire(m, 0); + vm_page_unwire(m, PQ_INACTIVE); vm_page_unlock(m); atomic_add_long(&i915_gem_wired_pages_cnt, -1); } @@ -3676,7 +3676,7 @@ i915_gem_attach_phys_object(struct drm_device *dev, vm_page_reference(m); vm_page_lock(m); - vm_page_unwire(m, 0); + vm_page_unwire(m, PQ_INACTIVE); vm_page_unlock(m); atomic_add_long(&i915_gem_wired_pages_cnt, -1); } diff --git a/sys/dev/drm2/i915/i915_gem_gtt.c b/sys/dev/drm2/i915/i915_gem_gtt.c index 90899de..a4ca76f 100644 --- a/sys/dev/drm2/i915/i915_gem_gtt.c +++ b/sys/dev/drm2/i915/i915_gem_gtt.c @@ -206,7 +206,7 @@ i915_gem_cleanup_aliasing_ppgtt(struct drm_device *dev) for (i = 0; i < ppgtt->num_pd_entries; i++) { m = ppgtt->pt_pages[i]; if (m != NULL) { - vm_page_unwire(m, 0); + vm_page_unwire(m, PQ_INACTIVE); vm_page_free(m); } } diff --git a/sys/dev/drm2/ttm/ttm_page_alloc.c b/sys/dev/drm2/ttm/ttm_page_alloc.c index 3c0f18a..8f513d0 100644 --- a/sys/dev/drm2/ttm/ttm_page_alloc.c +++ b/sys/dev/drm2/ttm/ttm_page_alloc.c @@ -139,7 +139,7 @@ ttm_vm_page_free(vm_page_t m) KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("ttm got unmanaged %p", m)); m->flags &= ~PG_FICTITIOUS; m->oflags |= VPO_UNMANAGED; - vm_page_unwire(m, 0); + vm_page_unwire(m, PQ_INACTIVE); vm_page_free(m); } diff --git a/sys/dev/ti/if_ti.c b/sys/dev/ti/if_ti.c index c201029..bba974b 100644 --- a/sys/dev/ti/if_ti.c +++ b/sys/dev/ti/if_ti.c @@ -1616,7 +1616,7 @@ ti_newbuf_jumbo(struct ti_softc *sc, int idx, struct mbuf *m_old) } sf[i] = sf_buf_alloc(frame, SFB_NOWAIT); if (sf[i] == NULL) { - vm_page_unwire(frame, 0); + vm_page_unwire(frame, PQ_INACTIVE); vm_page_free(frame); device_printf(sc->ti_dev, "buffer allocation " "failed -- packet dropped!\n"); diff --git a/sys/dev/virtio/balloon/virtio_balloon.c b/sys/dev/virtio/balloon/virtio_balloon.c index a90a653..d540099 100644 --- a/sys/dev/virtio/balloon/virtio_balloon.c +++ b/sys/dev/virtio/balloon/virtio_balloon.c @@ -450,7 +450,7 @@ static void vtballoon_free_page(struct vtballoon_softc *sc, vm_page_t m) { - vm_page_unwire(m, 0); + vm_page_unwire(m, PQ_INACTIVE); vm_page_free(m); sc->vtballoon_current_npages--; } diff --git a/sys/dev/xen/balloon/balloon.c b/sys/dev/xen/balloon/balloon.c index 2df9c8b..fa56c86 100644 --- a/sys/dev/xen/balloon/balloon.c +++ b/sys/dev/xen/balloon/balloon.c @@ -255,7 +255,7 @@ increase_reservation(unsigned long nr_pages) set_phys_to_machine(pfn, frame_list[i]); - vm_page_unwire(page, 0); + vm_page_unwire(page, PQ_INACTIVE); vm_page_free(page); } @@ -297,7 +297,7 @@ decrease_reservation(unsigned long nr_pages) set_phys_to_machine(pfn, INVALID_P2M_ENTRY); if (balloon_append(page) != 0) { - vm_page_unwire(page, 0); + vm_page_unwire(page, PQ_INACTIVE); vm_page_free(page); nr_pages = i; |