diff options
author | glebius <glebius@FreeBSD.org> | 2014-03-04 14:46:30 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2014-03-04 14:46:30 +0000 |
commit | 8a9528c4d0ec97d5f0c55b27a51613851b619e04 (patch) | |
tree | 256bb459a422081d6ab540f11d785e1f0efa5449 /sys/vm | |
parent | d06eb27738c9003bba69ae1f38b8b5addeb568dd (diff) | |
download | FreeBSD-src-8a9528c4d0ec97d5f0c55b27a51613851b619e04.zip FreeBSD-src-8a9528c4d0ec97d5f0c55b27a51613851b619e04.tar.gz |
Merge r261722, r261723, r261724, r261725 from head:
several minor improvements for UMA_ZPCPU_ZONE zones.
Diffstat (limited to 'sys/vm')
-rw-r--r-- | sys/vm/uma.h | 12 | ||||
-rw-r--r-- | sys/vm/uma_core.c | 16 |
2 files changed, 23 insertions, 5 deletions
diff --git a/sys/vm/uma.h b/sys/vm/uma.h index b4fb4e8..5012d98 100644 --- a/sys/vm/uma.h +++ b/sys/vm/uma.h @@ -33,8 +33,8 @@ * */ -#ifndef VM_UMA_H -#define VM_UMA_H +#ifndef _VM_UMA_H_ +#define _VM_UMA_H_ #include <sys/param.h> /* For NULL */ #include <sys/malloc.h> /* For M_* */ @@ -636,6 +636,12 @@ int uma_zone_exhausted(uma_zone_t zone); int uma_zone_exhausted_nolock(uma_zone_t zone); /* + * Common UMA_ZONE_PCPU zones. + */ +extern uma_zone_t pcpu_zone_64; +extern uma_zone_t pcpu_zone_ptr; + +/* * Exported statistics structures to be used by user space monitoring tools. * Statistics stream consists of a uma_stream_header, followed by a series of * alternative uma_type_header and uma_type_stat structures. @@ -683,4 +689,4 @@ struct uma_percpu_stat { uint64_t _ups_reserved[5]; /* Reserved. */ }; -#endif +#endif /* _VM_UMA_H_ */ diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c index 5bfbb72..3350356 100644 --- a/sys/vm/uma_core.c +++ b/sys/vm/uma_core.c @@ -264,6 +264,7 @@ static uma_keg_t uma_kcreate(uma_zone_t zone, size_t size, uma_init uminit, uma_fini fini, int align, uint32_t flags); static int zone_import(uma_zone_t zone, void **bucket, int max, int flags); static void zone_release(uma_zone_t zone, void **bucket, int cnt); +static void uma_zero_item(void *item, uma_zone_t zone); void uma_print_zone(uma_zone_t); void uma_print_stats(void); @@ -2167,7 +2168,7 @@ zalloc_start: uma_dbg_alloc(zone, NULL, item); #endif if (flags & M_ZERO) - bzero(item, zone->uz_size); + uma_zero_item(item, zone); return (item); } @@ -2617,7 +2618,7 @@ zone_alloc_item(uma_zone_t zone, void *udata, int flags) uma_dbg_alloc(zone, NULL, item); #endif if (flags & M_ZERO) - bzero(item, zone->uz_size); + uma_zero_item(item, zone); return (item); @@ -3234,6 +3235,17 @@ uma_large_free(uma_slab_t slab) zone_free_item(slabzone, slab, NULL, SKIP_NONE); } +static void +uma_zero_item(void *item, uma_zone_t zone) +{ + + if (zone->uz_flags & UMA_ZONE_PCPU) { + for (int i = 0; i < mp_ncpus; i++) + bzero(zpcpu_get_cpu(item, i), zone->uz_size); + } else + bzero(item, zone->uz_size); +} + void uma_print_stats(void) { |