vmem_base.c revision 1219:f89f56c2d9ac
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22
23/*
24 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
25 * Use is subject to license terms.
26 */
27
28#pragma ident	"%Z%%M%	%I%	%E% SMI"
29
30#include "c_synonyms.h"
31#include "vmem_base.h"
32#include "umem_base.h"
33
34uint_t vmem_backend = 0;
35
36vmem_t *
37vmem_heap_arena(vmem_alloc_t **allocp, vmem_free_t **freep)
38{
39	static mutex_t arena_mutex = DEFAULTMUTEX;
40
41	/*
42	 * Allow the init thread through, block others until the init completes
43	 */
44	if (umem_ready != UMEM_READY && umem_init_thr != thr_self() &&
45	    umem_init() == 0)
46		return (NULL);
47
48	(void) mutex_lock(&arena_mutex);
49	if (vmem_heap == NULL)
50		vmem_heap_init();
51	(void) mutex_unlock(&arena_mutex);
52
53	if (allocp != NULL)
54		*allocp = vmem_heap_alloc;
55	if (freep != NULL)
56		*freep = vmem_heap_free;
57	return (vmem_heap);
58}
59