Home | History | Annotate | Line # | Download | only in sys
      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 (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 /*
     22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     23  * Use is subject to license terms.
     24  */
     25 /*
     26  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
     27  * Copyright (c) 2013 by Delphix. All rights reserved.
     28  */
     29 
     30 #ifndef _SYS_ZFS_CONTEXT_H
     31 #define	_SYS_ZFS_CONTEXT_H
     32 
     33 #ifdef	__cplusplus
     34 extern "C" {
     35 #endif
     36 
     37 #include <sys/param.h>
     38 #include <sys/stdint.h>
     39 #include <sys/note.h>
     40 #include <sys/kernel.h>
     41 #include <sys/debug.h>
     42 #include <sys/systm.h>
     43 #include <sys/proc.h>
     44 #include <sys/sysmacros.h>
     45 #include <sys/bitmap.h>
     46 #include <sys/cmn_err.h>
     47 #include <sys/kmem.h>
     48 #include <sys/taskq.h>
     49 #ifndef __NetBSD__
     50 #include <sys/taskqueue.h>
     51 #endif
     52 #include <sys/systm.h>
     53 #include <sys/conf.h>
     54 #include <sys/mutex.h>
     55 #include <sys/rwlock.h>
     56 #include <sys/kcondvar.h>
     57 #include <sys/random.h>
     58 #include <sys/byteorder.h>
     59 #include <sys/systm.h>
     60 #include <sys/list.h>
     61 #include <sys/zfs_debug.h>
     62 #include <sys/sysevent.h>
     63 #include <sys/uio.h>
     64 #include <sys/dirent.h>
     65 #include <sys/time.h>
     66 #include <sys/uio.h>
     67 #include <sys/fcntl.h>
     68 #ifndef __NetBSD__
     69 #include <sys/limits.h>
     70 #else
     71 #include <sys/syslimits.h>
     72 #endif
     73 #include <sys/string.h>
     74 #ifndef __NetBSD__
     75 #include <sys/bio.h>
     76 #endif
     77 #include <sys/buf.h>
     78 #include <sys/cred.h>
     79 #include <sys/sdt.h>
     80 #include <sys/file.h>
     81 #include <sys/vfs.h>
     82 #include <sys/sysctl.h>
     83 #ifndef __NetBSD__
     84 #include <sys/sbuf.h>
     85 #include <sys/priv.h>
     86 #include <sys/kdb.h>
     87 #include <sys/ktr.h>
     88 #include <sys/stack.h>
     89 #endif
     90 #include <sys/lockf.h>
     91 #include <sys/pathname.h>
     92 #include <sys/policy.h>
     93 #include <sys/refstr.h>
     94 #include <sys/zone.h>
     95 #ifndef __NetBSD__
     96 #include <sys/eventhandler.h>
     97 #endif
     98 #include <sys/extattr.h>
     99 #include <sys/misc.h>
    100 #ifndef __NetBSD__
    101 #include <sys/sig.h>
    102 #include <sys/osd.h>
    103 #endif
    104 #include <sys/sysevent/dev.h>
    105 #include <sys/sysevent/eventdefs.h>
    106 #include <sys/u8_textprep.h>
    107 #include <sys/fm/util.h>
    108 #include <sys/sunddi.h>
    109 #if defined(illumos) || defined(__NetBSD__)
    110 #include <sys/cyclic.h>
    111 #endif
    112 #ifndef __NetBSD__
    113 #include <sys/callo.h>
    114 #include <sys/disp.h>
    115 #include <machine/stdarg.h>
    116 
    117 #include <vm/vm.h>
    118 #include <vm/vm_page.h>
    119 #include <vm/vm_object.h>
    120 #include <vm/vm_kern.h>
    121 #include <vm/vm_map.h>
    122 /* There is clash. vm_map.h defines the two below and vdev_cache.c use them. */
    123 #ifdef min_offset
    124 #undef min_offset
    125 #endif
    126 #ifdef max_offset
    127 #undef max_offset
    128 #endif
    129 #include <vm/vm_extern.h>
    130 #include <vm/vnode_pager.h>
    131 #else /* !__NetBSD__ */
    132 #include <sys/callout.h>
    133 #include <sys/kernel.h>
    134 #include <sys/stdarg.h>
    135 
    136 #include <miscfs/specfs/specdev.h>
    137 #endif /* !__NetBSD__ */
    138 
    139 #ifndef __NetBSD__
    140 
    141 #define	CPU_SEQID	(curcpu)
    142 
    143 #define	tsd_create(keyp, destructor)	do {				\
    144 	*(keyp) = osd_thread_register((destructor));			\
    145 	KASSERT(*(keyp) > 0, ("cannot register OSD"));			\
    146 } while (0)
    147 #define	tsd_destroy(keyp)		osd_thread_deregister(*(keyp))
    148 #define	tsd_get(key)			osd_thread_get(curthread, (key))
    149 #define	tsd_set(key, value)		osd_thread_set(curthread, (key), (value))
    150 
    151 #else /* !__NetBSD__ */
    152 
    153 #define ASSERT_VOP_LOCKED(vp, name)	KASSERT(VOP_ISLOCKED(vp) != 0)
    154 #define ASSERT_VOP_ELOCKED(vp, name)	KASSERT(VOP_ISLOCKED(vp) == LK_EXCLUSIVE)
    155 #define callout_drain(x)		callout_halt(x, NULL)
    156 #define CPU_SEQID			(curcpu()->ci_data.cpu_index)
    157 #define FIGNORECASE			0
    158 #define fm_panic			panic
    159 #define getf				fd_getfile
    160 #define getminor(a)			minor(a)
    161 #define GID_NOBODY			(39)
    162 #define issig(x)			(sigispending(curlwp, 0))
    163 #define kmem_debugging()		0
    164 #define releasef			fd_putfile
    165 #define strfree(str)			kmem_free((str), strlen(str)+1)
    166 #define td_ru				l_ru
    167 #define UID_NOBODY			(32767)
    168 #define vnode_pager_setsize(vp, size)	zfs_netbsd_setsize(vp, size)
    169 #define zone_get_hostid(a)		((unsigned)hostid)
    170 
    171 extern struct utsname utsname;
    172 
    173 void zfs_netbsd_setsize(vnode_t *, off_t);
    174 
    175 static inline int
    176 sprintf(char * __restrict buf, const char * __restrict fmt, ...)
    177 {
    178 	va_list ap;
    179 	int rv;
    180 
    181 	va_start(ap, fmt);
    182 	rv = vsnprintf(buf, 1024, fmt, ap);
    183 	va_end(ap);
    184 	return rv;
    185 }
    186 
    187 static inline void
    188 tsd_create(uint_t *keyp, void (*func)(void *))
    189 {
    190 	int error __unused;
    191 
    192 	error = lwp_specific_key_create(keyp, func);
    193 	KASSERT(error == 0);
    194 }
    195 
    196 static inline void
    197 tsd_destroy(uint_t *keyp)
    198 {
    199 
    200 	lwp_specific_key_delete(*keyp);
    201 }
    202 
    203 static inline void *
    204 tsd_get(uint_t key)
    205 {
    206 
    207 	return lwp_getspecific(key);
    208 }
    209 
    210 static inline int
    211 tsd_set(uint_t key, void *value)
    212 {
    213 
    214 	lwp_setspecific(key, value);
    215 	return 0;
    216 }
    217 
    218 static inline int
    219 vsprintf(char * __restrict buf, const char * __restrict fmt, va_list ap)
    220 {
    221 
    222 	return vsnprintf(buf, 1024, fmt, ap);
    223 }
    224 
    225 #define SYSCTL_DECL(...)
    226 #define SYSCTL_NODE(...)
    227 #define SYSCTL_INT(...)
    228 #define SYSCTL_UINT(...)
    229 #define SYSCTL_LONG(...)
    230 #define SYSCTL_ULONG(...)
    231 #define SYSCTL_QUAD(...)
    232 #define SYSCTL_UQUAD(...)
    233 #ifdef TUNABLE_INT
    234 #undef TUNABLE_INT
    235 #undef TUNABLE_ULONG
    236 #undef TUNABLE_INT_FETCH
    237 #endif
    238 #define TUNABLE_INT(...)
    239 #define TUNABLE_ULONG(...)
    240 #define TUNABLE_INT_FETCH(...)		0
    241 
    242 #endif /* !__NetBSD__ */
    243 
    244 #ifdef	__cplusplus
    245 }
    246 #endif
    247 
    248 extern int zfs_debug_level;
    249 #ifndef __NetBSD__
    250 
    251 extern struct mtx zfs_debug_mtx;
    252 #define	ZFS_LOG(lvl, ...)	do {					\
    253 	if (((lvl) & 0xff) <= zfs_debug_level) {			\
    254 		mtx_lock(&zfs_debug_mtx);				\
    255 		printf("%s:%u[%d]: ", __func__, __LINE__, (lvl));	\
    256 		printf(__VA_ARGS__);					\
    257 		printf("\n");						\
    258 		if ((lvl) & 0x100)					\
    259 			kdb_backtrace();				\
    260 		mtx_unlock(&zfs_debug_mtx);				\
    261 	}								\
    262 } while (0)
    263 
    264 #define	sys_shutdown	rebooting
    265 
    266 #else /* !__NetBSD__ */
    267 
    268 extern kmutex_t zfs_debug_mtx;
    269 #define	ZFS_LOG(lvl, ...)	do {					\
    270 	if (((lvl) & 0xff) <= zfs_debug_level) {			\
    271 		mutex_enter(&zfs_debug_mtx);				\
    272 		printf("%s:%u[%d]: ", __func__, __LINE__, (lvl));	\
    273 		printf(__VA_ARGS__);					\
    274 		printf("\n");						\
    275 		if ((lvl) & 0x100)					\
    276 			/* XXXNETBSD backtrace */;				\
    277 		mutex_exit(&zfs_debug_mtx);				\
    278 	}								\
    279 } while (0)
    280 
    281 #define	sys_shutdown	0
    282 
    283 #endif /* !__NetBSD__ */
    284 
    285 #endif	/* _SYS_ZFS_CONTEXT_H */
    286