summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/vm/uma_int.h
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-10-25 15:09:17 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-10-31 13:18:52 +0100
commit3e2938873dc65632de9a463aae78bb4868638023 (patch)
tree524934dcfbe9b6709d80edab38832d524de5600b /freebsd/sys/vm/uma_int.h
parentrwlock01: New test (diff)
downloadrtems-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.h24
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)
{