summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/vm
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-11-04 11:33:00 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-11-04 15:28:21 +0100
commitaf5333e0a02b2295304d4e029b15ee15a4fe2b3a (patch)
treec5c43680d374f58b487eeeaf18fb7ec6b84ba074 /freebsd/sys/vm
parentBUS_SPACE(9): Use simple memory model for ARM (diff)
downloadrtems-libbsd-af5333e0a02b2295304d4e029b15ee15a4fe2b3a.tar.bz2
Update to FreeBSD 8.4
Diffstat (limited to 'freebsd/sys/vm')
-rw-r--r--freebsd/sys/vm/uma.h6
-rw-r--r--freebsd/sys/vm/uma_core.c40
-rw-r--r--freebsd/sys/vm/uma_int.h4
-rw-r--r--freebsd/sys/vm/vm_extern.h3
4 files changed, 25 insertions, 28 deletions
diff --git a/freebsd/sys/vm/uma.h b/freebsd/sys/vm/uma.h
index 62a0ca79..138d087f 100644
--- a/freebsd/sys/vm/uma.h
+++ b/freebsd/sys/vm/uma.h
@@ -165,9 +165,9 @@ typedef void (*uma_fini)(void *mem, int size);
* A pointer to a structure which is intended to be opaque to users of
* the interface. The value may be null if the wait flag is not set.
*/
-uma_zone_t uma_zcreate(char *name, size_t size, uma_ctor ctor, uma_dtor dtor,
- uma_init uminit, uma_fini fini, int align,
- u_int32_t flags);
+uma_zone_t uma_zcreate(const char *name, size_t size, uma_ctor ctor,
+ uma_dtor dtor, uma_init uminit, uma_fini fini,
+ int align, u_int32_t flags);
/*
* Create a secondary uma zone
diff --git a/freebsd/sys/vm/uma_core.c b/freebsd/sys/vm/uma_core.c
index 733aa8be..c30d516b 100644
--- a/freebsd/sys/vm/uma_core.c
+++ b/freebsd/sys/vm/uma_core.c
@@ -162,7 +162,7 @@ static struct callout uma_callout;
* a special allocation function just for zones.
*/
struct uma_zctor_args {
- char *name;
+ const char *name;
size_t size;
uma_ctor ctor;
uma_dtor dtor;
@@ -216,6 +216,7 @@ enum zfreeskip { SKIP_NONE, SKIP_DTOR, SKIP_FINI };
#define ZFREE_STATFREE 0x00000002 /* Update zone free statistic. */
/* Prototypes.. */
+
#ifndef __rtems__
static void *obj_alloc(uma_zone_t, int, u_int8_t *, int);
#endif /* __rtems__ */
@@ -286,10 +287,7 @@ static void
bucket_enable(void)
{
#ifndef __rtems__
- if (cnt.v_free_count < cnt.v_free_min)
- bucketdisable = 1;
- else
- bucketdisable = 0;
+ bucketdisable = vm_page_count_min();
#endif /* __rtems__ */
}
@@ -642,9 +640,7 @@ cache_drain(uma_zone_t zone)
* it is used elsewhere. Should the tear-down path be made special
* there in some form?
*/
- for (cpu = 0; cpu <= mp_maxid; cpu++) {
- if (CPU_ABSENT(cpu))
- continue;
+ CPU_FOREACH(cpu) {
cache = &zone->uz_cpu[cpu];
bucket_drain(zone, cache->uc_allocbucket);
bucket_drain(zone, cache->uc_freebucket);
@@ -1022,16 +1018,16 @@ startup_alloc(uma_zone_t zone, int bytes, u_int8_t *pflag, int wait)
static void *
page_alloc(uma_zone_t zone, int bytes, u_int8_t *pflag, int wait)
{
- void *p; /* Returned page */
+ void *p; /* Returned page */
- *pflag = UMA_SLAB_KMEM;
+ *pflag = UMA_SLAB_KMEM;
#ifndef __rtems__
- p = (void *) kmem_malloc(kmem_map, bytes, wait);
+ p = (void *) kmem_malloc(kmem_map, bytes, wait);
#else /* __rtems__ */
- p = rtems_bsd_chunk_alloc(&rtems_bsd_uma_chunks, bytes);
+ p = rtems_bsd_chunk_alloc(&rtems_bsd_uma_chunks, bytes);
#endif /* __rtems__ */
- return (p);
+ return (p);
}
#ifndef __rtems__
@@ -1429,7 +1425,7 @@ keg_ctor(void *mem, int size, void *udata, int flags)
hash_alloc(&keg->uk_hash);
#ifdef UMA_DEBUG
- printf("UMA: %s(%p) size %d(%d) flags %d ipers %d ppera %d out %d free %d\n",
+ printf("UMA: %s(%p) size %d(%d) flags %#x ipers %d ppera %d out %d free %d\n",
zone->uz_name, zone, keg->uk_size, keg->uk_rsize, keg->uk_flags,
keg->uk_ipers, keg->uk_ppera,
(keg->uk_ipers * keg->uk_pages) - keg->uk_free, keg->uk_free);
@@ -1902,7 +1898,7 @@ uma_set_align(int align)
/* See uma.h */
uma_zone_t
-uma_zcreate(char *name, size_t size, uma_ctor ctor, uma_dtor dtor,
+uma_zcreate(const char *name, size_t size, uma_ctor ctor, uma_dtor dtor,
uma_init uminit, uma_fini fini, int align, u_int32_t flags)
{
@@ -3211,7 +3207,7 @@ uma_print_keg(uma_keg_t keg)
{
uma_slab_t slab;
- printf("keg: %s(%p) size %d(%d) flags %d ipers %d ppera %d "
+ printf("keg: %s(%p) size %d(%d) flags %#x ipers %d ppera %d "
"out %d free %d limit %d\n",
keg->uk_name, keg, keg->uk_size, keg->uk_rsize, keg->uk_flags,
keg->uk_ipers, keg->uk_ppera,
@@ -3235,13 +3231,11 @@ uma_print_zone(uma_zone_t zone)
uma_klink_t kl;
int i;
- printf("zone: %s(%p) size %d flags %d\n",
+ printf("zone: %s(%p) size %d flags %#x\n",
zone->uz_name, zone, zone->uz_size, zone->uz_flags);
LIST_FOREACH(kl, &zone->uz_kegs, kl_link)
uma_print_keg(kl->kl_keg);
- for (i = 0; i <= mp_maxid; i++) {
- if (CPU_ABSENT(i))
- continue;
+ CPU_FOREACH(i) {
cache = &zone->uz_cpu[i];
printf("CPU %d Cache:\n", i);
cache_print(cache);
@@ -3271,9 +3265,7 @@ uma_zone_sumstat(uma_zone_t z, int *cachefreep, u_int64_t *allocsp,
allocs = frees = 0;
cachefree = 0;
- for (cpu = 0; cpu <= mp_maxid; cpu++) {
- if (CPU_ABSENT(cpu))
- continue;
+ CPU_FOREACH(cpu) {
cache = &z->uz_cpu[cpu];
if (cache->uc_allocbucket != NULL)
cachefree += cache->uc_allocbucket->ub_cnt;
@@ -3474,6 +3466,8 @@ DB_SHOW_COMMAND(uma, db_show_uma)
(uintmax_t)kz->uk_size,
(intmax_t)(allocs - frees), cachefree,
(uintmax_t)allocs);
+ if (db_pager_quit)
+ return;
}
}
}
diff --git a/freebsd/sys/vm/uma_int.h b/freebsd/sys/vm/uma_int.h
index 62cf0452..b92681c1 100644
--- a/freebsd/sys/vm/uma_int.h
+++ b/freebsd/sys/vm/uma_int.h
@@ -193,7 +193,7 @@ struct uma_keg {
struct mtx uk_lock; /* Lock for the keg */
struct uma_hash uk_hash;
- char *uk_name; /* Name of creating zone. */
+ const char *uk_name; /* Name of creating zone. */
LIST_HEAD(,uma_zone) uk_zones; /* Keg's zones */
LIST_HEAD(,uma_slab) uk_part_slab; /* partially allocated slabs */
LIST_HEAD(,uma_slab) uk_free_slab; /* empty slab list */
@@ -296,7 +296,7 @@ typedef struct uma_klink *uma_klink_t;
*
*/
struct uma_zone {
- char *uz_name; /* Text name of the zone */
+ const char *uz_name; /* Text name of the zone */
struct mtx *uz_lock; /* Lock for the zone (keg's lock) */
LIST_ENTRY(uma_zone) uz_link; /* List of all zones in keg */
diff --git a/freebsd/sys/vm/vm_extern.h b/freebsd/sys/vm/vm_extern.h
index 76f53802..7782f2a0 100644
--- a/freebsd/sys/vm/vm_extern.h
+++ b/freebsd/sys/vm/vm_extern.h
@@ -61,11 +61,14 @@ int useracc(void *, int, int);
int vm_fault(vm_map_t, vm_offset_t, vm_prot_t, int);
void vm_fault_copy_entry(vm_map_t, vm_map_t, vm_map_entry_t, vm_map_entry_t,
vm_ooffset_t *);
+int vm_fault_disable_pagefaults(void);
+void vm_fault_enable_pagefaults(int save);
void vm_fault_unwire(vm_map_t, vm_offset_t, vm_offset_t, boolean_t);
int vm_fault_wire(vm_map_t, vm_offset_t, vm_offset_t, boolean_t, boolean_t);
int vm_forkproc(struct thread *, struct proc *, struct thread *, struct vmspace *, int);
void vm_waitproc(struct proc *);
int vm_mmap(vm_map_t, vm_offset_t *, vm_size_t, vm_prot_t, vm_prot_t, int, objtype_t, void *, vm_ooffset_t);
+int vm_mmap_to_errno(int rv);
void vm_set_page_size(void);
void vm_sync_icache(vm_map_t, vm_offset_t, vm_size_t);
struct vmspace *vmspace_alloc(vm_offset_t, vm_offset_t);