summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/vm/uma_core.c
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sys/vm/uma_core.c')
-rw-r--r--freebsd/sys/vm/uma_core.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/freebsd/sys/vm/uma_core.c b/freebsd/sys/vm/uma_core.c
index 593e7f32..845c4339 100644
--- a/freebsd/sys/vm/uma_core.c
+++ b/freebsd/sys/vm/uma_core.c
@@ -722,11 +722,13 @@ keg_drain(uma_keg_t keg)
while (slab) {
n = LIST_NEXT(slab, us_link);
+#ifndef __rtems__
/* We have no where to free these to */
if (slab->us_flags & UMA_SLAB_BOOT) {
slab = n;
continue;
}
+#endif /* __rtems__ */
LIST_REMOVE(slab, us_link);
keg->uk_pages -= keg->uk_ppera;
@@ -1023,10 +1025,11 @@ page_alloc(uma_zone_t zone, int bytes, u_int8_t *pflag, int wait)
{
void *p; /* Returned page */
- *pflag = UMA_SLAB_KMEM;
#ifndef __rtems__
+ *pflag = UMA_SLAB_KMEM;
p = (void *) kmem_malloc(kmem_map, bytes, wait);
#else /* __rtems__ */
+ *pflag = 0;
p = rtems_bsd_page_alloc(bytes, wait);
#endif /* __rtems__ */
@@ -1121,7 +1124,10 @@ page_free(void *mem, int size, u_int8_t flags)
kmem_free(map, (vm_offset_t)mem, size);
#else /* __rtems__ */
- rtems_bsd_page_free(mem);
+ if (flags & UMA_SLAB_KERNEL)
+ free(mem, M_TEMP);
+ else
+ rtems_bsd_page_free(mem);
#endif /* __rtems__ */
}