diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-10-25 15:09:17 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-10-31 13:18:52 +0100 |
commit | 3e2938873dc65632de9a463aae78bb4868638023 (patch) | |
tree | 524934dcfbe9b6709d80edab38832d524de5600b /freebsd/sys/vm/uma_int.h | |
parent | rwlock01: New test (diff) | |
download | rtems-libbsd-3e2938873dc65632de9a463aae78bb4868638023.tar.bz2 |
ZONE(9): Add and use red-black tree chunk alloc
Diffstat (limited to 'freebsd/sys/vm/uma_int.h')
-rw-r--r-- | freebsd/sys/vm/uma_int.h | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/freebsd/sys/vm/uma_int.h b/freebsd/sys/vm/uma_int.h index f3a99d78..62cf0452 100644 --- a/freebsd/sys/vm/uma_int.h +++ b/freebsd/sys/vm/uma_int.h @@ -391,6 +391,16 @@ hash_sfind(struct uma_hash *hash, u_int8_t *data) return (NULL); } +#ifdef __rtems__ +#include <machine/rtems-bsd-chunk.h> + +typedef struct { + rtems_bsd_chunk_info chunk_info; + uma_slab_t slab; +} rtems_bsd_uma_chunk_info; + +extern rtems_bsd_chunk_control rtems_bsd_uma_chunks; +#endif /* __rtems__ */ static __inline uma_slab_t vtoslab(vm_offset_t va) { @@ -406,21 +416,31 @@ vtoslab(vm_offset_t va) else return (NULL); #else /* __rtems__ */ - return (NULL); /* XXX - FIX THIS!!! */ + rtems_bsd_uma_chunk_info *uci = (rtems_bsd_uma_chunk_info *) + rtems_bsd_chunk_get_info(&rtems_bsd_uma_chunks, (void *) va); + + return uci->slab; #endif /* __rtems__ */ } -#ifndef __rtems__ static __inline void vsetslab(vm_offset_t va, uma_slab_t slab) { +#ifndef __rtems__ vm_page_t p; p = PHYS_TO_VM_PAGE(pmap_kextract(va)); p->object = (vm_object_t)slab; p->flags |= PG_SLAB; +#else /* __rtems__ */ + rtems_bsd_uma_chunk_info *uci = (rtems_bsd_uma_chunk_info *) + rtems_bsd_chunk_get_info(&rtems_bsd_uma_chunks, (void *) va); + + uci->slab = slab; +#endif /* __rtems__ */ } +#ifndef __rtems__ static __inline void vsetobj(vm_offset_t va, vm_object_t obj) { |