2010-08-26 18:49:16 +00:00
|
|
|
/*
|
|
|
|
* CDDL HEADER START
|
|
|
|
*
|
|
|
|
* The contents of this file are subject to the terms of the
|
|
|
|
* Common Development and Distribution License, Version 1.0 only
|
|
|
|
* (the "License"). You may not use this file except in compliance
|
|
|
|
* with the License.
|
|
|
|
*
|
|
|
|
* You can obtain a copy of the license at * usr/src/OPENSOLARIS.LICENSE
|
2022-07-11 21:16:13 +00:00
|
|
|
* or https://opensource.org/licenses/CDDL-1.0.
|
2010-08-26 18:49:16 +00:00
|
|
|
* See the License for the specific language governing permissions
|
|
|
|
* and limitations under the License.
|
|
|
|
*
|
|
|
|
* When distributing Covered Code, include this CDDL HEADER in each
|
|
|
|
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
|
|
|
* If applicable, add the following below this CDDL HEADER, with the
|
|
|
|
* fields enclosed by brackets "[]" replaced with your own identifying
|
|
|
|
* information: Portions Copyright [yyyy] [name of copyright owner]
|
|
|
|
*
|
|
|
|
* CDDL HEADER END
|
|
|
|
*/
|
|
|
|
/*
|
|
|
|
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
|
|
|
|
* Use is subject to license terms.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <sys/nvpair.h>
|
|
|
|
#include <sys/kmem.h>
|
2015-02-05 20:43:37 +00:00
|
|
|
#include <sys/vmem.h>
|
2010-08-26 18:49:16 +00:00
|
|
|
|
|
|
|
static void *
|
|
|
|
nv_alloc_sleep_spl(nv_alloc_t *nva, size_t size)
|
|
|
|
{
|
2015-02-05 20:43:37 +00:00
|
|
|
return (vmem_alloc(size, KM_SLEEP));
|
2010-08-26 18:49:16 +00:00
|
|
|
}
|
|
|
|
|
2013-06-18 17:15:33 +00:00
|
|
|
static void *
|
|
|
|
nv_alloc_pushpage_spl(nv_alloc_t *nva, size_t size)
|
|
|
|
{
|
2015-02-05 20:43:37 +00:00
|
|
|
return (vmem_alloc(size, KM_PUSHPAGE));
|
2013-06-18 17:15:33 +00:00
|
|
|
}
|
|
|
|
|
2010-08-26 18:49:16 +00:00
|
|
|
static void *
|
|
|
|
nv_alloc_nosleep_spl(nv_alloc_t *nva, size_t size)
|
|
|
|
{
|
|
|
|
return (kmem_alloc(size, KM_NOSLEEP));
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
nv_free_spl(nv_alloc_t *nva, void *buf, size_t size)
|
|
|
|
{
|
|
|
|
kmem_free(buf, size);
|
|
|
|
}
|
|
|
|
|
2022-01-14 23:37:55 +00:00
|
|
|
static const nv_alloc_ops_t spl_sleep_ops_def = {
|
2017-11-28 23:33:48 +00:00
|
|
|
.nv_ao_init = NULL,
|
|
|
|
.nv_ao_fini = NULL,
|
|
|
|
.nv_ao_alloc = nv_alloc_sleep_spl,
|
|
|
|
.nv_ao_free = nv_free_spl,
|
|
|
|
.nv_ao_reset = NULL
|
2010-08-26 18:49:16 +00:00
|
|
|
};
|
|
|
|
|
2022-01-14 23:37:55 +00:00
|
|
|
static const nv_alloc_ops_t spl_pushpage_ops_def = {
|
2017-11-28 23:33:48 +00:00
|
|
|
.nv_ao_init = NULL,
|
|
|
|
.nv_ao_fini = NULL,
|
|
|
|
.nv_ao_alloc = nv_alloc_pushpage_spl,
|
|
|
|
.nv_ao_free = nv_free_spl,
|
|
|
|
.nv_ao_reset = NULL
|
2013-06-18 17:15:33 +00:00
|
|
|
};
|
|
|
|
|
2022-01-14 23:37:55 +00:00
|
|
|
static const nv_alloc_ops_t spl_nosleep_ops_def = {
|
2017-11-28 23:33:48 +00:00
|
|
|
.nv_ao_init = NULL,
|
|
|
|
.nv_ao_fini = NULL,
|
|
|
|
.nv_ao_alloc = nv_alloc_nosleep_spl,
|
|
|
|
.nv_ao_free = nv_free_spl,
|
|
|
|
.nv_ao_reset = NULL
|
2010-08-26 18:49:16 +00:00
|
|
|
};
|
|
|
|
|
2022-01-14 23:37:55 +00:00
|
|
|
static nv_alloc_t nv_alloc_sleep_def = {
|
2010-08-26 18:49:16 +00:00
|
|
|
&spl_sleep_ops_def,
|
|
|
|
NULL
|
|
|
|
};
|
|
|
|
|
2022-01-14 23:37:55 +00:00
|
|
|
static nv_alloc_t nv_alloc_pushpage_def = {
|
2013-06-18 17:15:33 +00:00
|
|
|
&spl_pushpage_ops_def,
|
|
|
|
NULL
|
|
|
|
};
|
|
|
|
|
2022-01-14 23:37:55 +00:00
|
|
|
static nv_alloc_t nv_alloc_nosleep_def = {
|
2010-08-26 18:49:16 +00:00
|
|
|
&spl_nosleep_ops_def,
|
|
|
|
NULL
|
|
|
|
};
|
|
|
|
|
2022-01-14 23:37:55 +00:00
|
|
|
nv_alloc_t *const nv_alloc_sleep = &nv_alloc_sleep_def;
|
|
|
|
nv_alloc_t *const nv_alloc_pushpage = &nv_alloc_pushpage_def;
|
|
|
|
nv_alloc_t *const nv_alloc_nosleep = &nv_alloc_nosleep_def;
|