diff options
author | Warner Losh <[email protected]> | 2020-10-13 22:05:49 -0600 |
---|---|---|
committer | GitHub <[email protected]> | 2020-10-13 21:05:49 -0700 |
commit | b302185a9283fa93ce98d17ca9893437753ec665 (patch) | |
tree | bfb35fa1de85c884030d3b3b1371a5f6c4230d74 /include/os | |
parent | 57dc5d42b185d2983717580b7fb58bfe423cd834 (diff) |
FreeBSD: make adjustments for the standalone environment
In FreeBSD, there are three compile environments that are supported:
user land, the kernel and the bootloader / standalone. Adjust the
headers to compile in the standalone environment. Limit kernel-only
items from view when _STANDALONE is defined.
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Ryan Moeller <[email protected]>
Signed-off-by: Warner Losh <[email protected]>
Closes #10998
Diffstat (limited to 'include/os')
-rw-r--r-- | include/os/freebsd/linux/compiler.h | 2 | ||||
-rw-r--r-- | include/os/freebsd/spl/rpc/xdr.h | 4 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/atomic.h | 11 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/byteorder.h | 10 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/ccompile.h | 12 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/cmn_err.h | 9 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/condvar.h | 1 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/kmem.h | 10 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/kmem_cache.h | 3 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/kstat.h | 12 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/proc.h | 3 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/procfs_list.h | 6 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/sig.h | 5 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/sysmacros.h | 7 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/taskq.h | 9 | ||||
-rw-r--r-- | include/os/freebsd/spl/sys/uio.h | 4 |
16 files changed, 86 insertions, 22 deletions
diff --git a/include/os/freebsd/linux/compiler.h b/include/os/freebsd/linux/compiler.h index d76050378..05e93efa6 100644 --- a/include/os/freebsd/linux/compiler.h +++ b/include/os/freebsd/linux/compiler.h @@ -68,7 +68,7 @@ #define noinline __noinline #define ____cacheline_aligned __aligned(CACHE_LINE_SIZE) -#ifndef _KERNEL +#if !defined(_KERNEL) && !defined(_STANDALONE) #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif diff --git a/include/os/freebsd/spl/rpc/xdr.h b/include/os/freebsd/spl/rpc/xdr.h index 59d5e425b..c98466e9d 100644 --- a/include/os/freebsd/spl/rpc/xdr.h +++ b/include/os/freebsd/spl/rpc/xdr.h @@ -33,7 +33,7 @@ #include <rpc/types.h> #include_next <rpc/xdr.h> -#ifndef _KERNEL +#if !defined(_KERNEL) && !defined(_STANDALONE) #include <assert.h> @@ -66,6 +66,6 @@ xdrmem_control(XDR *xdrs, int request, void *info) xdrmem_control((xdrs), (req), (op)) : \ (*(xdrs)->x_ops->x_control)(xdrs, req, op)) -#endif /* !_KERNEL */ +#endif /* !_KERNEL && !_STANDALONE */ #endif /* !_OPENSOLARIS_RPC_XDR_H_ */ diff --git a/include/os/freebsd/spl/sys/atomic.h b/include/os/freebsd/spl/sys/atomic.h index 4227e5f7d..1a68bfc4d 100644 --- a/include/os/freebsd/spl/sys/atomic.h +++ b/include/os/freebsd/spl/sys/atomic.h @@ -29,6 +29,8 @@ #ifndef _OPENSOLARIS_SYS_ATOMIC_H_ #define _OPENSOLARIS_SYS_ATOMIC_H_ +#ifndef _STANDALONE + #include <sys/types.h> #include <machine/atomic.h> @@ -179,4 +181,13 @@ atomic_cas_ptr(volatile void *target, void *cmp, void *newval) } #endif /* !defined(COMPAT_32BIT) && defined(__LP64__) */ +#else /* _STANDALONE */ +/* + * sometimes atomic_add_64 is defined, sometimes not, but the + * following is always right for the boot loader. + */ +#undef atomic_add_64 +#define atomic_add_64(ptr, val) *(ptr) += val +#endif /* !_STANDALONE */ + #endif /* !_OPENSOLARIS_SYS_ATOMIC_H_ */ diff --git a/include/os/freebsd/spl/sys/byteorder.h b/include/os/freebsd/spl/sys/byteorder.h index ae767242b..0b3d01eb3 100644 --- a/include/os/freebsd/spl/sys/byteorder.h +++ b/include/os/freebsd/spl/sys/byteorder.h @@ -80,10 +80,11 @@ #define BE_64(x) BSWAP_64(x) #endif +#if !defined(_STANDALONE) #if BYTE_ORDER == _BIG_ENDIAN #define htonll(x) BMASK_64(x) #define ntohll(x) BMASK_64(x) -#else +#else /* BYTE_ORDER == _LITTLE_ENDIAN */ #ifndef __LP64__ static __inline__ uint64_t htonll(uint64_t n) @@ -96,11 +97,12 @@ ntohll(uint64_t n) { return ((((uint64_t)ntohl(n)) << 32) + ntohl(n >> 32)); } -#else +#else /* !__LP64__ */ #define htonll(x) BSWAP_64(x) #define ntohll(x) BSWAP_64(x) -#endif -#endif +#endif /* __LP64__ */ +#endif /* BYTE_ORDER */ +#endif /* _STANDALONE */ #define BE_IN32(xa) htonl(*((uint32_t *)(void *)(xa))) diff --git a/include/os/freebsd/spl/sys/ccompile.h b/include/os/freebsd/spl/sys/ccompile.h index bffe6d21e..cf1e0a8a6 100644 --- a/include/os/freebsd/spl/sys/ccompile.h +++ b/include/os/freebsd/spl/sys/ccompile.h @@ -113,9 +113,9 @@ extern "C" { #define __VPRINTFLIKE(__n) __sun_attr__((__VPRINTFLIKE__(__n))) #define __KPRINTFLIKE(__n) __sun_attr__((__KPRINTFLIKE__(__n))) #define __KVPRINTFLIKE(__n) __sun_attr__((__KVPRINTFLIKE__(__n))) -#ifdef _KERNEL +#if defined(_KERNEL) || defined(_STANDALONE) #define __NORETURN __sun_attr__((__noreturn__)) -#endif +#endif /* _KERNEL || _STANDALONE */ #define __CONST __sun_attr__((__const__)) #define __PURE __sun_attr__((__pure__)) @@ -174,7 +174,7 @@ typedef int enum_t; #define __exit #endif -#ifdef _KERNEL +#if defined(_KERNEL) || defined(_STANDALONE) #define param_set_charp(a, b) (0) #define ATTR_UID AT_UID #define ATTR_GID AT_GID @@ -183,9 +183,15 @@ typedef int enum_t; #define ATTR_CTIME AT_CTIME #define ATTR_MTIME AT_MTIME #define ATTR_ATIME AT_ATIME +#if defined(_STANDALONE) +#define vmem_free kmem_free +#define vmem_zalloc kmem_zalloc +#define vmem_alloc kmem_zalloc +#else #define vmem_free zfs_kmem_free #define vmem_zalloc(size, flags) zfs_kmem_alloc(size, flags | M_ZERO) #define vmem_alloc zfs_kmem_alloc +#endif #define MUTEX_NOLOCKDEP 0 #define RW_NOLOCKDEP 0 diff --git a/include/os/freebsd/spl/sys/cmn_err.h b/include/os/freebsd/spl/sys/cmn_err.h index 00d686439..ba4cff37d 100644 --- a/include/os/freebsd/spl/sys/cmn_err.h +++ b/include/os/freebsd/spl/sys/cmn_err.h @@ -52,42 +52,33 @@ extern "C" { /*PRINTFLIKE2*/ extern void cmn_err(int, const char *, ...) __KPRINTFLIKE(2); -#pragma rarely_called(cmn_err) extern void vzcmn_err(zoneid_t, int, const char *, __va_list) __KVPRINTFLIKE(3); -#pragma rarely_called(vzcmn_err) extern void vcmn_err(int, const char *, __va_list) __KVPRINTFLIKE(2); -#pragma rarely_called(vcmn_err) /*PRINTFLIKE3*/ extern void zcmn_err(zoneid_t, int, const char *, ...) __KPRINTFLIKE(3); -#pragma rarely_called(zcmn_err) extern void vzprintf(zoneid_t, const char *, __va_list) __KVPRINTFLIKE(2); -#pragma rarely_called(vzprintf) /*PRINTFLIKE2*/ extern void zprintf(zoneid_t, const char *, ...) __KPRINTFLIKE(2); -#pragma rarely_called(zprintf) extern void vuprintf(const char *, __va_list) __KVPRINTFLIKE(1); -#pragma rarely_called(vuprintf) /*PRINTFLIKE1*/ extern void panic(const char *, ...) __KPRINTFLIKE(1) __NORETURN; -#pragma rarely_called(panic) extern void vpanic(const char *, __va_list) __KVPRINTFLIKE(1) __NORETURN; -#pragma rarely_called(vpanic) #endif /* !_ASM */ diff --git a/include/os/freebsd/spl/sys/condvar.h b/include/os/freebsd/spl/sys/condvar.h index a634ab6b6..9b1893bcb 100644 --- a/include/os/freebsd/spl/sys/condvar.h +++ b/include/os/freebsd/spl/sys/condvar.h @@ -36,6 +36,7 @@ #include <sys/spl_condvar.h> #include <sys/mutex.h> #include <sys/time.h> +#include <sys/errno.h> /* * cv_timedwait() is similar to cv_wait() except that it additionally expects diff --git a/include/os/freebsd/spl/sys/kmem.h b/include/os/freebsd/spl/sys/kmem.h index 28c65e74a..dc3b4f5d7 100644 --- a/include/os/freebsd/spl/sys/kmem.h +++ b/include/os/freebsd/spl/sys/kmem.h @@ -29,6 +29,7 @@ #ifndef _OPENSOLARIS_SYS_KMEM_H_ #define _OPENSOLARIS_SYS_KMEM_H_ +#ifdef _KERNEL #include <sys/param.h> #include <sys/malloc.h> #include <sys/vmem.h> @@ -93,5 +94,14 @@ void *calloc(size_t n, size_t s); zfs_kmem_alloc((size), (kmflags) | M_ZERO) #define kmem_free(buf, size) zfs_kmem_free((buf), (size)) +#endif /* _KERNEL */ + +#ifdef _STANDALONE +/* + * At the moment, we just need it for the type. We redirect the alloc/free + * routines to the usual Free and Malloc in that environment. + */ +typedef int kmem_cache_t; +#endif /* _STANDALONE */ #endif /* _OPENSOLARIS_SYS_KMEM_H_ */ diff --git a/include/os/freebsd/spl/sys/kmem_cache.h b/include/os/freebsd/spl/sys/kmem_cache.h index d8e0349e4..9eec3b458 100644 --- a/include/os/freebsd/spl/sys/kmem_cache.h +++ b/include/os/freebsd/spl/sys/kmem_cache.h @@ -30,6 +30,7 @@ #ifndef _SPL_KMEM_CACHE_H #define _SPL_KMEM_CACHE_H +#ifdef _KERNEL #include <sys/taskq.h> /* kmem move callback return values */ @@ -46,4 +47,6 @@ extern void spl_kmem_cache_set_move(kmem_cache_t *, #define kmem_cache_set_move(skc, move) spl_kmem_cache_set_move(skc, move) +#endif /* _KERNEL */ + #endif diff --git a/include/os/freebsd/spl/sys/kstat.h b/include/os/freebsd/spl/sys/kstat.h index b0a1c9689..f5157c7f4 100644 --- a/include/os/freebsd/spl/sys/kstat.h +++ b/include/os/freebsd/spl/sys/kstat.h @@ -23,8 +23,11 @@ #ifndef _SPL_KSTAT_H #define _SPL_KSTAT_H + #include <sys/types.h> +#ifndef _STANDALONE #include <sys/sysctl.h> +#endif struct list_head {}; #include <sys/mutex.h> #include <sys/proc.h> @@ -128,9 +131,10 @@ struct kstat_s { kstat_raw_ops_t ks_raw_ops; /* ops table for raw type */ char *ks_raw_buf; /* buf used for raw ops */ size_t ks_raw_bufsize; /* size of raw ops buffer */ +#ifndef _STANDALONE struct sysctl_ctx_list ks_sysctl_ctx; struct sysctl_oid *ks_sysctl_root; - +#endif /* _STANDALONE */ }; typedef struct kstat_named_s { @@ -215,10 +219,16 @@ extern void kstat_runq_exit(kstat_io_t *); __kstat_set_seq_raw_ops(k, h, d, a) #define kstat_set_raw_ops(k, h, d, a) \ __kstat_set_raw_ops(k, h, d, a) +#ifndef _STANDALONE #define kstat_create(m, i, n, c, t, s, f) \ __kstat_create(m, i, n, c, t, s, f) #define kstat_install(k) __kstat_install(k) #define kstat_delete(k) __kstat_delete(k) +#else +#define kstat_create(m, i, n, c, t, s, f) ((kstat_t *)0) +#define kstat_install(k) +#define kstat_delete(k) +#endif #endif /* _SPL_KSTAT_H */ diff --git a/include/os/freebsd/spl/sys/proc.h b/include/os/freebsd/spl/sys/proc.h index a455cfbab..8583df509 100644 --- a/include/os/freebsd/spl/sys/proc.h +++ b/include/os/freebsd/spl/sys/proc.h @@ -41,7 +41,7 @@ #include <sys/kmem.h> #include <sys/malloc.h> - +#ifdef _KERNEL #define CPU curcpu #define minclsyspri PRIBIO #define defclsyspri minclsyspri @@ -111,4 +111,5 @@ zfs_proc_is_caller(proc_t *p) return (p == curproc); } +#endif /* _KERNEL */ #endif /* _OPENSOLARIS_SYS_PROC_H_ */ diff --git a/include/os/freebsd/spl/sys/procfs_list.h b/include/os/freebsd/spl/sys/procfs_list.h index da13f0387..4bc603756 100644 --- a/include/os/freebsd/spl/sys/procfs_list.h +++ b/include/os/freebsd/spl/sys/procfs_list.h @@ -25,6 +25,8 @@ #ifndef _SPL_PROCFS_LIST_H #define _SPL_PROCFS_LIST_H +#ifndef _STANDALONE + #include <sys/kstat.h> #include <sys/mutex.h> @@ -64,4 +66,8 @@ void procfs_list_uninstall(procfs_list_t *procfs_list); void procfs_list_destroy(procfs_list_t *procfs_list); void procfs_list_add(procfs_list_t *procfs_list, void *p); +#else +typedef int procfs_list_t; +#endif /* !_STANDALONE */ + #endif /* _SPL_PROCFS_LIST_H */ diff --git a/include/os/freebsd/spl/sys/sig.h b/include/os/freebsd/spl/sys/sig.h index 426a9e827..a4d440d38 100644 --- a/include/os/freebsd/spl/sys/sig.h +++ b/include/os/freebsd/spl/sys/sig.h @@ -29,6 +29,8 @@ #ifndef _OPENSOLARIS_SYS_SIG_H_ #define _OPENSOLARIS_SYS_SIG_H_ +#ifndef _STANDALONE + #include_next <sys/signal.h> #include <sys/param.h> #include <sys/lock.h> @@ -62,4 +64,7 @@ issig(int why) } return (0); } + +#endif /* !_STANDALONE */ + #endif /* _OPENSOLARIS_SYS_SIG_H_ */ diff --git a/include/os/freebsd/spl/sys/sysmacros.h b/include/os/freebsd/spl/sys/sysmacros.h index 5afca1044..2d0164cb1 100644 --- a/include/os/freebsd/spl/sys/sysmacros.h +++ b/include/os/freebsd/spl/sys/sysmacros.h @@ -31,6 +31,7 @@ #define _SYS_SYSMACROS_H #include <sys/param.h> +#include <sys/systm.h> #include <sys/isa_defs.h> #include <sys/libkern.h> #include <sys/zone.h> @@ -71,7 +72,11 @@ extern "C" { #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) #endif +#ifdef _STANDALONE +#define boot_ncpus 1 +#else /* _STANDALONE */ #define boot_ncpus mp_ncpus +#endif /* _STANDALONE */ #define kpreempt_disable() critical_enter() #define kpreempt_enable() critical_exit() #define CPU_SEQID curcpu @@ -319,7 +324,7 @@ extern unsigned char bcd_to_byte[256]; /* avoid any possibility of clashing with <stddef.h> version */ -#define offsetof(s, m) ((size_t)(&(((s *)0)->m))) +#define offsetof(type, field) __offsetof(type, field) #endif /* diff --git a/include/os/freebsd/spl/sys/taskq.h b/include/os/freebsd/spl/sys/taskq.h index 200f9e838..3040549e0 100644 --- a/include/os/freebsd/spl/sys/taskq.h +++ b/include/os/freebsd/spl/sys/taskq.h @@ -26,6 +26,8 @@ #ifndef _SYS_TASKQ_H #define _SYS_TASKQ_H +#ifdef _KERNEL + #include <sys/types.h> #include <sys/proc.h> #include <sys/taskqueue.h> @@ -112,4 +114,11 @@ void taskq_resume(taskq_t *); } #endif +#endif /* _KERNEL */ + +#ifdef _STANDALONE +typedef int taskq_ent_t; +#define taskq_init_ent(x) +#endif /* _STANDALONE */ + #endif /* _SYS_TASKQ_H */ diff --git a/include/os/freebsd/spl/sys/uio.h b/include/os/freebsd/spl/sys/uio.h index 2b4357a30..cb577df10 100644 --- a/include/os/freebsd/spl/sys/uio.h +++ b/include/os/freebsd/spl/sys/uio.h @@ -29,6 +29,8 @@ #ifndef _OPENSOLARIS_SYS_UIO_H_ #define _OPENSOLARIS_SYS_UIO_H_ +#ifndef _STANDALONE + #include_next <sys/uio.h> #include <sys/_uio.h> #include <sys/debug.h> @@ -107,4 +109,6 @@ uio_index_at_offset(uio_t *uio, offset_t off, uint_t *vec_idx) return (off); } +#endif /* !_STANDALONE */ + #endif /* !_OPENSOLARIS_SYS_UIO_H_ */ |