mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-10-30 17:45:19 +00:00 
			
		
		
		
	freebsd: Use compiler.h from FreeBSD's base's linuxkpi
The FreeBSD linux/compiler.h in OpenZFS was copied from a very old version of FreeBSD's linuxkpi's linux/compiler.h. There's no need for this duplication. Use FreeBSD's linuxkpi version instead, and provide zfs_fallthrough to augment it (it's all that's needed). Use #pragma once to avoid naming issues for guard variables. Since this is a complete rewrite, use my copyright here (the original code in FreeBSD still credits everybody). This works back at least to FreeBSD 12.4, which is not out of support, and all newer releases. Remove extra copies of macros that were defined elsewhere, but are now properly defined in LinuxKPI so are redundant. Sponsored-by: Netflix Reviewed-by: Tony Hutter <hutter2@llnl.gov> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Warner Losh <imp@bsdimp.com> Closes #16650
This commit is contained in:
		
							parent
							
								
									0409c47fe0
								
							
						
					
					
						commit
						3d9129a7b6
					
				| @ -1,10 +1,5 @@ | ||||
| /*
 | ||||
|  * Copyright (c) 2010 Isilon Systems, Inc. | ||||
|  * Copyright (c) 2010 iXsystems, Inc. | ||||
|  * Copyright (c) 2010 Panasas, Inc. | ||||
|  * Copyright (c) 2013-2016 Mellanox Technologies, Ltd. | ||||
|  * Copyright (c) 2015 François Tigeot | ||||
|  * All rights reserved. | ||||
|  * Copyright (c) 2024 Warner Losh. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
| @ -26,76 +21,14 @@ | ||||
|  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||||
|  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  * | ||||
|  * $FreeBSD$ | ||||
|  */ | ||||
| #ifndef	_LINUX_COMPILER_H_ | ||||
| #define	_LINUX_COMPILER_H_ | ||||
| 
 | ||||
| #include <sys/cdefs.h> | ||||
| /*
 | ||||
|  * FreeBSD's LinuxKPI compiler.h as far back as FreeBSD 12 has what we need, | ||||
|  * except zfs_fallthrough. | ||||
|  */ | ||||
| #pragma once | ||||
| 
 | ||||
| #include <compat/linuxkpi/common/include/linux/compiler.h> | ||||
| 
 | ||||
| #define	__user | ||||
| #define	__kernel | ||||
| #define	__safe | ||||
| #define	__force | ||||
| #define	__nocast | ||||
| #define	__iomem | ||||
| #define	__chk_user_ptr(x)		((void)0) | ||||
| #define	__chk_io_ptr(x)			((void)0) | ||||
| #define	__builtin_warning(x, y...)	(1) | ||||
| #define	__acquires(x) | ||||
| #define	__releases(x) | ||||
| #define	__acquire(x)			do { } while (0) | ||||
| #define	__release(x)			do { } while (0) | ||||
| #define	__cond_lock(x, c)		(c) | ||||
| #define	__bitwise | ||||
| #define	__devinitdata | ||||
| #define	__deprecated | ||||
| #define	__init | ||||
| #define	__initconst | ||||
| #define	__devinit | ||||
| #define	__devexit | ||||
| #define	__exit | ||||
| #define	__rcu | ||||
| #define	__percpu | ||||
| #define	__weak __weak_symbol | ||||
| #define	__malloc | ||||
| #define	___stringify(...)		#__VA_ARGS__ | ||||
| #define	__stringify(...)		___stringify(__VA_ARGS__) | ||||
| #define	__attribute_const__		__attribute__((__const__)) | ||||
| #undef __always_inline | ||||
| #define	__always_inline			inline | ||||
| #define	noinline			__noinline | ||||
| #define	____cacheline_aligned		__aligned(CACHE_LINE_SIZE) | ||||
| #define	zfs_fallthrough			__attribute__((__fallthrough__)) | ||||
| 
 | ||||
| #if !defined(_KERNEL) && !defined(_STANDALONE) | ||||
| #define	likely(x)			__builtin_expect(!!(x), 1) | ||||
| #define	unlikely(x)			__builtin_expect(!!(x), 0) | ||||
| #endif | ||||
| #define	typeof(x)			__typeof(x) | ||||
| 
 | ||||
| #define	uninitialized_var(x)		x = x | ||||
| #define	__maybe_unused			__unused | ||||
| #define	__always_unused			__unused | ||||
| #define	__must_check			__result_use_check | ||||
| 
 | ||||
| #define	__printf(a, b)			__printflike(a, b) | ||||
| 
 | ||||
| #define	barrier()			__asm__ __volatile__("": : :"memory") | ||||
| #define	___PASTE(a, b) a##b | ||||
| #define	__PASTE(a, b) ___PASTE(a, b) | ||||
| 
 | ||||
| #define	ACCESS_ONCE(x)			(*(volatile __typeof(x) *)&(x)) | ||||
| 
 | ||||
| #define	WRITE_ONCE(x, v) do {		\ | ||||
| 	barrier();			\ | ||||
| 	ACCESS_ONCE(x) = (v);		\ | ||||
| 	barrier();			\ | ||||
| } while (0) | ||||
| 
 | ||||
| #define	lockless_dereference(p) READ_ONCE(p) | ||||
| 
 | ||||
| #define	_AT(T, X)	((T)(X)) | ||||
| 
 | ||||
| #endif	/* _LINUX_COMPILER_H_ */ | ||||
|  | ||||
| @ -70,15 +70,6 @@ hlist_del(struct hlist_node *n) | ||||
| 		n->next->pprev = n->pprev; | ||||
| } | ||||
| 	/* BEGIN CSTYLED */ | ||||
| #define	READ_ONCE(x) ({			\ | ||||
| 	__typeof(x) __var = ({		\ | ||||
| 		barrier();		\ | ||||
| 		ACCESS_ONCE(x);		\ | ||||
| 	});				\ | ||||
| 	barrier();			\ | ||||
| 	__var;				\ | ||||
| }) | ||||
| 
 | ||||
| #define	HLIST_HEAD_INIT { } | ||||
| #define	HLIST_HEAD(name) struct hlist_head name = HLIST_HEAD_INIT | ||||
| #define	INIT_HLIST_HEAD(head) (head)->first = NULL | ||||
|  | ||||
| @ -95,10 +95,6 @@ spl_assert(const char *buf, const char *file, const char *func, int line) | ||||
| #ifndef expect | ||||
| #define	expect(expr, value) (__builtin_expect((expr), (value))) | ||||
| #endif | ||||
| #ifndef __linux__ | ||||
| #define	likely(expr)   expect((expr) != 0, 1) | ||||
| #define	unlikely(expr) expect((expr) != 0, 0) | ||||
| #endif | ||||
| 
 | ||||
| #define	PANIC(fmt, a...)						\ | ||||
| 	spl_panic(__FILE__, __FUNCTION__, __LINE__, fmt, ## a) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Warner Losh
						Warner Losh