svn commit: r185648 - in stable/6/sys: alpha/alpha amd64/amd64
ia64/ia64 powerpc/powerpc sparc64/sparc64
John Baldwin
jhb at FreeBSD.org
Fri Dec 5 13:14:31 PST 2008
Author: jhb
Date: Fri Dec 5 21:14:30 2008
New Revision: 185648
URL: http://svn.freebsd.org/changeset/base/185648
Log:
MFC: It has been observed on the mailing lists that the different
categories of pages don't sum to anywhere near the total number of pages
on amd64. This is for the most part because uma_small_alloc() pages have
never been counted as wired pages, like their kmem_malloc() brethren. They
should be. This changes fixes that.
Discussed with: alc (a while ago)
Modified:
stable/6/sys/alpha/alpha/uma_machdep.c
stable/6/sys/amd64/amd64/uma_machdep.c
stable/6/sys/ia64/ia64/uma_machdep.c
stable/6/sys/powerpc/powerpc/uma_machdep.c
stable/6/sys/sparc64/sparc64/vm_machdep.c
Modified: stable/6/sys/alpha/alpha/uma_machdep.c
==============================================================================
--- stable/6/sys/alpha/alpha/uma_machdep.c Fri Dec 5 20:50:24 2008 (r185647)
+++ stable/6/sys/alpha/alpha/uma_machdep.c Fri Dec 5 21:14:30 2008 (r185648)
@@ -49,9 +49,9 @@ uma_small_alloc(uma_zone_t zone, int byt
*flags = UMA_SLAB_PRIV;
if ((wait & (M_NOWAIT | M_USE_RESERVE)) == M_NOWAIT)
- pflags = VM_ALLOC_INTERRUPT;
+ pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED;
else
- pflags = VM_ALLOC_SYSTEM;
+ pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED;
if (wait & M_ZERO)
pflags |= VM_ALLOC_ZERO;
for (;;) {
@@ -76,7 +76,9 @@ uma_small_free(void *mem, int size, u_in
vm_page_t m;
m = PHYS_TO_VM_PAGE(ALPHA_K0SEG_TO_PHYS((vm_offset_t)mem));
+ m->wire_count--;
vm_page_lock_queues();
vm_page_free(m);
vm_page_unlock_queues();
+ atomic_subtract_int(&cnt.v_wire_count, 1);
}
Modified: stable/6/sys/amd64/amd64/uma_machdep.c
==============================================================================
--- stable/6/sys/amd64/amd64/uma_machdep.c Fri Dec 5 20:50:24 2008 (r185647)
+++ stable/6/sys/amd64/amd64/uma_machdep.c Fri Dec 5 21:14:30 2008 (r185648)
@@ -50,9 +50,9 @@ uma_small_alloc(uma_zone_t zone, int byt
*flags = UMA_SLAB_PRIV;
if ((wait & (M_NOWAIT|M_USE_RESERVE)) == M_NOWAIT)
- pflags = VM_ALLOC_INTERRUPT;
+ pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED;
else
- pflags = VM_ALLOC_SYSTEM;
+ pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED;
if (wait & M_ZERO)
pflags |= VM_ALLOC_ZERO;
for (;;) {
@@ -82,7 +82,9 @@ uma_small_free(void *mem, int size, u_in
pa = DMAP_TO_PHYS((vm_offset_t)mem);
dump_drop_page(pa);
m = PHYS_TO_VM_PAGE(pa);
+ m->wire_count--;
vm_page_lock_queues();
vm_page_free(m);
vm_page_unlock_queues();
+ atomic_subtract_int(&cnt.v_wire_count, 1);
}
Modified: stable/6/sys/ia64/ia64/uma_machdep.c
==============================================================================
--- stable/6/sys/ia64/ia64/uma_machdep.c Fri Dec 5 20:50:24 2008 (r185647)
+++ stable/6/sys/ia64/ia64/uma_machdep.c Fri Dec 5 21:14:30 2008 (r185648)
@@ -48,9 +48,9 @@ uma_small_alloc(uma_zone_t zone, int byt
*flags = UMA_SLAB_PRIV;
if ((wait & (M_NOWAIT|M_USE_RESERVE)) == M_NOWAIT)
- pflags = VM_ALLOC_INTERRUPT;
+ pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED;
else
- pflags = VM_ALLOC_SYSTEM;
+ pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED;
if (wait & M_ZERO)
pflags |= VM_ALLOC_ZERO;
@@ -76,7 +76,9 @@ uma_small_free(void *mem, int size, u_in
vm_page_t m;
m = PHYS_TO_VM_PAGE(IA64_RR_MASK((u_int64_t)mem));
+ m->wire_count--;
vm_page_lock_queues();
vm_page_free(m);
vm_page_unlock_queues();
+ atomic_subtract_int(&cnt.v_wire_count, 1);
}
Modified: stable/6/sys/powerpc/powerpc/uma_machdep.c
==============================================================================
--- stable/6/sys/powerpc/powerpc/uma_machdep.c Fri Dec 5 20:50:24 2008 (r185647)
+++ stable/6/sys/powerpc/powerpc/uma_machdep.c Fri Dec 5 21:14:30 2008 (r185648)
@@ -54,9 +54,9 @@ uma_small_alloc(uma_zone_t zone, int byt
*flags = UMA_SLAB_PRIV;
if ((wait & (M_NOWAIT|M_USE_RESERVE)) == M_NOWAIT)
- pflags = VM_ALLOC_INTERRUPT;
+ pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED;
else
- pflags = VM_ALLOC_SYSTEM;
+ pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED;
if (wait & M_ZERO)
pflags |= VM_ALLOC_ZERO;
@@ -84,8 +84,10 @@ uma_small_free(void *mem, int size, u_in
vm_page_t m;
m = PHYS_TO_VM_PAGE((u_int32_t)mem);
+ m->wire_count--;
vm_page_lock_queues();
vm_page_free(m);
vm_page_unlock_queues();
+ atomic_subtract_int(&cnt.v_wire_count, 1);
atomic_subtract_int(&hw_uma_mdpages, 1);
}
Modified: stable/6/sys/sparc64/sparc64/vm_machdep.c
==============================================================================
--- stable/6/sys/sparc64/sparc64/vm_machdep.c Fri Dec 5 20:50:24 2008 (r185647)
+++ stable/6/sys/sparc64/sparc64/vm_machdep.c Fri Dec 5 21:14:30 2008 (r185648)
@@ -462,9 +462,9 @@ uma_small_alloc(uma_zone_t zone, int byt
*flags = UMA_SLAB_PRIV;
if ((wait & (M_NOWAIT|M_USE_RESERVE)) == M_NOWAIT)
- pflags = VM_ALLOC_INTERRUPT;
+ pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED;
else
- pflags = VM_ALLOC_SYSTEM;
+ pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED;
if (wait & M_ZERO)
pflags |= VM_ALLOC_ZERO;
@@ -501,7 +501,9 @@ uma_small_free(void *mem, int size, u_in
PMAP_STATS_INC(uma_nsmall_free);
m = PHYS_TO_VM_PAGE(TLB_DIRECT_TO_PHYS((vm_offset_t)mem));
+ m->wire_count--;
vm_page_lock_queues();
vm_page_free(m);
vm_page_unlock_queues();
+ atomic_subtract_int(&cnt.v_wire_count, 1);
}
More information about the svn-src-all
mailing list