summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorattilio <attilio@FreeBSD.org>2014-06-16 18:15:27 +0000
committerattilio <attilio@FreeBSD.org>2014-06-16 18:15:27 +0000
commit2802c525ad1ace89e32dfadc6121f67fcdd9132f (patch)
tree84adf2de9d1ba827bc45bbdc6f1e76f230319e94 /sys/dev
parent4b840db0c44a4742d5d824c47328d0b1c89de43b (diff)
downloadFreeBSD-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.c4
-rw-r--r--sys/dev/agp/agp_i810.c2
-rw-r--r--sys/dev/cxgbe/tom/t4_ddp.c2
-rw-r--r--sys/dev/drm/via_dmablit.c2
-rw-r--r--sys/dev/drm2/i915/i915_gem.c10
-rw-r--r--sys/dev/drm2/i915/i915_gem_gtt.c2
-rw-r--r--sys/dev/drm2/ttm/ttm_page_alloc.c2
-rw-r--r--sys/dev/ti/if_ti.c2
-rw-r--r--sys/dev/virtio/balloon/virtio_balloon.c2
-rw-r--r--sys/dev/xen/balloon/balloon.c4
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;
OpenPOWER on IntegriCloud